{"version":3,"file":"ebook.f7a81e1715a94c6eb05a.js","mappings":"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","sources":["webpack://wp/./locales/ sync ^\\.\\/.*\\.yml$","webpack://wp/./modules/ebook/locales/ sync ^\\.\\/.*\\.yml$","webpack://wp/./modules/engine/koa/error/locales/network/ sync ^\\.\\/.*\\.yml$","webpack://wp/./modules/payments/locales/ sync ^\\.\\/.*\\.yml$","webpack://wp/./modules/client/config.js","webpack://wp/./modules/client/delegate.js","webpack://wp/./modules/client/getCsrfCookie.js","webpack://wp/./modules/client/notification/index.js","webpack://wp/./modules/client/spinner.js","webpack://wp/./modules/client/xhr.js","webpack://wp/./modules/ebook/client/orderForm.js","webpack://wp/./modules/engine/i18n/t.js","webpack://wp/./modules/payments/common/client/formPayment.js","webpack://wp/./modules/payments/common/client/index.js","webpack://wp/./node_modules/@paypal/paypal-js/dist/cjs/paypal-js.min.js","webpack://wp/./node_modules/@paypal/paypal-js/index.js","webpack://wp/./node_modules/babelfish/index.js","webpack://wp/./node_modules/babelfish/lib/parser.js","webpack://wp/./node_modules/plurals-cldr/index.js","webpack://wp/./locales/es.yml","webpack://wp/./modules/ebook/locales/es.yml","webpack://wp/./modules/engine/koa/error/locales/network/es.yml","webpack://wp/./modules/payments/locales/es.yml","webpack://wp/webpack/bootstrap","webpack://wp/webpack/runtime/define property getters","webpack://wp/webpack/runtime/hasOwnProperty shorthand","webpack://wp/webpack/runtime/make namespace object","webpack://wp/./modules/ebook/client/index.js"],"sourcesContent":["var map = {\n\t\"./es.yml\": 310\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 205;","var map = {\n\t\"./es.yml\": 209\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 986;","var map = {\n\t\"./es.yml\": 115\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 188;","var map = {\n\t\"./es.yml\": 552\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 23;","module.exports = {\n lang: LANG,\n localCurrency: localCurrency,\n shopCurrency: shopCurrency,\n env: NODE_ENV,\n rateShopTo: rateShopTo,\n countryCode: countryCode,\n ordersMail: ordersMail,\n providers: providers,\n stripeKey: stripeKey,\n paypalClientId: paypalClientId,\n telegramBotId: telegramBotId,\n lookatCodeUrlBase: lookatCodeUrlBase,\n isRTL: isRTL\n};\n","\nfunction findDelegateTarget(event, selector) {\n let currentNode = event.target;\n while (currentNode) {\n if (currentNode.matches(selector)) {\n return currentNode;\n }\n\n if (currentNode == event.currentTarget) {\n break;\n }\n currentNode = currentNode.parentElement;\n }\n return null;\n}\n\n// delegate(table, 'th', click, handler)\n// table\n// thead\n// th ^*\n// code <--\nfunction delegate(topElement, selector, eventName, handler, context) {\n /* jshint -W040 */\n topElement.addEventListener(eventName, function(event) {\n let found = findDelegateTarget(event, selector);\n\n // .currentTarget is read only, I can not overwrite it to the \"found\" element\n // Object.create wrapper would break event.preventDefault()\n // so, keep in mind:\n // --> event.currentTarget is always the top-level (delegating) element!\n // use \"this\" to get the found target\n\n event.delegateTarget = found; // use instead of \"this\" in object methods\n\n if (found) {\n // if in context of object, use object as this,\n handler.call(context || this, event);\n }\n });\n}\n\ndelegate.delegateMixin = function(obj) {\n obj.delegate = function(selector, eventName, handler) {\n delegate(this.elem, selector, eventName, handler, this);\n };\n};\n\nmodule.exports = delegate;\n\n","module.exports = function() {\n let csrfCookie = document.cookie.match(/XSRF-TOKEN=([\\w-]+)/);\n return csrfCookie ? csrfCookie[1] : null;\n};\n\n","/**\n * For new notification types extend Notification\n */\n\nlet delegate = require('client/delegate');\n\n/**\n * Calculates translateY positions when notifications are added/removed\n */\nclass NotificationManager {\n\n constructor(options = {}) {\n this.notifications = [];\n this.verticalSpace = options.verticalSpace || 8;\n }\n\n register(notification) {\n this.notifications.unshift(notification);\n setTimeout(() => this.recalculate(), 20);\n }\n\n unregister(notification) {\n let idx = this.notifications.indexOf(notification);\n this.notifications.splice(idx, 1);\n this.recalculate();\n }\n\n recalculate() {\n let top = this.verticalSpace;\n this.notifications.forEach(notification => {\n notification.top = top;\n top += notification.height + this.verticalSpace;\n });\n }\n\n}\n\n// if this module is included into different webpack builds,\n// ensure they share the same manager object\nexport function init(options) {\n if (!window.notificationManager) {\n window.notificationManager = new NotificationManager(options);\n }\n}\n\n\nclass Notification {\n\n constructor(html, type, timeout) {\n let elemHtml = `
\n
${html}
\n
`;\n\n document.body.insertAdjacentHTML(\"beforeEnd\", elemHtml);\n\n this.elem = document.body.lastElementChild;\n\n switch(timeout) {\n case undefined:\n this.timeout = this.TIMEOUT_DEFAULT;\n break;\n case 'slow':\n this.timeout = this.TIMEOUT_SLOW;\n break;\n case 'fast':\n this.timeout = this.TIMEOUT_FAST;\n break;\n default:\n this.timeout = timeout;\n }\n\n\n window.notificationManager.register(this);\n this.setupCloseHandler();\n this.setupCloseTimeout();\n }\n\n get TIMEOUT_DEFAULT() {\n return 3000;\n }\n\n get TIMEOUT_SLOW() {\n return 5000;\n }\n\n get TIMEOUT_FAST() {\n return 1500;\n }\n\n\n close() {\n if (!this.elem.parentNode) return; // already closed (by user click?)\n this.elem.remove();\n window.notificationManager.unregister(this);\n }\n\n setupCloseHandler() {\n this.delegate('.notification__close', 'click', () => this.close());\n }\n\n setupCloseTimeout() {\n if (this.timeout) {\n setTimeout(() => this.close(), this.timeout);\n }\n }\n\n get height() {\n return this.elem.offsetHeight;\n }\n\n set top(value) {\n this.elem.style.transform = 'translateY(' + value + 'px)';\n }\n\n}\n\ndelegate.delegateMixin(Notification.prototype);\n\n\nexport class Info extends Notification {\n\n constructor(html, timeout) {\n super(html, 'info', timeout);\n }\n\n}\n\nexport class Warning extends Notification {\n\n constructor(html, timeout) {\n super(html, 'warning', timeout);\n }\n}\n\nexport class Success extends Notification {\n\n constructor(html, timeout) {\n super(html, 'success', timeout);\n }\n\n}\n\nexport class Error extends Notification {\n\n constructor(html, timeout) {\n super(html, 'error', timeout);\n }\n\n\n get TIMEOUT_DEFAULT() {\n return 5000;\n }\n\n\n}\n\n/*\nexport class Test extends Notification {\n\n constructor(html) {\n super(html, 'error');\n }\n\n\n get TIMEOUT_DEFAULT() {\n return null;\n }\n\n\n}\n\nexports.Test = Test;\n*/\n","// Usage:\n// 1) new Spinner({ elem: elem}) -> start/stop()\n// 2) new Spinner() -> somewhere.append(spinner.elem) -> start/stop\nfunction Spinner(options) {\n options = options || {};\n this.elem = options.elem;\n\n this.size = options.size || 'medium';\n // any class to add to spinner (make spinner special here)\n this.class = options.class ? (' ' + options.class) : '';\n\n // any class to add to element (to hide it's content for instance)\n this.elemClass = options.elemClass;\n\n if (this.size != 'medium' && this.size != 'small' && this.size != 'large') {\n throw new Error(\"Unsupported size: \" + this.size);\n }\n\n if (!this.elem) {\n this.elem = document.createElement('div');\n }\n}\n\nSpinner.prototype.start = function() {\n if (this.elemClass) {\n this.elem.classList.toggle(this.elemClass);\n }\n\n this.elem.insertAdjacentHTML('beforeend', '');\n};\n\nSpinner.prototype.stop = function() {\n let spinnerElem = this.elem.querySelector('.spinner');\n if (!spinnerElem) return; // already stopped or never started\n\n spinnerElem.remove();\n\n if (this.elemClass) {\n this.elem.classList.toggle(this.elemClass);\n }\n};\n\nwindow.Spinner = Spinner;\n\nmodule.exports = Spinner;\n","let notification = require('client/notification');\nlet getCsrfCookie = require('client/getCsrfCookie');\n\nconst LANG = require('config').lang;\nconst t = require('engine/i18n/t');\n\nt.i18n.add('', require('../../locales/' + LANG + '.yml'));\nt.i18n.add('error.network', require('engine/koa/error/locales/network/' + LANG + '.yml'));\n\n// Wrapper about XHR\n// # Global Events\n// triggers document.loadstart/loadend on communication start/end\n// --> unless options.noGlobalEvents is set\n//\n// # Events\n// triggers fail/success on load end:\n// --> by default status=200 is ok, the others are failures\n// --> options.normalStatuses = [201,409] allow given statuses\n// --> fail event has .reason field\n// --> success event has .result field\n//\n// # JSON\n// --> send(object) calls JSON.stringify\n// --> adds Accept: json (we want json) by default, unless options.raw\n// if options.json or server returned json content type\n// --> autoparse json\n// --> fail if error\n//\n// # CSRF\n// --> requests sends header X-XSRF-TOKEN from cookie\n\nfunction xhr(options) {\n\n let request = new XMLHttpRequest();\n let method = options.method || 'GET';\n\n let body = options.body;\n let url = options.url;\n\n request.open(method, url, options.sync ? false : true);\n\n request.method = method;\n\n // token/header names same as angular $http for easier interop\n let csrfCookie = getCsrfCookie();\n if (csrfCookie && !options.skipCsrf) {\n request.setRequestHeader(\"X-XSRF-TOKEN\", csrfCookie);\n }\n\n if (options.responseType) request.responseType = options.responseType;\n\n if ({}.toString.call(body) == '[object Object]') {\n // must be OPENed to setRequestHeader\n request.setRequestHeader(\"Content-Type\", \"application/json;charset=UTF-8\");\n body = JSON.stringify(body);\n }\n\n if (!options.noDocumentEvents) {\n request.addEventListener('loadstart', event => {\n request.timeStart = Date.now();\n let e = wrapEvent('xhrstart', event);\n document.dispatchEvent(e);\n });\n request.addEventListener('loadend', event => {\n let e = wrapEvent('xhrend', event);\n document.dispatchEvent(e);\n });\n request.addEventListener('success', event => {\n let e = wrapEvent('xhrsuccess', event);\n e.result = event.result;\n document.dispatchEvent(e);\n });\n request.addEventListener('fail', event => {\n let e = wrapEvent('xhrfail', event);\n e.reason = event.reason;\n document.dispatchEvent(e);\n });\n }\n\n if (!options.raw) { // means we want json\n request.setRequestHeader(\"Accept\", \"application/json\");\n }\n\n request.setRequestHeader('X-Requested-With', \"XMLHttpRequest\");\n\n let normalStatuses = options.normalStatuses || [200];\n\n function wrapEvent(name, e) {\n let event = new CustomEvent(name);\n event.originalEvent = e;\n return event;\n }\n\n function fail(reason, originalEvent) {\n let e = wrapEvent(\"fail\", originalEvent);\n e.reason = reason;\n request.dispatchEvent(e);\n }\n\n function success(result, originalEvent) {\n let e = wrapEvent(\"success\", originalEvent);\n e.result = result;\n request.dispatchEvent(e);\n }\n\n request.addEventListener(\"error\", e => {\n fail(t('error.network.server_connection_error'), e);\n });\n\n request.addEventListener(\"timeout\", e => {\n fail(t('error.network.server_request_timeout'), e);\n });\n\n request.addEventListener(\"abort\", e => {\n fail(t('error.network.request_aborted'), e);\n });\n\n request.addEventListener(\"load\", e => {\n if (!request.status) { // does that ever happen?\n fail(t('error.network.no_response'), e);\n return;\n }\n\n let result = !options.responseType || options.responseType === 'text' ? request.responseText : request.response;\n let contentType = request.getResponseHeader(\"Content-Type\") || '';\n if (contentType.match(/^application\\/json/) || options.json) { // autoparse json if WANT or RECEIVED json\n try {\n result = JSON.parse(result);\n } catch (e) {\n fail(t('error.network.invalid_format'), e);\n return;\n }\n }\n\n if (!normalStatuses.includes(request.status)) {\n\n // if we have a JSON response with {info:..} field, show info as error details\n let errorMessage = result.info ?\n t('error.network.server_error_info', {status: request.status, info: result.info}) : t('error.network.server_error', {status: request.status});\n\n fail(errorMessage, e);\n return;\n }\n\n success(result, e);\n });\n\n // defer to let other handlers be assigned\n setTimeout(function() {\n request.send(body);\n });\n\n return request;\n\n}\n\n\ndocument.addEventListener('xhrfail', function(event) {\n new notification.Error(event.reason);\n});\n\n\nmodule.exports = xhr;\n","let xhr = require('client/xhr');\nlet notification = require('client/notification');\nlet delegate = require('client/delegate');\nlet FormPayment = require('payments/common/client').FormPayment;\n\nconst config = require('config');\n\nconst t = require('engine/i18n/t');\n\nconst LANG = require('config').lang;\n\nt.i18n.add('ebook', require('../locales/' + LANG + '.yml'));\n\nclass OrderForm {\n\n constructor(options) {\n this.elem = options.elem;\n\n this.product = 'ebook';\n\n this.elem.addEventListener('submit', (e) => this.onSubmit(e));\n\n this.delegate('[data-order-payment-change]', 'click', function(e) {\n e.preventDefault();\n this.elem.querySelector('[data-order-form-step-payment]').style.display = 'block';\n this.elem.querySelector('[data-order-form-step-confirm]').style.display = 'none';\n this.elem.querySelector('[data-order-form-step-receipt]').style.display = 'none';\n });\n\n this.delegate('.new-complex-form__extract .extract__item', 'click', function(e) {\n e.delegateTarget.querySelector('[type=\"radio\"]').checked = true;\n });\n\n this.elem.addEventListener('change', e => this.onChange(e));\n\n this.formPayment = new FormPayment(this, this.elem);\n\n this.showHidePaypalButtons();\n }\n\n\n onSubmit(event) {\n event.preventDefault();\n this.formPayment.submit();\n }\n\n onChange(event) {\n this.showHidePaypalButtons();\n }\n\n showHidePaypalButtons() {\n if (!document.querySelector('#input-paypal')) return;\n \n if (document.querySelector('#input-paypal').checked) {\n document.querySelector('[data-pay-paypal-buttons]').style.display = 'block';\n document.querySelector('[data-pay-regular-buttons]').style.display = 'none';\n } else {\n document.querySelector('[data-pay-paypal-buttons]').style.display = 'none';\n document.querySelector('[data-pay-regular-buttons]').style.display = 'block';\n }\n }\n\n // return orderData or nothing if validation failed\n getOrderData() {\n let orderData = { };\n\n if (window.order) {\n orderData.orderNumber = window.order.number;\n orderData.amount = window.order.amount;\n orderData.title = window.order.title;\n orderData.email = window.order.email;\n } else {\n let chooser = this.elem.querySelector('input[name=\"orderTemplate\"]:checked');\n orderData.orderTemplate = chooser.value;\n orderData.amount = chooser.dataset.price;\n orderData.title = chooser.dataset.title;\n }\n\n if (this.elem.elements.email) {\n if (!this.elem.elements.email.value) {\n new notification.Error(t('ebook.client.enter_email'));\n this.elem.elements.email.scrollIntoView();\n setTimeout(function() {\n window.scrollBy(0, -200);\n }, 0);\n this.elem.elements.email.focus();\n return;\n } else {\n orderData.email = this.elem.elements.email.value;\n }\n }\n\n if (!orderData.email) {\n orderData.email = window.currentUser.email;\n }\n\n return orderData;\n }\n\n\n\n}\n\n\ndelegate.delegateMixin(OrderForm.prototype);\n\nmodule.exports = OrderForm;\n","'use strict';\n\nconst BabelFish = require('babelfish');\n\nconst i18n = new BabelFish('en');\n\nlet err = console.error;\n\nif (typeof IS_CLIENT === 'undefined') {\n const log = require('engine/log')();\n err = (...args) => log.error(...args);\n}\n\nfunction t(phrase) {\n\n if (!i18n.hasPhrase(LANG, phrase)) {\n if (process.env.NODE_ENV !== 'production' || process.env.I18N_DEBUG) {\n // silent in production to avoid spamming the logs\n err(\"No such phrase\", phrase);\n }\n }\n\n return i18n.t(LANG, ...arguments);\n}\n\nmodule.exports = t;\n\nconst LANG = require('config').lang;\n\nif (LANG !== 'en') {\n i18n.setFallback(LANG, 'en');\n}\n\ni18n.add = (...args) => {\n args = args.map(arg => arg.__esModule ? arg.default : arg);\n return i18n.addPhrase(LANG, ...args);\n};\n\nt.i18n = i18n;\n","let notification = require('client/notification');\nlet xhr = require('client/xhr');\nlet Spinner = require('client/spinner');\n\nconst t = require('engine/i18n/t');\n\nconst config = require('config');\nconst {localCurrency, shopCurrency} = require('config');\n\n// https://developer.paypal.com/sdk/js/configuration/#link-queryparameters\nconst loadPaypalScript = require(\"@paypal/paypal-js\").loadScript;\n\nt.i18n.add('payments', require('../../locales/' + config.lang + '.yml'));\n\n\n/**\n * Get data from orderForm.getOrderData()\n * process payment, ask for more data if needed\n */\nclass FormPayment {\n\n constructor(orderForm, paymentMethodElem) {\n this.orderForm = orderForm;\n this.paymentMethodElem = paymentMethodElem;\n\n\n if (document.querySelector(\"[data-pay-paypal-buttons]\")) {\n // paypal method enabled (and assuming the order not paid)\n loadPaypalScript({\n \"client-id\": config.paypalClientId,\n currency: shopCurrency,\n components: \"buttons,marks\"\n }).then(() => {\n let buttons = this.initPaypalButtons();\n\n buttons.render(\"[data-pay-paypal-buttons]\");\n\n window.paypal.Marks().render(document.getElementById('input-paypal').parentNode.querySelector('.pay-method__paypal-marks'));\n });\n }\n\n }\n\n request(options) {\n let request = xhr(options);\n\n request.addEventListener('loadstart', function() {\n let onEnd = this.startRequestIndication();\n request.addEventListener('loadend', onEnd);\n }.bind(this));\n\n return request;\n }\n\n startRequestIndication() {\n\n this.paymentMethodElem.classList.add('modal-overlay_light');\n\n let spinner = new Spinner({\n elem: this.paymentMethodElem.querySelector('[type=\"submit\"]'),\n size: 'small',\n class: '',\n elemClass: 'button_loading'\n });\n spinner.start();\n\n return () => {\n this.paymentMethodElem.classList.remove('modal-overlay_light');\n if (spinner) spinner.stop();\n };\n\n }\n\n readPaymentFormValues() {\n let paymentData = {};\n\n [].forEach.call(this.paymentMethodElem.querySelectorAll('input,select,textarea'), function(elem) {\n if ( (elem.type == 'radio' || elem.type == 'checkbox') && !elem.checked) return;\n paymentData[elem.name] = elem.value;\n });\n\n return paymentData;\n }\n\n readOrderDataWithPayment() {\n\n let orderData = this.orderForm.getOrderData();\n if (!orderData) return;\n\n let paymentData = this.readPaymentFormValues();\n\n if (!paymentData.paymentMethod) {\n new notification.Error(t('payments.client.choose_payment_method'));\n return;\n }\n\n if (paymentData.paymentMethod == 'invoice') {\n if (!paymentData.invoiceCompanyName) {\n new notification.Error(t('payments.client.specify_company_name'));\n this.paymentMethodElem.querySelector('[name=\"invoiceCompanyName\"]').focus();\n return;\n }\n if (document.querySelector('#invoice-agreement').checked || document.querySelector('#invoice-act').checked) {\n let contractHeadElem = document.querySelector('#invoice-contract-head')\n if (!contractHeadElem.dataset.prefilled && contractHeadElem.value == contractHeadElem.defaultValue) {\n new notification.Error(\"Введите, пожалуйста, шапку договора/акта.\");\n contractHeadElem.focus();\n return;\n }\n\n let contractAddressElem = document.querySelector('#invoice-company-address')\n if (!contractAddressElem.dataset.prefilled && contractAddressElem.value == contractAddressElem.defaultValue) {\n new notification.Error(\"Введите, пожалуйста, юридический адрес.\");\n contractAddressElem.focus();\n return;\n }\n\n let bankDetailsElem = document.querySelector('#invoice-bank-details')\n if (!bankDetailsElem.dataset.prefilled && bankDetailsElem.value == bankDetailsElem.defaultValue) {\n new notification.Error(\"Ведите, пожалуйста, реквизиты.\");\n bankDetailsElem.focus();\n return;\n }\n\n let invoiceDocumentExchangeEdoElem = document.querySelector('#invoice-document-exchange-edo')\n\n if (invoiceDocumentExchangeEdoElem && invoiceDocumentExchangeEdoElem.checked) {\n let innElem = document.getElementById('invoice-inn');\n let inn = innElem.value.trim();\n if (!inn) {\n new notification.Error(\"Введите ИНН, пожалуйста.\");\n innElem.focus();\n return;\n }\n if (inn.length != 10 && inn.length != 12 || /\\D/.test(inn)) {\n new notification.Error(\"Некорректный ИНН (должно быть 10 или 12 цифр)\");\n innElem.focus();\n return;\n }\n\n let kppElem = document.getElementById('invoice-kpp');\n if (kppElem.value == '') {\n new notification.Error(\"Введите КПП, пожалуйста (или 0, если его нет).\");\n kppElem.focus();\n return;\n }\n let kpp = +kppElem.value;\n if (kpp != 0 && (kpp < 1e8 || kpp >= 1e10)) {\n new notification.Error(\"Некорректный КПП (должно быть 9 цифр)\");\n kppElem.focus();\n return;\n }\n\n }\n\n let invoiceDocumentExchangeMailElem = document.querySelector('#invoice-document-exchange-mail');\n\n if (invoiceDocumentExchangeMailElem && invoiceDocumentExchangeMailElem.checked) {\n let fields = {\n \"invoice-company-mail-index\": \"Индекс\",\n \"invoice-company-mail-who\": \"Кому\",\n \"invoice-company-mail-address\": \"Адрес\"\n };\n\n for(let [id, name] of Object.entries(fields)) {\n let elem = document.getElementById(id);\n if (!elem.value) {\n new notification.Error(`Почтовый адрес: заполните поле ${name}.`);\n elem.focus();\n return;\n }\n }\n\n let index = document.getElementById('invoice-company-mail-index').value;\n if (index.length < 5 || index.length > 7) {\n new notification.Error(`Почтовый адрес: некорректный индекс (от 5 до 7 цифр).`);\n let elem = document.getElementById('invoice-company-mail-index');\n elem.focus();\n return;\n }\n }\n\n }\n }\n\n for (let key in paymentData) {\n orderData[key] = paymentData[key];\n }\n return orderData;\n }\n\n async submit() {\n let orderData = this.readOrderDataWithPayment();\n\n if (!orderData) {\n // couldn't read, error occured\n return;\n }\n\n return await this.sendPaymentRequest(orderData);\n }\n\n initPaypalButtons() {\n return window.paypal.Buttons({\n style: {\n layout: 'vertical',\n size: 'small',\n color: 'blue',\n label: 'pay',\n height: 40,\n tagline: false\n },\n // https://developer.paypal.com/docs/checkout/standard/customize/validate-user-input/\n // // onClick is called when the button is clicked\n // order validation, see also https://github.com/paypal/paypal-checkout-components/issues/139#issuecomment-558864009\n onClick: (data, actions) => {\n if (this.readOrderDataWithPayment()) {\n // if no errors, and the object is returned\n return true;\n } else {\n return false;\n }\n },\n // Call your server to set up the transaction\n createOrder: async (data, actions) => {\n\n let form, orderNumber;\n\n let submitResult = await this.submit();\n\n if (!submitResult) {\n throw new Error(\"Empty submitResult (must not happen, validate in onClick)\");\n }\n\n form = submitResult.form;\n orderNumber = submitResult.orderNumber;\n\n return form.paypalOrderId;\n },\n onApprove: (data, actions) => {\n /*\n data example: {\n billingToken: null\n facilitatorAccessToken: \"A21AANIGhT2tqhJ504cgKEa9Z_g-xw\"\n orderID: \"13S57819S21.....\"\n payerID: \"H3R8....ZYU\"\n paymentID: null\n } */\n\n let request = this.request({\n method: 'POST',\n url: '/payments/paypal/capture',\n json: true,\n body: {\n paypalOrderId: data.orderID\n }\n });\n\n request.addEventListener('success', (event) => {\n\n let result = event.result;\n\n /* result example:\n {\n \"id\": \"4FS73595UP9872822\",\n \"status\": \"COMPLETED\",\n \"purchase_units\": [{\n \"reference_id\": \"default\",\n \"shipping\": {\n \"name\": {\n \"full_name\": \"...\"\n },\n \"address\": { ... }\n },\n \"payments\": {\n \"captures\": [{\n \"id\": \"8N5393015K7333731\",\n \"status\": \"COMPLETED\",\n \"amount\": {\n \"currency_code\": \"RUB\",\n \"value\": \"1.00\"\n },\n \"final_capture\": true,\n \"seller_protection\": {\n \"status\": \"ELIGIBLE\",\n \"dispute_categories\": [\"ITEM_NOT_RECEIVED\", \"UNAUTHORIZED_TRANSACTION\"]\n },\n \"seller_receivable_breakdown\": {...}\n \"links\": [...]\n }\n }],\n \"payer\": {\n \"name\": {\n \"given_name\": \"...\",\n \"surname\": \"...\"\n },\n \"email_address\": \"...\",\n \"payer_id\": \"...\",\n \"address\": {\n \"country_code\": \"...\"\n }\n },\n \"links\": [...]\n }\n */\n\n if (result.id !== data.orderID) {\n throw new Error(\"Result id must match order id (assertion failed)\");\n }\n if (result.status != \"COMPLETED\") {\n new notification.Error(t('payments.client.error_start_again', {\n message: `Error ${result.status} Order ${result.id}`,\n email: config.ordersMail\n }));\n return;\n }\n\n actions.redirect(`${window.location.protocol}//${window.location.host}/payments/common/redirect/order/${result.orderNumber}`);\n });\n },\n onCancel: (paypalOrder) => {\n new notification.Error(t('payments.payment_failed'));\n },\n onError: (err) => {\n new notification.Error(t('payments.client.error_start_again', {\n message: err.message,\n email: config.ordersMail\n }));\n console.error(err);\n }\n\n });\n }\n\n async sendPaymentRequest(orderData) {\n // response status must be 200\n let request = xhr({\n method: 'POST',\n url: '/payments/common/checkout',\n normalStatuses: [200, 403, 400, 503],\n body: orderData,\n noDocumentEvents: true\n });\n\n // GA4\n // if (orderData.orderTemplate) {\n // window.ga('ec:addProduct', {\n // id: this.orderForm.product,\n // variant: orderData.orderTemplate,\n // price: orderData.amount,\n // quantity: 1\n // });\n // }\n\n // window.ga('ec:setAction', 'checkout', {\n // step: 1,\n // option: orderData.paymentMethod\n // });\n\n // window.ga('send', 'event', {\n // eventCategory: this.orderForm.product,\n // eventAction: 'checkout-payment'\n // });\n\n let onEnd = this.startRequestIndication();\n\n return new Promise((resolve, reject) => {\n request.addEventListener('success', (event) => {\n\n let errorText;\n if (request.status == 403) {\n errorText = 'payments.client.error_start_again';\n } else if (request.status == 503) {\n errorText = 'payments.client.purchase_error'\n } else if (request.status == 400) {\n errorText = 'payments.client.maybe_purchase_error';\n }\n\n if (errorText) {\n new notification.Error(t(errorText, {\n message: (event.result.description || event.result.message || ''),\n email: config.ordersMail\n }));\n onEnd();\n reject();\n return;\n }\n\n let result = event.result;\n\n if (result.form) {\n // don't stop the spinner while submitting the form to the payment system!\n // (still in progress)\n\n // GA4\n // window.ga('ec:setAction', 'purchase', {\n // id: result.orderNumber\n // });\n\n if (orderData.paymentMethod === 'paypal') {\n onEnd();\n resolve(result);\n return;\n } else if (result.form.redirect) {\n window.location.href = result.form.redirect;\n } else {\n let container = document.createElement('div');\n container.hidden = true;\n container.innerHTML = result.form;\n document.body.appendChild(container);\n\n container.firstChild.submit();\n }\n\n } else {\n console.error(result);\n onEnd();\n new notification.Error(t('payments.client.purchase_error', {\n email: config.ordersMail\n }));\n }\n });\n\n request.addEventListener('fail', event => {\n new notification.Error(event.reason);\n onEnd();\n reject();\n });\n })\n }\n}\n\nmodule.exports = FormPayment;\n","exports.FormPayment = require('./formPayment');\n","/*!\n * paypal-js v5.1.6 (2023-03-27T20:51:02.623Z)\n * Copyright 2020-present, PayPal, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\"use strict\";function t(t){var r=\"https://www.paypal.com/sdk/js\";t.sdkBaseURL&&(r=t.sdkBaseURL,delete t.sdkBaseURL),function(t){var e=t[\"merchant-id\"],r=t[\"data-merchant-id\"],n=\"\",o=\"\";Array.isArray(e)?e.length>1?(n=\"*\",o=e.toString()):n=e.toString():\"string\"==typeof e&&e.length>0?n=e:\"string\"==typeof r&&r.length>0&&(n=\"*\",o=r);t[\"merchant-id\"]=n,t[\"data-merchant-id\"]=o}(t);var n=Object.keys(t).filter((function(e){return void 0!==t[e]&&null!==t[e]&&\"\"!==t[e]})).reduce((function(e,r){var n=t[r].toString();return\"data-\"===r.substring(0,5)?e.dataAttributes[r]=n:e.queryParams[r]=n,e}),{queryParams:{},dataAttributes:{}}),o=n.queryParams,a=n.dataAttributes;return{url:\"\".concat(r,\"?\").concat(e(o)),dataAttributes:a}}function e(t){var e=\"\";return Object.keys(t).forEach((function(r){0!==e.length&&(e+=\"&\"),e+=r+\"=\"+t[r]})),e}function r(t,e){void 0===e&&(e={});var r=document.createElement(\"script\");return r.src=t,Object.keys(e).forEach((function(t){r.setAttribute(t,e[t]),\"data-csp-nonce\"===t&&r.setAttribute(\"nonce\",e[\"data-csp-nonce\"])})),r}function n(t,e){void 0===e&&(e=o()),i(t,e);var n=t.url,a=t.attributes;if(\"string\"!=typeof n||0===n.length)throw new Error(\"Invalid url.\");if(void 0!==a&&\"object\"!=typeof a)throw new Error(\"Expected attributes to be an object.\");return new e((function(t,e){if(\"undefined\"==typeof document)return t();!function(t){var e=t.url,n=t.attributes,o=t.onSuccess,a=t.onError,i=r(e,n);i.onerror=a,i.onload=o,document.head.insertBefore(i,document.head.firstElementChild)}({url:n,attributes:a,onSuccess:function(){return t()},onError:function(){var t=new Error('The script \"'.concat(n,'\" failed to load.'));return window.fetch?fetch(n).then((function(r){return 200===r.status&&e(t),r.text()})).then((function(t){var r=function(t){var e=t.split(\"/* Original Error:\")[1];return e?e.replace(/\\n/g,\"\").replace(\"*/\",\"\").trim():t}(t);e(new Error(r))})).catch((function(t){e(t)})):e(t)}})}))}function o(){if(\"undefined\"==typeof Promise)throw new Error(\"Promise is undefined. To resolve the issue, use a Promise polyfill.\");return Promise}function a(t){return window[t]}function i(t,e){if(\"object\"!=typeof t||null===t)throw new Error(\"Expected an options object.\");if(void 0!==e&&\"function\"!=typeof e)throw new Error(\"Expected PromisePonyfill to be a function.\")}exports.loadCustomScript=n,exports.loadScript=function(e,u){if(void 0===u&&(u=o()),i(e,u),\"undefined\"==typeof document)return u.resolve(null);var c=t(e),s=c.url,d=c.dataAttributes,l=d[\"data-namespace\"]||\"paypal\",f=a(l);return function(t,e){var n=document.querySelector('script[src=\"'.concat(t,'\"]'));if(null===n)return null;var o=r(t,e),a=n.cloneNode();if(delete a.dataset.uidAuto,Object.keys(a.dataset).length!==Object.keys(o.dataset).length)return null;var i=!0;return Object.keys(a.dataset).forEach((function(t){a.dataset[t]!==o.dataset[t]&&(i=!1)})),i?n:null}(s,d)&&f?u.resolve(f):n({url:s,attributes:d},u).then((function(){var t=a(l);if(t)return t;throw new Error(\"The window.\".concat(l,\" global variable is not available.\"))}))},exports.version=\"5.1.6\";\n","if (process.env.NODE_ENV === \"production\") {\n module.exports = require(\"./dist/cjs/paypal-js.min.js\");\n} else {\n module.exports = require(\"./dist/cjs/paypal-js.js\");\n}\n","/**\n * class BabelFish\n *\n * Internalization and localization library that makes i18n and l10n fun again.\n *\n * ##### Example\n *\n * ```javascript\n * var BabelFish = require('babelfish'),\n * i18n = new BabelFish();\n * ```\n *\n * or\n *\n * ```javascript\n * var babelfish = require('babelfish'),\n * i18n = babelfish();\n * ```\n **/\n\n\n'use strict';\n\n\nvar parser = require('./lib/parser');\nvar plural = require('plurals-cldr');\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\n\nfunction isString(obj) { return _class(obj) === '[object String]'; }\nfunction isNumber(obj) { return !isNaN(obj) && isFinite(obj); }\nfunction isBoolean(obj) { return obj === true || obj === false; }\nfunction isFunction(obj) { return _class(obj) === '[object Function]'; }\nfunction isObject(obj) { return _class(obj) === '[object Object]'; }\n\n/*istanbul ignore next*/\nvar isArray = Array.isArray || function _isArray(obj) {\n return _class(obj) === '[object Array]';\n};\n\n\n////////////////////////////////////////////////////////////////////////////////\n// The following two utilities (forEach and extend) are modified from Underscore\n//\n// http://underscorejs.org\n//\n// (c) 2009-2013 Jeremy Ashkenas, DocumentCloud Inc.\n//\n// Underscore may be freely distributed under the MIT license\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar nativeForEach = Array.prototype.forEach;\n\n\n// The cornerstone, an `each` implementation, aka `forEach`.\n// Handles objects with the built-in `forEach`, arrays, and raw objects.\n// Delegates to **ECMAScript 5**'s native `forEach` if available.\n/*istanbul ignore next*/\nfunction forEach(obj, iterator, context) {\n if (obj === null) {\n return;\n }\n if (nativeForEach && obj.forEach === nativeForEach) {\n obj.forEach(iterator, context);\n } else if (obj.length === +obj.length) {\n for (var i = 0, l = obj.length; i < l; i += 1) {\n iterator.call(context, obj[i], i, obj);\n }\n } else {\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n iterator.call(context, obj[key], key, obj);\n }\n }\n }\n}\n\n\nvar formatRegExp = /%[sdj%]/g;\n\n/*istanbul ignore next*/\nfunction format(f) {\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function (x) {\n if (x === '%%') { return '%'; }\n if (i >= len) { return x; }\n switch (x) {\n case '%s':\n return String(args[i++]);\n case '%d':\n return Number(args[i++]);\n case '%j':\n return JSON.stringify(args[i++]);\n default:\n return x;\n }\n });\n return str;\n}\n\n\n// helpers\n////////////////////////////////////////////////////////////////////////////////\n\n\n// Last resort locale, that exists for sure\nvar GENERIC_LOCALE = 'en';\n\n\n// flatten(obj) -> Object\n//\n// Flattens object into one-level dictionary.\n//\n// ##### Example\n//\n// var obj = {\n// abc: { def: 'foo' },\n// hij: 'bar'\n// };\n//\n// flatten(obj);\n// // -> { 'abc.def': 'foo', 'hij': 'bar' };\n//\nfunction flatten(obj) {\n var params = {};\n\n forEach(obj || {}, function (val, key) {\n if (val && typeof val === 'object') {\n forEach(flatten(val), function (sub_val, sub_key) {\n params[key + '.' + sub_key] = sub_val;\n });\n return;\n }\n\n params[key] = val;\n });\n\n return params;\n}\n\n\nvar keySeparator = '#@$';\n\nfunction makePhraseKey(locale, phrase) {\n return locale + keySeparator + phrase;\n}\n\n\nfunction searchPhraseKey(self, locale, phrase) {\n var key = makePhraseKey(locale, phrase);\n var storage = self._storage;\n\n // direct search first\n if (storage.hasOwnProperty(key)) { return key; }\n\n // don't try follbacks for default locale\n if (locale === self._defaultLocale) { return null; }\n\n // search via fallback map cache\n var fb_cache = self._fallbacks_cache;\n if (fb_cache.hasOwnProperty(key)) { return fb_cache[key]; }\n\n // scan fallbacks & cache result\n var fb = self._fallbacks[locale] || [ self._defaultLocale ];\n var fb_key;\n\n for (var i = 0, l = fb.length; i < l; i++) {\n fb_key = makePhraseKey(fb[i], phrase);\n if (storage.hasOwnProperty(fb_key)) {\n // found - update cache and return result\n fb_cache[key] = fb_key;\n return fb_cache[key];\n }\n }\n\n // mark fb_cache entry empty for fast lookup on next request\n fb_cache[key] = null;\n return null;\n}\n\n\nfunction pluralizer(lang, val, forms) {\n var idx = plural.indexOf(lang, val);\n\n if (idx === -1) {\n return format('[pluralizer for \"%s\" locale not found]', lang);\n }\n\n if (typeof forms[idx] === 'undefined') {\n return format(\n '[plural form %d (\"%s\") not found in translation]',\n idx, plural.forms(lang)[idx]\n );\n }\n\n return forms[idx];\n}\n\n// public api (module)\n////////////////////////////////////////////////////////////////////////////////\n\n\n/**\n * new BabelFish([defaultLocale = 'en'])\n *\n * Initiates new instance of BabelFish.\n *\n * __Note!__ you can omit `new` for convenience, direct call will return\n * new instance too.\n **/\nfunction BabelFish(defaultLocale) {\n if (!(this instanceof BabelFish)) { return new BabelFish(defaultLocale); }\n\n this._defaultLocale = defaultLocale ? String(defaultLocale) : GENERIC_LOCALE;\n\n // hash of locale => [ fallback1, fallback2, ... ] pairs\n this._fallbacks = {};\n\n // fallback cache for each phrase\n //\n // {\n // locale_key: fallback_key\n // }\n //\n // fallback_key can be null if search failed\n //\n this._fallbacks_cache = {};\n\n // storage of compiled translations\n //\n // {\n // locale + @#$ + phrase_key: {\n // locale: locale name - can be different for fallbacks\n // translation: original translation phrase or data variable/object\n // raw: true/false - does translation contain plain data or\n // string to compile\n // compiled: copiled translation fn or plain string\n // }\n // ...\n // }\n //\n this._storage = {};\n\n // cache for complex plural parts (with params)\n //\n // {\n // language: new BabelFish(language)\n // }\n //\n this._plurals_cache = {};\n}\n\n\n// public api (instance)\n////////////////////////////////////////////////////////////////////////////////\n\n\n/**\n * BabelFish#addPhrase(locale, phrase, translation [, flattenLevel]) -> BabelFish\n * - locale (String): Locale of translation\n * - phrase (String|Null): Phrase ID, e.g. `apps.forum`\n * - translation (String|Object|Array|Number|Boolean): Translation or an object\n * with nested phrases, or a pure object.\n * - flattenLevel (Number|Boolean): Optional, 0..infinity. `Infinity` by default.\n * Define \"flatten\" deepness for loaded object. You can also use\n * `true` as `0` or `false` as `Infinity`.\n *\n *\n * ##### Flatten & using JS objects\n *\n * By default all nested properties are normalized to strings like \"foo.bar.baz\",\n * and if value is string, it will be compiled with babelfish notation.\n * If deepness is above `flattenLevel` OR value is not object and not string,\n * it will be used \"as is\". Note, only JSON stringifiable data should be used.\n *\n * In short: you can safely pass `Array`, `Number` or `Boolean`. For objects you\n * should define flatten level or disable it compleetely, to work with pure data.\n *\n * Pure objects can be useful to prepare bulk data for external libraries, like\n * calendars, time/date generators and so on.\n *\n * ##### Example\n *\n * ```javascript\n * i18n.addPhrase('ru-RU',\n * 'apps.forums.replies_count',\n * '#{count} %{ответ|ответа|ответов}:count в теме');\n *\n * // equals to:\n * i18n.addPhrase('ru-RU',\n * 'apps.forums',\n * { replies_count: '#{count} %{ответ|ответа|ответов}:count в теме' });\n * ```\n **/\nBabelFish.prototype.addPhrase = function _addPhrase(locale, phrase, translation, flattenLevel) {\n var self = this, fl;\n\n // Calculate flatten level. Infinity by default\n if (isBoolean(flattenLevel)) {\n fl = flattenLevel ? Infinity : 0;\n } else if (isNumber(flattenLevel)) {\n fl = Math.floor(flattenLevel);\n if (fl < 0) {\n throw new TypeError('Invalid flatten level (should be >= 0).');\n }\n } else {\n fl = Infinity;\n }\n\n if (isObject(translation) && (fl > 0)) {\n // recursive object walk, until flattenLevel allows\n forEach(translation, function (val, key) {\n self.addPhrase(locale, (phrase ? phrase + '.' : '') + key, val, fl - 1);\n });\n return this;\n }\n\n if (isString(translation)) {\n this._storage[makePhraseKey(locale, phrase)] = {\n translation: translation,\n locale: locale,\n raw: false\n };\n } else if (isArray(translation) ||\n isNumber(translation) ||\n isBoolean(translation) ||\n (fl === 0 && isObject(translation))) {\n // Pure objects are stored without compilation\n // Limit allowed types.\n this._storage[makePhraseKey(locale, phrase)] = {\n translation: translation,\n locale: locale,\n raw: true\n };\n } else {\n // `Regex`, `Date`, `Uint8Array` and others types will\n // fuckup `stringify()`. Don't allow here.\n // `undefined` also means wrong param in real life.\n // `null` can be allowed when examples from real life available.\n throw new TypeError('Invalid translation - [String|Object|Array|Number|Boolean] expected.');\n }\n\n self._fallbacks_cache = {};\n\n return this;\n};\n\n\n/**\n * BabelFish#setFallback(locale, fallbacks) -> BabelFish\n * - locale (String): Target locale\n * - fallbacks (Array): List of fallback locales\n *\n * Set fallbacks for given locale.\n *\n * When `locale` has no translation for the phrase, `fallbacks[0]` will be\n * tried, if translation still not found, then `fallbacks[1]` will be tried\n * and so on. If none of fallbacks have translation,\n * default locale will be tried as last resort.\n *\n * ##### Errors\n *\n * - throws `Error`, when `locale` equals default locale\n *\n * ##### Example\n *\n * ```javascript\n * i18n.setFallback('ua-UK', ['ua', 'ru']);\n * ```\n **/\nBabelFish.prototype.setFallback = function _setFallback(locale, fallbacks) {\n var def = this._defaultLocale;\n\n if (def === locale) {\n throw new Error(\"Default locale can't have fallbacks\");\n }\n\n var fb = isArray(fallbacks) ? fallbacks.slice() : [ fallbacks ];\n if (fb[fb.length - 1] !== def) { fb.push(def); }\n\n this._fallbacks[locale] = fb;\n this._fallbacks_cache = {};\n\n return this;\n};\n\n\nvar CAN_HAVE_DIRECTIVES_RE = /#\\{|\\(\\(|\\\\\\\\/;\n\n// Compiles given string into function. Used to compile phrases,\n// which contains `plurals`, `variables`, etc.\nfunction compile(self, str, locale) {\n var nodes, buf, key, strict_exec, forms_exec, plurals_cache;\n\n // Quick check to avoid parse in most cases :)\n if (!CAN_HAVE_DIRECTIVES_RE.test(str)) { return str; }\n\n nodes = parser.parse(str);\n\n if (nodes.length === 1 && nodes[0].type === 'literal') {\n return nodes[0].text;\n }\n\n // init cache instance for plural parts, if not exists yet.\n if (!self._plurals_cache[locale]) {\n self._plurals_cache[locale] = new BabelFish(locale);\n }\n plurals_cache = self._plurals_cache[locale];\n\n buf = [];\n buf.push([ 'var str = \"\", strict, strict_exec, forms, forms_exec, plrl, cache, loc, loc_plzr, anchor;' ]);\n buf.push('params = flatten(params);');\n\n forEach(nodes, function (node) {\n if (node.type === 'literal') {\n buf.push(format('str += %j;', node.text));\n return;\n }\n\n if (node.type === 'variable') {\n key = node.anchor;\n buf.push(format(\n 'str += (\"undefined\" === typeof (params[%j])) ? \"[missed variable: %s]\" : params[%j];',\n key, key, key\n ));\n return;\n }\n\n // should never happen\n /*istanbul ignore next*/\n if (node.type !== 'plural') { throw new Error('Unknown node type'); }\n\n //\n // Compile plural\n //\n\n key = node.anchor;\n // check if plural parts are plain strings or executable,\n // and add executable to \"cache\" instance of babelfish\n // plural part text will be used as translation key\n strict_exec = {};\n forEach(node.strict, function (text, k) {\n var parsed = parser.parse(text);\n if (parsed.length === 1 && parsed[0].type === 'literal') {\n strict_exec[k] = false;\n // patch with unescaped value for direct extract\n node.strict[k] = parsed[0].text;\n return;\n }\n\n strict_exec[k] = true;\n if (!plurals_cache.hasPhrase(locale, text, true)) {\n plurals_cache.addPhrase(locale, text, text);\n }\n });\n\n forms_exec = {};\n forEach(node.forms, function (text, idx) {\n var parsed = parser.parse(text), unescaped;\n if (parsed.length === 1 && parsed[0].type === 'literal') {\n // patch with unescaped value for direct extract\n unescaped = parsed[0].text;\n node.forms[idx] = unescaped;\n forms_exec[unescaped] = false;\n return;\n }\n\n forms_exec[text] = true;\n if (!plurals_cache.hasPhrase(locale, text, true)) {\n plurals_cache.addPhrase(locale, text, text);\n }\n });\n /*eslint-disable space-in-parens*/\n buf.push(format('loc = %j;', locale));\n buf.push(format('loc_plzr = %j;', locale.split(/[-_]/)[0]));\n buf.push(format('anchor = params[%j];', key));\n buf.push(format('cache = this._plurals_cache[loc];'));\n buf.push(format('strict = %j;', node.strict));\n buf.push(format('strict_exec = %j;', strict_exec));\n buf.push(format('forms = %j;', node.forms));\n buf.push(format('forms_exec = %j;', forms_exec));\n buf.push( 'if (+(anchor) != anchor) {');\n buf.push(format(' str += \"[invalid plurals amount: %s(\" + anchor + \")]\";', key));\n buf.push( '} else {');\n buf.push( ' if (strict[anchor] !== undefined) {');\n buf.push( ' plrl = strict[anchor];');\n buf.push( ' str += strict_exec[anchor] ? cache.t(loc, plrl, params) : plrl;');\n buf.push( ' } else {');\n buf.push( ' plrl = pluralizer(loc_plzr, +anchor, forms);');\n buf.push( ' str += forms_exec[plrl] ? cache.t(loc, plrl, params) : plrl;');\n buf.push( ' }');\n buf.push( '}');\n return;\n });\n\n buf.push('return str;');\n\n /*eslint-disable no-new-func*/\n return new Function('params', 'flatten', 'pluralizer', buf.join('\\n'));\n}\n\n\n/**\n * BabelFish#translate(locale, phrase[, params]) -> String\n * - locale (String): Locale of translation\n * - phrase (String): Phrase ID, e.g. `app.forums.replies_count`\n * - params (Object|Number|String): Params for translation. `Number` & `String`\n * will be coerced to `{ count: X, value: X }`\n *\n * ##### Example\n *\n * ```javascript\n * i18n.addPhrase('ru-RU',\n * 'apps.forums.replies_count',\n * '#{count} ((ответ|ответа|ответов)) в теме');\n *\n * // ...\n *\n * i18n.translate('ru-RU', 'app.forums.replies_count', { count: 1 });\n * i18n.translate('ru-RU', 'app.forums.replies_count', 1});\n * // -> '1 ответ'\n *\n * i18n.translate('ru-RU', 'app.forums.replies_count', { count: 2 });\n * i18n.translate('ru-RU', 'app.forums.replies_count', 2);\n * // -> '2 ответa'\n * ```\n **/\nBabelFish.prototype.translate = function _translate(locale, phrase, params) {\n var key = searchPhraseKey(this, locale, phrase);\n var data;\n\n if (!key) {\n return locale + ': No translation for [' + phrase + ']';\n }\n\n data = this._storage[key];\n\n // simple string or other pure object\n if (data.raw) { return data.translation; }\n\n // compile data if not done yet\n if (!data.hasOwnProperty('compiled')) {\n // We should use locale from phrase, because of possible fallback,\n // to keep plural locales in sync.\n data.compiled = compile(this, data.translation, data.locale);\n }\n\n // return simple string immediately\n if (!isFunction(data.compiled)) {\n return data.compiled;\n }\n\n //\n // Generate \"complex\" phrase\n //\n\n // Sugar: coerce numbers & strings to { count: X, value: X }\n if (isNumber(params) || isString(params)) {\n params = { count: params, value: params };\n }\n\n return data.compiled.call(this, params, flatten, pluralizer);\n};\n\n\n/**\n * BabelFish#hasPhrase(locale, phrase) -> Boolean\n * - locale (String): Locale of translation\n * - phrase (String): Phrase ID, e.g. `app.forums.replies_count`\n * - noFallback (Boolean): Disable search in fallbacks\n *\n * Returns whenever or not there's a translation of a `phrase`.\n **/\nBabelFish.prototype.hasPhrase = function _hasPhrase(locale, phrase, noFallback) {\n return noFallback ?\n this._storage.hasOwnProperty(makePhraseKey(locale, phrase))\n :\n searchPhraseKey(this, locale, phrase) ? true : false;\n};\n\n\n/**\n * BabelFish#getLocale(locale, phrase) -> String|null\n * - locale (String): Locale of translation\n * - phrase (String): Phrase ID, e.g. `app.forums.replies_count`\n * - noFallback (Boolean): Disable search in fallbacks\n *\n * Similar to [[BabelFish#hasPhrase]], but returns real locale of requested\n * phrase, or `null` if nothing found. Can be useful for dynamic dependencies\n * init. For example, when you fetch i10n config as single object and create\n * phrases from it's content.\n **/\nBabelFish.prototype.getLocale = function _getLocale(locale, phrase, noFallback) {\n if (noFallback) {\n return this._storage.hasOwnProperty(makePhraseKey(locale, phrase)) ? locale : null;\n }\n\n var key = searchPhraseKey(this, locale, phrase);\n\n return key ? key.split(keySeparator, 2)[0] : null;\n};\n\n\n/** alias of: BabelFish#translate\n * BabelFish#t(locale, phrase[, params]) -> String\n **/\nBabelFish.prototype.t = BabelFish.prototype.translate;\n\n\n/**\n * BabelFish#stringify(locale) -> String\n * - locale (String): Locale of translation\n *\n * Returns serialized locale data, including fallbacks.\n * It can be loaded back via `load()` method.\n **/\nBabelFish.prototype.stringify = function _stringify(locale) {\n var self = this;\n\n // Collect unique keys\n var unique = {};\n\n forEach(this._storage, function (val, key) {\n unique[key.split(keySeparator)[1]] = true;\n });\n\n // Collect phrases (with fallbacks)\n var result = {};\n\n forEach(unique, function (val, key) {\n var k = searchPhraseKey(self, locale, key);\n // if key was just a garbage from another\n // and doesn't fit into fallback chain for current locale - skip it\n if (!k) { return; }\n // create namespace if not exists\n var l = self._storage[k].locale;\n if (!result[l]) { result[l] = {}; }\n result[l][key] = self._storage[k].translation;\n });\n\n var out = {\n fallback: {},\n locales: result\n };\n\n // Get fallback rule. Cut auto-added fallback to default locale\n var fallback = (self._fallbacks[locale] || []).slice(0, -1);\n if (fallback.length) {\n out.fallback[locale] = fallback;\n }\n\n return JSON.stringify(out);\n};\n\n\n/**\n * BabelFish#load(data) -> BabelFish\n * - data (Object|String): data from `stringify()` method, as object or string.\n *\n * Batch load phrases data, prepared with `stringify()` method.\n * Useful at browser side.\n **/\nBabelFish.prototype.load = function _load(data) {\n var self = this;\n\n if (isString(data)) { data = JSON.parse(data); }\n\n forEach(data.locales, function (phrases, locale) {\n forEach(phrases, function (translation, key) {\n self.addPhrase(locale, key, translation, 0);\n });\n });\n\n forEach(data.fallback, function (rule, locale) {\n self.setFallback(locale, rule);\n });\n\n return this;\n};\n\n// export module\nmodule.exports = BabelFish;\n","module.exports = (function() {\n /*\n * Generated by PEG.js 0.8.0.\n *\n * http://pegjs.majda.cz/\n */\n\n function peg$subclass(child, parent) {\n function ctor() { this.constructor = child; }\n ctor.prototype = parent.prototype;\n child.prototype = new ctor();\n }\n\n function SyntaxError(message, expected, found, offset, line, column) {\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.offset = offset;\n this.line = line;\n this.column = column;\n\n this.name = \"SyntaxError\";\n }\n\n peg$subclass(SyntaxError, Error);\n\n function parse(input) {\n var options = arguments.length > 1 ? arguments[1] : {},\n\n peg$FAILED = {},\n\n peg$startRuleFunctions = { start: peg$parsestart },\n peg$startRuleFunction = peg$parsestart,\n\n peg$c0 = [],\n peg$c1 = peg$FAILED,\n peg$c2 = \"((\",\n peg$c3 = { type: \"literal\", value: \"((\", description: \"\\\"((\\\"\" },\n peg$c4 = \"))\",\n peg$c5 = { type: \"literal\", value: \"))\", description: \"\\\"))\\\"\" },\n peg$c6 = null,\n peg$c7 = function(forms, anchor) {\n return {\n type: 'plural',\n forms: regularForms(forms),\n strict: strictForms(forms),\n anchor: anchor || 'count'\n };\n },\n peg$c8 = \"|\",\n peg$c9 = { type: \"literal\", value: \"|\", description: \"\\\"|\\\"\" },\n peg$c10 = function(part, more) {\n return [part].concat(more);\n },\n peg$c11 = function(part) {\n return [part];\n },\n peg$c12 = \"=\",\n peg$c13 = { type: \"literal\", value: \"=\", description: \"\\\"=\\\"\" },\n peg$c14 = /^[0-9]/,\n peg$c15 = { type: \"class\", value: \"[0-9]\", description: \"[0-9]\" },\n peg$c16 = \" \",\n peg$c17 = { type: \"literal\", value: \" \", description: \"\\\" \\\"\" },\n peg$c18 = function(strict, form) {\n return {\n strict: strict.join(''),\n text: form.join('')\n }\n },\n peg$c19 = function() {\n return {\n text: text()\n };\n },\n peg$c20 = \"\\\\\",\n peg$c21 = { type: \"literal\", value: \"\\\\\", description: \"\\\"\\\\\\\\\\\"\" },\n peg$c22 = /^[\\\\|)(]/,\n peg$c23 = { type: \"class\", value: \"[\\\\\\\\|)(]\", description: \"[\\\\\\\\|)(]\" },\n peg$c24 = function(char) {\n return char;\n },\n peg$c25 = void 0,\n peg$c26 = { type: \"any\", description: \"any character\" },\n peg$c27 = function() {\n return text();\n },\n peg$c28 = \":\",\n peg$c29 = { type: \"literal\", value: \":\", description: \"\\\":\\\"\" },\n peg$c30 = function(name) {\n return name;\n },\n peg$c31 = \"#{\",\n peg$c32 = { type: \"literal\", value: \"#{\", description: \"\\\"#{\\\"\" },\n peg$c33 = \"}\",\n peg$c34 = { type: \"literal\", value: \"}\", description: \"\\\"}\\\"\" },\n peg$c35 = function(anchor) {\n return {\n type: 'variable',\n anchor: anchor\n };\n },\n peg$c36 = \".\",\n peg$c37 = { type: \"literal\", value: \".\", description: \"\\\".\\\"\" },\n peg$c38 = function() {\n return text()\n },\n peg$c39 = /^[a-zA-Z_$]/,\n peg$c40 = { type: \"class\", value: \"[a-zA-Z_$]\", description: \"[a-zA-Z_$]\" },\n peg$c41 = /^[a-zA-Z0-9_$]/,\n peg$c42 = { type: \"class\", value: \"[a-zA-Z0-9_$]\", description: \"[a-zA-Z0-9_$]\" },\n peg$c43 = function(lc) { return lc; },\n peg$c44 = function(literal_chars) {\n return {\n type: 'literal',\n text: literal_chars.join('')\n };\n },\n peg$c45 = /^[\\\\#()|]/,\n peg$c46 = { type: \"class\", value: \"[\\\\\\\\#()|]\", description: \"[\\\\\\\\#()|]\" },\n\n peg$currPos = 0,\n peg$reportedPos = 0,\n peg$cachedPos = 0,\n peg$cachedPosDetails = { line: 1, column: 1, seenCR: false },\n peg$maxFailPos = 0,\n peg$maxFailExpected = [],\n peg$silentFails = 0,\n\n peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$reportedPos, peg$currPos);\n }\n\n function offset() {\n return peg$reportedPos;\n }\n\n function line() {\n return peg$computePosDetails(peg$reportedPos).line;\n }\n\n function column() {\n return peg$computePosDetails(peg$reportedPos).column;\n }\n\n function expected(description) {\n throw peg$buildException(\n null,\n [{ type: \"other\", description: description }],\n peg$reportedPos\n );\n }\n\n function error(message) {\n throw peg$buildException(message, null, peg$reportedPos);\n }\n\n function peg$computePosDetails(pos) {\n function advance(details, startPos, endPos) {\n var p, ch;\n\n for (p = startPos; p < endPos; p++) {\n ch = input.charAt(p);\n if (ch === \"\\n\") {\n if (!details.seenCR) { details.line++; }\n details.column = 1;\n details.seenCR = false;\n } else if (ch === \"\\r\" || ch === \"\\u2028\" || ch === \"\\u2029\") {\n details.line++;\n details.column = 1;\n details.seenCR = true;\n } else {\n details.column++;\n details.seenCR = false;\n }\n }\n }\n\n if (peg$cachedPos !== pos) {\n if (peg$cachedPos > pos) {\n peg$cachedPos = 0;\n peg$cachedPosDetails = { line: 1, column: 1, seenCR: false };\n }\n advance(peg$cachedPosDetails, peg$cachedPos, pos);\n peg$cachedPos = pos;\n }\n\n return peg$cachedPosDetails;\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildException(message, expected, pos) {\n function cleanupExpected(expected) {\n var i = 1;\n\n expected.sort(function(a, b) {\n if (a.description < b.description) {\n return -1;\n } else if (a.description > b.description) {\n return 1;\n } else {\n return 0;\n }\n });\n\n while (i < expected.length) {\n if (expected[i - 1] === expected[i]) {\n expected.splice(i, 1);\n } else {\n i++;\n }\n }\n }\n\n function buildMessage(expected, found) {\n function stringEscape(s) {\n function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); }\n\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\x08/g, '\\\\b')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\f/g, '\\\\f')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x07\\x0B\\x0E\\x0F]/g, function(ch) { return '\\\\x0' + hex(ch); })\n .replace(/[\\x10-\\x1F\\x80-\\xFF]/g, function(ch) { return '\\\\x' + hex(ch); })\n .replace(/[\\u0180-\\u0FFF]/g, function(ch) { return '\\\\u0' + hex(ch); })\n .replace(/[\\u1080-\\uFFFF]/g, function(ch) { return '\\\\u' + hex(ch); });\n }\n\n var expectedDescs = new Array(expected.length),\n expectedDesc, foundDesc, i;\n\n for (i = 0; i < expected.length; i++) {\n expectedDescs[i] = expected[i].description;\n }\n\n expectedDesc = expected.length > 1\n ? expectedDescs.slice(0, -1).join(\", \")\n + \" or \"\n + expectedDescs[expected.length - 1]\n : expectedDescs[0];\n\n foundDesc = found ? \"\\\"\" + stringEscape(found) + \"\\\"\" : \"end of input\";\n\n return \"Expected \" + expectedDesc + \" but \" + foundDesc + \" found.\";\n }\n\n var posDetails = peg$computePosDetails(pos),\n found = pos < input.length ? input.charAt(pos) : null;\n\n if (expected !== null) {\n cleanupExpected(expected);\n }\n\n return new SyntaxError(\n message !== null ? message : buildMessage(expected, found),\n expected,\n found,\n pos,\n posDetails.line,\n posDetails.column\n );\n }\n\n function peg$parsestart() {\n var s0, s1;\n\n s0 = [];\n s1 = peg$parseliteral();\n if (s1 === peg$FAILED) {\n s1 = peg$parseplural();\n if (s1 === peg$FAILED) {\n s1 = peg$parsevariable();\n }\n }\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n s1 = peg$parseliteral();\n if (s1 === peg$FAILED) {\n s1 = peg$parseplural();\n if (s1 === peg$FAILED) {\n s1 = peg$parsevariable();\n }\n }\n }\n\n return s0;\n }\n\n function peg$parseplural() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c2) {\n s1 = peg$c2;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c3); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseplural_forms();\n if (s2 !== peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c4) {\n s3 = peg$c4;\n peg$currPos += 2;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c5); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parseplural_anchor();\n if (s4 === peg$FAILED) {\n s4 = peg$c6;\n }\n if (s4 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c7(s2, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n\n return s0;\n }\n\n function peg$parseplural_forms() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$parseplural_part();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 124) {\n s2 = peg$c8;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c9); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseplural_forms();\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c10(s1, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseplural_part();\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c11(s1);\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseplural_part() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 61) {\n s1 = peg$c12;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c13); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n if (peg$c14.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c15); }\n }\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$c14.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c15); }\n }\n }\n } else {\n s2 = peg$c1;\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 32) {\n s3 = peg$c16;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c17); }\n }\n if (s3 === peg$FAILED) {\n s3 = peg$c6;\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parseplural_char();\n if (s5 !== peg$FAILED) {\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parseplural_char();\n }\n } else {\n s4 = peg$c1;\n }\n if (s4 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c18(s2, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseplural_char();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseplural_char();\n }\n } else {\n s1 = peg$c1;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c19();\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseplural_char() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c20;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c21); }\n }\n if (s1 !== peg$FAILED) {\n if (peg$c22.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c23); }\n }\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c24(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 124) {\n s2 = peg$c8;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c9); }\n }\n if (s2 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c4) {\n s2 = peg$c4;\n peg$currPos += 2;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c5); }\n }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = peg$c25;\n } else {\n peg$currPos = s1;\n s1 = peg$c1;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c26); }\n }\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c27();\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n }\n\n return s0;\n }\n\n function peg$parseplural_anchor() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 58) {\n s1 = peg$c28;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c29); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseidentifier();\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c30(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n\n return s0;\n }\n\n function peg$parsevariable() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c31) {\n s1 = peg$c31;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c32); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseidentifier();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s3 = peg$c33;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c34); }\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c35(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n\n return s0;\n }\n\n function peg$parseidentifier() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = peg$parseidentifier_part();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s2 = peg$c36;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c37); }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseidentifier();\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseidentifier();\n }\n } else {\n s3 = peg$c1;\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c38();\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseidentifier_part();\n }\n\n return s0;\n }\n\n function peg$parseidentifier_part() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (peg$c39.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c40); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n if (peg$c41.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c42); }\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n if (peg$c41.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c42); }\n }\n }\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c27();\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n\n return s0;\n }\n\n function peg$parseliteral() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$currPos;\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$parseplural();\n if (s4 === peg$FAILED) {\n s4 = peg$parsevariable();\n }\n peg$silentFails--;\n if (s4 === peg$FAILED) {\n s3 = peg$c25;\n } else {\n peg$currPos = s3;\n s3 = peg$c1;\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parseliteral_char();\n if (s4 !== peg$FAILED) {\n peg$reportedPos = s2;\n s3 = peg$c43(s4);\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$c1;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c1;\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$currPos;\n s3 = peg$currPos;\n peg$silentFails++;\n s4 = peg$parseplural();\n if (s4 === peg$FAILED) {\n s4 = peg$parsevariable();\n }\n peg$silentFails--;\n if (s4 === peg$FAILED) {\n s3 = peg$c25;\n } else {\n peg$currPos = s3;\n s3 = peg$c1;\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parseliteral_char();\n if (s4 !== peg$FAILED) {\n peg$reportedPos = s2;\n s3 = peg$c43(s4);\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$c1;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c1;\n }\n }\n } else {\n s1 = peg$c1;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c44(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseliteral_char() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c20;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c21); }\n }\n if (s1 !== peg$FAILED) {\n if (peg$c45.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c46); }\n }\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c24(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c1;\n }\n if (s0 === peg$FAILED) {\n if (input.length > peg$currPos) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c26); }\n }\n }\n\n return s0;\n }\n\n\n function regularForms(forms) {\n var result = [];\n for (var i=0; i= 0; }\n\n\nadd([ 'af', 'an', 'asa', 'bem', 'bez', 'bg', 'brx', 'ce', 'cgg', 'chr', 'ckb', 'dv', 'ee', 'el', 'eo', 'eu', 'fo', 'fur', 'gsw', 'ha', 'haw', 'jgo', 'jmc', 'kaj', 'kcg', 'kkj', 'kl', 'ks', 'ksb', 'ku', 'ky', 'lb', 'lg', 'mas', 'mgo', 'ml', 'mn', 'nah', 'nb', 'nd', 'nn', 'nnh', 'no', 'nr', 'ny', 'nyn', 'om', 'os', 'pap', 'ps', 'rm', 'rof', 'rwk', 'saq', 'sd', 'sdh', 'seh', 'sn', 'so', 'ss', 'ssy', 'st', 'syr', 'ta', 'te', 'teo', 'tig', 'tn', 'tr', 'ts', 'ug', 'uz', 've', 'vo', 'vun', 'wae', 'xh', 'xog' ], {\n c: [ 1, 5 ],\n cFn: function (n) {\n return n === 1 ? 0 : 1;\n }\n});\n\nadd([ 'ak', 'bho', 'guw', 'ln', 'mg', 'nso', 'pa', 'ti', 'wa' ], {\n c: [ 1, 5 ],\n cFn: function (n) {\n return B(0, 1, n) ? 0 : 1;\n }\n});\n\nadd([ 'am', 'doi', 'fa', 'kn', 'pcm', 'zu' ], {\n c: [ 1, 5 ],\n cFn: function (n, i) {\n return i === 0 || n === 1 ? 0 : 1;\n }\n});\n\nadd([ 'ar', 'ars' ], {\n c: [ 0, 1, 2, 3, 4, 5 ],\n cFn: function (n) {\n var n100 = n % 100;\n return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : B(3, 10, n100) ? 3 : B(11, 99, n100) ? 4 : 5;\n }\n});\n\nadd([ 'as', 'bn' ], {\n c: [ 1, 5 ],\n cFn: function (n, i) {\n return i === 0 || n === 1 ? 0 : 1;\n },\n o: [ 1, 2, 3, 4, 5 ],\n oFn: function (n) {\n return IN([ 1, 5, 7, 8, 9, 10 ], n) ? 0 : IN([ 2, 3 ], n) ? 1 : n === 4 ? 2 : n === 6 ? 3 : 4;\n }\n});\n\nadd([ 'ast', 'de', 'et', 'fi', 'fy', 'gl', 'ia', 'io', 'nl', 'sw', 'ur', 'yi' ], {\n c: [ 1, 5 ],\n cFn: function (n, i, v) {\n return i === 1 && v === 0 ? 0 : 1;\n }\n});\n\nadd([ 'az' ], {\n c: [ 1, 5 ],\n cFn: function (n) {\n return n === 1 ? 0 : 1;\n },\n o: [ 1, 3, 4, 5 ],\n oFn: function (n, i) {\n var i10 = i % 10, i100 = i % 100, i1000 = i % 1000;\n return IN([ 1, 2, 5, 7, 8 ], i10) || IN([ 20, 50, 70, 80 ], i100) ? 0 : IN([ 3, 4 ], i10) || IN([ 100, 200, 300, 400, 500, 600, 700, 800, 900 ], i1000) ? 1 : i === 0 || i10 === 6 || IN([ 40, 60, 90 ], i100) ? 2 : 3;\n }\n});\n\nadd([ 'bal' ], {\n c: [ 1, 5 ],\n cFn: function (n) {\n return n === 1 ? 0 : 1;\n },\n o: [ 1, 5 ],\n oFn: function (n) {\n return n === 1 ? 0 : 1;\n }\n});\n\nadd([ 'be' ], {\n c: [ 1, 3, 4, 5 ],\n cFn: function (n) {\n var n10 = n % 10, n100 = n % 100;\n return n10 === 1 && n100 !== 11 ? 0 : B(2, 4, n10) && !B(12, 14, n100) ? 1 : n10 === 0 || B(5, 9, n10) || B(11, 14, n100) ? 2 : 3;\n },\n o: [ 3, 5 ],\n oFn: function (n) {\n var n10 = n % 10, n100 = n % 100;\n return IN([ 2, 3 ], n10) && !IN([ 12, 13 ], n100) ? 0 : 1;\n }\n});\n\nadd([ 'bm', 'bo', 'dz', 'hnj', 'id', 'ig', 'ii', 'ja', 'jbo', 'jv', 'jw', 'kde', 'kea', 'km', 'ko', 'lkt', 'my', 'nqo', 'osa', 'sah', 'ses', 'sg', 'su', 'th', 'to', 'tpi', 'und', 'wo', 'yo', 'yue', 'zh' ], {\n});\n\nadd([ 'br' ], {\n c: [ 1, 2, 3, 4, 5 ],\n cFn: function (n) {\n var n10 = n % 10, n100 = n % 100, n1000000 = n % 1000000;\n return n10 === 1 && !IN([ 11, 71, 91 ], n100) ? 0 : n10 === 2 && !IN([ 12, 72, 92 ], n100) ? 1 : (B(3, 4, n10) || n10 === 9) && (!B(10, 19, n100) && !B(70, 79, n100) && !B(90, 99, n100)) ? 2 : n !== 0 && n1000000 === 0 ? 3 : 4;\n }\n});\n\nadd([ 'bs', 'hr', 'sh', 'sr' ], {\n c: [ 1, 3, 5 ],\n cFn: function (n, i, v, f) {\n var i10 = i % 10, i100 = i % 100, f10 = f % 10, f100 = f % 100;\n return v === 0 && i10 === 1 && i100 !== 11 || f10 === 1 && f100 !== 11 ? 0 : v === 0 && B(2, 4, i10) && !B(12, 14, i100) || B(2, 4, f10) && !B(12, 14, f100) ? 1 : 2;\n }\n});\n\nadd([ 'ca' ], {\n c: [ 1, 5 ],\n cFn: function (n, i, v) {\n return i === 1 && v === 0 ? 0 : 1;\n },\n o: [ 1, 2, 3, 5 ],\n oFn: function (n) {\n return IN([ 1, 3 ], n) ? 0 : n === 2 ? 1 : n === 4 ? 2 : 3;\n }\n});\n\nadd([ 'ceb' ], {\n c: [ 1, 5 ],\n cFn: function (n, i, v, f) {\n var i10 = i % 10, f10 = f % 10;\n return v === 0 && IN([ 1, 2, 3 ], i) || v === 0 && !IN([ 4, 6, 9 ], i10) || v !== 0 && !IN([ 4, 6, 9 ], f10) ? 0 : 1;\n }\n});\n\nadd([ 'cs', 'sk' ], {\n c: [ 1, 3, 4, 5 ],\n cFn: function (n, i, v) {\n return i === 1 && v === 0 ? 0 : B(2, 4, i) && v === 0 ? 1 : v !== 0 ? 2 : 3;\n }\n});\n\nadd([ 'cy' ], {\n c: [ 0, 1, 2, 3, 4, 5 ],\n cFn: function (n) {\n return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n === 3 ? 3 : n === 6 ? 4 : 5;\n },\n o: [ 0, 1, 2, 3, 4, 5 ],\n oFn: function (n) {\n return IN([ 0, 7, 8, 9 ], n) ? 0 : n === 1 ? 1 : n === 2 ? 2 : IN([ 3, 4 ], n) ? 3 : IN([ 5, 6 ], n) ? 4 : 5;\n }\n});\n\nadd([ 'da' ], {\n c: [ 1, 5 ],\n cFn: function (n, i, v, f, t) {\n return n === 1 || t !== 0 && IN([ 0, 1 ], i) ? 0 : 1;\n }\n});\n\nadd([ 'dsb', 'hsb' ], {\n c: [ 1, 2, 3, 5 ],\n cFn: function (n, i, v, f) {\n var i100 = i % 100, f100 = f % 100;\n return v === 0 && i100 === 1 || f100 === 1 ? 0 : v === 0 && i100 === 2 || f100 === 2 ? 1 : v === 0 && B(3, 4, i100) || B(3, 4, f100) ? 2 : 3;\n }\n});\n\nadd([ 'en' ], {\n c: [ 1, 5 ],\n cFn: function (n, i, v) {\n return i === 1 && v === 0 ? 0 : 1;\n },\n o: [ 1, 2, 3, 5 ],\n oFn: function (n) {\n var n10 = n % 10, n100 = n % 100;\n return n10 === 1 && n100 !== 11 ? 0 : n10 === 2 && n100 !== 12 ? 1 : n10 === 3 && n100 !== 13 ? 2 : 3;\n }\n});\n\nadd([ 'es' ], {\n c: [ 1, 4, 5 ],\n cFn: function (n, i, v, f, t, w, e) {\n var i1000000 = i % 1000000;\n return n === 1 ? 0 : e === 0 && i !== 0 && i1000000 === 0 && v === 0 || !B(0, 5, e) ? 1 : 2;\n }\n});\n\nadd([ 'ff', 'kab' ], {\n c: [ 1, 5 ],\n cFn: function (n, i) {\n return IN([ 0, 1 ], i) ? 0 : 1;\n }\n});\n\nadd([ 'fil', 'tl' ], {\n c: [ 1, 5 ],\n cFn: function (n, i, v, f) {\n var i10 = i % 10, f10 = f % 10;\n return v === 0 && IN([ 1, 2, 3 ], i) || v === 0 && !IN([ 4, 6, 9 ], i10) || v !== 0 && !IN([ 4, 6, 9 ], f10) ? 0 : 1;\n },\n o: [ 1, 5 ],\n oFn: function (n) {\n return n === 1 ? 0 : 1;\n }\n});\n\nadd([ 'fr' ], {\n c: [ 1, 4, 5 ],\n cFn: function (n, i, v, f, t, w, e) {\n var i1000000 = i % 1000000;\n return IN([ 0, 1 ], i) ? 0 : e === 0 && i !== 0 && i1000000 === 0 && v === 0 || !B(0, 5, e) ? 1 : 2;\n },\n o: [ 1, 5 ],\n oFn: function (n) {\n return n === 1 ? 0 : 1;\n }\n});\n\nadd([ 'ga' ], {\n c: [ 1, 2, 3, 4, 5 ],\n cFn: function (n) {\n return n === 1 ? 0 : n === 2 ? 1 : B(3, 6, n) ? 2 : B(7, 10, n) ? 3 : 4;\n },\n o: [ 1, 5 ],\n oFn: function (n) {\n return n === 1 ? 0 : 1;\n }\n});\n\nadd([ 'gd' ], {\n c: [ 1, 2, 3, 5 ],\n cFn: function (n) {\n return IN([ 1, 11 ], n) ? 0 : IN([ 2, 12 ], n) ? 1 : (B(3, 10, n) || B(13, 19, n)) ? 2 : 3;\n },\n o: [ 1, 2, 3, 5 ],\n oFn: function (n) {\n return IN([ 1, 11 ], n) ? 0 : IN([ 2, 12 ], n) ? 1 : IN([ 3, 13 ], n) ? 2 : 3;\n }\n});\n\nadd([ 'gu', 'hi' ], {\n c: [ 1, 5 ],\n cFn: function (n, i) {\n return i === 0 || n === 1 ? 0 : 1;\n },\n o: [ 1, 2, 3, 4, 5 ],\n oFn: function (n) {\n return n === 1 ? 0 : IN([ 2, 3 ], n) ? 1 : n === 4 ? 2 : n === 6 ? 3 : 4;\n }\n});\n\nadd([ 'gv' ], {\n c: [ 1, 2, 3, 4, 5 ],\n cFn: function (n, i, v) {\n var i10 = i % 10, i100 = i % 100;\n return v === 0 && i10 === 1 ? 0 : v === 0 && i10 === 2 ? 1 : v === 0 && IN([ 0, 20, 40, 60, 80 ], i100) ? 2 : v !== 0 ? 3 : 4;\n }\n});\n\nadd([ 'he' ], {\n c: [ 1, 2, 4, 5 ],\n cFn: function (n, i, v) {\n var n10 = n % 10;\n return i === 1 && v === 0 ? 0 : i === 2 && v === 0 ? 1 : v === 0 && !B(0, 10, n) && n10 === 0 ? 2 : 3;\n }\n});\n\nadd([ 'hu' ], {\n c: [ 1, 5 ],\n cFn: function (n) {\n return n === 1 ? 0 : 1;\n },\n o: [ 1, 5 ],\n oFn: function (n) {\n return IN([ 1, 5 ], n) ? 0 : 1;\n }\n});\n\nadd([ 'hy' ], {\n c: [ 1, 5 ],\n cFn: function (n, i) {\n return IN([ 0, 1 ], i) ? 0 : 1;\n },\n o: [ 1, 5 ],\n oFn: function (n) {\n return n === 1 ? 0 : 1;\n }\n});\n\nadd([ 'is' ], {\n c: [ 1, 5 ],\n cFn: function (n, i, v, f, t) {\n var i10 = i % 10, i100 = i % 100;\n return t === 0 && i10 === 1 && i100 !== 11 || t !== 0 ? 0 : 1;\n }\n});\n\nadd([ 'it' ], {\n c: [ 1, 4, 5 ],\n cFn: function (n, i, v, f, t, w, e) {\n var i1000000 = i % 1000000;\n return i === 1 && v === 0 ? 0 : e === 0 && i !== 0 && i1000000 === 0 && v === 0 || !B(0, 5, e) ? 1 : 2;\n },\n o: [ 4, 5 ],\n oFn: function (n) {\n return IN([ 11, 8, 80, 800 ], n) ? 0 : 1;\n }\n});\n\nadd([ 'iu', 'naq', 'sat', 'se', 'sma', 'smi', 'smj', 'smn', 'sms' ], {\n c: [ 1, 2, 5 ],\n cFn: function (n) {\n return n === 1 ? 0 : n === 2 ? 1 : 2;\n }\n});\n\nadd([ 'ka' ], {\n c: [ 1, 5 ],\n cFn: function (n) {\n return n === 1 ? 0 : 1;\n },\n o: [ 1, 4, 5 ],\n oFn: function (n, i) {\n var i100 = i % 100;\n return i === 1 ? 0 : i === 0 || (B(2, 20, i100) || i100 === 40 || i100 === 60 || i100 === 80) ? 1 : 2;\n }\n});\n\nadd([ 'kk' ], {\n c: [ 1, 5 ],\n cFn: function (n) {\n return n === 1 ? 0 : 1;\n },\n o: [ 4, 5 ],\n oFn: function (n) {\n var n10 = n % 10;\n return n10 === 6 || n10 === 9 || n10 === 0 && n !== 0 ? 0 : 1;\n }\n});\n\nadd([ 'ksh' ], {\n c: [ 0, 1, 5 ],\n cFn: function (n) {\n return n === 0 ? 0 : n === 1 ? 1 : 2;\n }\n});\n\nadd([ 'kw' ], {\n c: [ 0, 1, 2, 3, 4, 5 ],\n cFn: function (n) {\n var n100 = n % 100, n1000 = n % 1000, n100000 = n % 100000, n1000000 = n % 1000000;\n return n === 0 ? 0 : n === 1 ? 1 : IN([ 2, 22, 42, 62, 82 ], n100) || n1000 === 0 && (B(1000, 20000, n100000) || n100000 === 40000 || n100000 === 60000 || n100000 === 80000) || n !== 0 && n1000000 === 100000 ? 2 : IN([ 3, 23, 43, 63, 83 ], n100) ? 3 : n !== 1 && IN([ 1, 21, 41, 61, 81 ], n100) ? 4 : 5;\n },\n o: [ 1, 4, 5 ],\n oFn: function (n) {\n var n100 = n % 100;\n return B(1, 4, n) || (B(1, 4, n100) || B(21, 24, n100) || B(41, 44, n100) || B(61, 64, n100) || B(81, 84, n100)) ? 0 : n === 5 || n100 === 5 ? 1 : 2;\n }\n});\n\nadd([ 'lag' ], {\n c: [ 0, 1, 5 ],\n cFn: function (n, i) {\n return n === 0 ? 0 : IN([ 0, 1 ], i) && n !== 0 ? 1 : 2;\n }\n});\n\nadd([ 'lij' ], {\n c: [ 1, 5 ],\n cFn: function (n, i, v) {\n return i === 1 && v === 0 ? 0 : 1;\n },\n o: [ 4, 5 ],\n oFn: function (n) {\n return (n === 11 || n === 8 || B(80, 89, n) || B(800, 899, n)) ? 0 : 1;\n }\n});\n\nadd([ 'lo', 'ms', 'vi' ], {\n o: [ 1, 5 ],\n oFn: function (n) {\n return n === 1 ? 0 : 1;\n }\n});\n\nadd([ 'lt' ], {\n c: [ 1, 3, 4, 5 ],\n cFn: function (n, i, v, f) {\n var n10 = n % 10, n100 = n % 100;\n return n10 === 1 && !B(11, 19, n100) ? 0 : B(2, 9, n10) && !B(11, 19, n100) ? 1 : f !== 0 ? 2 : 3;\n }\n});\n\nadd([ 'lv', 'prg' ], {\n c: [ 0, 1, 5 ],\n cFn: function (n, i, v, f) {\n var n10 = n % 10, n100 = n % 100, f100 = f % 100, f10 = f % 10;\n return n10 === 0 || B(11, 19, n100) || v === 2 && B(11, 19, f100) ? 0 : n10 === 1 && n100 !== 11 || v === 2 && f10 === 1 && f100 !== 11 || v !== 2 && f10 === 1 ? 1 : 2;\n }\n});\n\nadd([ 'mk' ], {\n c: [ 1, 5 ],\n cFn: function (n, i, v, f) {\n var i10 = i % 10, i100 = i % 100, f10 = f % 10, f100 = f % 100;\n return v === 0 && i10 === 1 && i100 !== 11 || f10 === 1 && f100 !== 11 ? 0 : 1;\n },\n o: [ 1, 2, 4, 5 ],\n oFn: function (n, i) {\n var i10 = i % 10, i100 = i % 100;\n return i10 === 1 && i100 !== 11 ? 0 : i10 === 2 && i100 !== 12 ? 1 : IN([ 7, 8 ], i10) && !IN([ 17, 18 ], i100) ? 2 : 3;\n }\n});\n\nadd([ 'mo', 'ro' ], {\n c: [ 1, 3, 5 ],\n cFn: function (n, i, v) {\n var n100 = n % 100;\n return i === 1 && v === 0 ? 0 : v !== 0 || n === 0 || B(2, 19, n100) ? 1 : 2;\n },\n o: [ 1, 5 ],\n oFn: function (n) {\n return n === 1 ? 0 : 1;\n }\n});\n\nadd([ 'mr' ], {\n c: [ 1, 5 ],\n cFn: function (n) {\n return n === 1 ? 0 : 1;\n },\n o: [ 1, 2, 3, 5 ],\n oFn: function (n) {\n return n === 1 ? 0 : IN([ 2, 3 ], n) ? 1 : n === 4 ? 2 : 3;\n }\n});\n\nadd([ 'mt' ], {\n c: [ 1, 3, 4, 5 ],\n cFn: function (n) {\n var n100 = n % 100;\n return n === 1 ? 0 : n === 0 || B(2, 10, n100) ? 1 : B(11, 19, n100) ? 2 : 3;\n }\n});\n\nadd([ 'ne' ], {\n c: [ 1, 5 ],\n cFn: function (n) {\n return n === 1 ? 0 : 1;\n },\n o: [ 1, 5 ],\n oFn: function (n) {\n return B(1, 4, n) ? 0 : 1;\n }\n});\n\nadd([ 'or' ], {\n c: [ 1, 5 ],\n cFn: function (n) {\n return n === 1 ? 0 : 1;\n },\n o: [ 1, 2, 3, 4, 5 ],\n oFn: function (n) {\n return (n === 1 || n === 5 || B(7, 9, n)) ? 0 : IN([ 2, 3 ], n) ? 1 : n === 4 ? 2 : n === 6 ? 3 : 4;\n }\n});\n\nadd([ 'pl' ], {\n c: [ 1, 3, 4, 5 ],\n cFn: function (n, i, v) {\n var i10 = i % 10, i100 = i % 100;\n return i === 1 && v === 0 ? 0 : v === 0 && B(2, 4, i10) && !B(12, 14, i100) ? 1 : v === 0 && i !== 1 && B(0, 1, i10) || v === 0 && B(5, 9, i10) || v === 0 && B(12, 14, i100) ? 2 : 3;\n }\n});\n\nadd([ 'pt' ], {\n c: [ 1, 4, 5 ],\n cFn: function (n, i, v, f, t, w, e) {\n var i1000000 = i % 1000000;\n return B(0, 1, i) ? 0 : e === 0 && i !== 0 && i1000000 === 0 && v === 0 || !B(0, 5, e) ? 1 : 2;\n }\n});\n\nadd([ 'pt-pt' ], {\n c: [ 1, 4, 5 ],\n cFn: function (n, i, v, f, t, w, e) {\n var i1000000 = i % 1000000;\n return i === 1 && v === 0 ? 0 : e === 0 && i !== 0 && i1000000 === 0 && v === 0 || !B(0, 5, e) ? 1 : 2;\n }\n});\n\nadd([ 'ru' ], {\n c: [ 1, 3, 4, 5 ],\n cFn: function (n, i, v) {\n var i10 = i % 10, i100 = i % 100;\n return v === 0 && i10 === 1 && i100 !== 11 ? 0 : v === 0 && B(2, 4, i10) && !B(12, 14, i100) ? 1 : v === 0 && i10 === 0 || v === 0 && B(5, 9, i10) || v === 0 && B(11, 14, i100) ? 2 : 3;\n }\n});\n\nadd([ 'sc', 'scn' ], {\n c: [ 1, 5 ],\n cFn: function (n, i, v) {\n return i === 1 && v === 0 ? 0 : 1;\n },\n o: [ 4, 5 ],\n oFn: function (n) {\n return IN([ 11, 8, 80, 800 ], n) ? 0 : 1;\n }\n});\n\nadd([ 'shi' ], {\n c: [ 1, 3, 5 ],\n cFn: function (n, i) {\n return i === 0 || n === 1 ? 0 : B(2, 10, n) ? 1 : 2;\n }\n});\n\nadd([ 'si' ], {\n c: [ 1, 5 ],\n cFn: function (n, i, v, f) {\n return IN([ 0, 1 ], n) || i === 0 && f === 1 ? 0 : 1;\n }\n});\n\nadd([ 'sl' ], {\n c: [ 1, 2, 3, 5 ],\n cFn: function (n, i, v) {\n var i100 = i % 100;\n return v === 0 && i100 === 1 ? 0 : v === 0 && i100 === 2 ? 1 : v === 0 && B(3, 4, i100) || v !== 0 ? 2 : 3;\n }\n});\n\nadd([ 'sq' ], {\n c: [ 1, 5 ],\n cFn: function (n) {\n return n === 1 ? 0 : 1;\n },\n o: [ 1, 4, 5 ],\n oFn: function (n) {\n var n10 = n % 10, n100 = n % 100;\n return n === 1 ? 0 : n10 === 4 && n100 !== 14 ? 1 : 2;\n }\n});\n\nadd([ 'sv' ], {\n c: [ 1, 5 ],\n cFn: function (n, i, v) {\n return i === 1 && v === 0 ? 0 : 1;\n },\n o: [ 1, 5 ],\n oFn: function (n) {\n var n10 = n % 10, n100 = n % 100;\n return IN([ 1, 2 ], n10) && !IN([ 11, 12 ], n100) ? 0 : 1;\n }\n});\n\nadd([ 'tk' ], {\n c: [ 1, 5 ],\n cFn: function (n) {\n return n === 1 ? 0 : 1;\n },\n o: [ 3, 5 ],\n oFn: function (n) {\n var n10 = n % 10;\n return IN([ 6, 9 ], n10) || n === 10 ? 0 : 1;\n }\n});\n\nadd([ 'tzm' ], {\n c: [ 1, 5 ],\n cFn: function (n) {\n return B(0, 1, n) || B(11, 99, n) ? 0 : 1;\n }\n});\n\nadd([ 'uk' ], {\n c: [ 1, 3, 4, 5 ],\n cFn: function (n, i, v) {\n var i10 = i % 10, i100 = i % 100;\n return v === 0 && i10 === 1 && i100 !== 11 ? 0 : v === 0 && B(2, 4, i10) && !B(12, 14, i100) ? 1 : v === 0 && i10 === 0 || v === 0 && B(5, 9, i10) || v === 0 && B(11, 14, i100) ? 2 : 3;\n },\n o: [ 3, 5 ],\n oFn: function (n) {\n var n10 = n % 10, n100 = n % 100;\n return n10 === 3 && n100 !== 13 ? 0 : 1;\n }\n});\n\n////////////////////////////////////////////////////////////////////////////////\n","export default {site:{privacy_policy:'política de privacidad',terms:'condiciones de uso',gdpr_dialog:{title:'Este sitio web utiliza cookies',text:'Usamos tecnologías de navegador como cookies y almacenamiento local para almacenar sus preferencias. Debes aceptar nuestras Políticas de Privacidad y Condiciones de Uso para que podamos hacerlo.',accept:'Aceptar',cancel:'Cancelar'},theme:{light:'Light theme',dark:'Dark theme',change:'Change theme'},toolbar:{lang_switcher:{cta_text:'

Queremos que este proyecto de código abierto esté disponible para personas de todo el mundo.

Ayuda a traducir el contenido de este tutorial a tu idioma!

\\n',footer_text:'cuánto contenido está traducido al idioma correspondiente',old_version:'Antigua versión está publicada, necesita backporting.'},logo:{normal:{svg:'sitetoolbar__logo_en.svg',width:200},'normal-white':{svg:'sitetoolbar__logo_en-white.svg'},small:{svg:'sitetoolbar__logo_small_en.svg',width:70},'small-white':{svg:'sitetoolbar__logo_small_en-white.svg'}},sections:null,buy_ebook_extra:'Comprar',buy_ebook:'EPUB/PDF',search_placeholder:'Buscar en Javascript.info',search_button:'Buscar',public_profile:'Perfil público',account:'Cuenta',notifications:'Notificaciones',admin:'Admin',logout:'Cerrar sesión'},sorry_old_browser:'Lo sentimos, Internet Explorer no es compatible. Utilice un navegador más nuevo.',contact_us:'contáctenos',about_the_project:'acerca del proyecto',ilya_kantor:'Ilya Kantor',comments:'Comentarios',loading:'Cargando...',search:'Buscar',share:'Compartir',read_before_commenting:'lea esto antes de comentar…',last_updated_at:'Última actualización el #{date}',meta:{description:'Tutorial de JavaScript moderno: explicaciones simples pero detalladas con ejemplos y tareas, que incluyen: closures, documentos y eventos, programación orientada a objetos y más.'},'tablet-menu':{choose_section:'Elija una sección',search_placeholder:'Buscar en el tutorial',search_button:'Buscar'},comment:{help:['Si tiene sugerencias sobre qué mejorar, por favor enviar una propuesta de GitHub o una solicitud de extracción en lugar de comentar.','Si no puede entender algo en el artículo, por favor explique.','Para insertar algunas palabras de código, use la etiqueta <code>, para varias líneas – envolverlas en la etiqueta <pre>, para más de 10 líneas – utilice una entorno controlado (sandbox) (plnkr, jsbin, codepen…)']},edit_on_github:'Editar en GitHub',error:'error',close:'cerrar',hide_forever:'ocultar de manera permanente',hidden_forever:'Esta información no volverá a aparecer.',subscribe:{title:'Esté atento a las actualizaciones de javascript.info',text:'No enviamos publicidad, solo material relevante. Tu eliges que recibir:',agreement:'Al suscribirse a los boletines informativos, acepta las condiciones de uso.',button:'Suscríbete',button_unsubscribe:'Darse de baja de todos',common_updates:'Actualizaciones comúnes',common_updates_text:'nuevos cursos, clases magistrales, lanzamientos de artículos y screencast',your_email:'tu@email.aqui',newsletters:'boletín informativo,boletines informativos,boletines informativos',no_selected:'Nada seleccionado'},form:{value_must_not_be_empty:'El valor no debe estar vacío.',value_is_too_long:'El valor es demasiado largo.',value_is_too_short:'El valor es demasiado corto.',invalid_email:'Dirección de email no válida.',invalid_value:'Valor no válido.',invalid_autocomplete:'Por favor elija de la lista',invalid_date:'Fecha no válida, formato: dd.mm.yyyyy.',invalid_range:'Esta fecha no es válida aquí.',save:'Guardar',upload_file:'Subir Archivo',cancel:'Cancelar',server_error:'Error de solicitud, código de estado'}}};","export default {build_at:'Hecho el',last_version:'La última versión de este tutorial está en #{url}',tracker_ref:'Trabajamos constantemente para mejorar el tutorial. Si encuentra algún error, por favor escríbanos a nuestro github',tasks:'Tareas',importance:'importancia',to_solution:'A solución',solutions:'Soluciones',to_formulation:'A formulación',more:'Series adicionales',newOrder:{title:'Comprar el EPUB/PDF para la lectura fuera de línea',sample:'Descargar muestra',choose_course:'¿Qué secciones del tutorial desea?',price:'Precio',specifyEmail:'Especifique su email',note:'El link de descarga será enviado a esta dirección después del pago.',choose_payment:'Por favor seleccione el método de pago','continue':'Continuar',continue_text:'Al presionar el botón \\'Continuar\\' usted acepta nuestros términos y política de privacidad.',confirmation:'Confirmación',currency:'USD',continue_with_paypal:'Pago con PayPal',continue_with_stripe:'Pago con Tarjeta',continue_pay:'Proceder con el pago',info:'

El libro PDF/EPUB es la versión offline del tutorial. Comprando este libro, soporta al proyecto y lo habilita a usted a leer el tutorial como e-book.

Usted obtiene el contenido completo al día, más 1 año de actualizaciones gratuitas.

\\n'},orders:{order:'Orden',failed:'El pago falló, por favor intente más tarde.',currency:'u$d',payment:'Pago',successful:'Exitoso',pending:'Confirmación pendiente',amount:'Precio',choose_another_payment:'Elegir otro método de pago',do_not_pay_twice:'No pague dos veces. Cambie el método de pago solamente si está seguro de que el pago falló.',questions:'Si tiene preguntas, por favor envíelas a',thanks:'Pago exitoso, ¡gracias por su compra!',download:'Descargar ebook',confirmation_soon:'La confirmación fue enviada a #{email}',download_now:'Puede descargar el tutorial ahora mismo usando este link:',link_active_3_months:'El link estará activo por 1 año, con la edición más actualizada del tutorial.'},client:{enter_email:'Introduzca el email.'},onPaid:{subject:'Tutorial de JavaScript EPUB/PDF'}};","export default {server_connection_error:'Error de conexión al servidor.',server_request_timeout:'Tiempo de espera de la solicitud del servidor.',request_aborted:'La solicitud fue cancelada.',no_response:'No hay respuesta del servidor.',server_error:'Error de servidor (código #{status}), intente nuevamente más tarde.',invalid_format:'Formato de respuesta no válido.'};","export default {client:{choose_payment_method:'Seleccione el método de pago, por favor',specify_company_name:'Especifique el nombre de la empresa',error_start_again:'

#{message}

Por favor, intente la compra nuevamente.

Si cree que hay un error en el server, contacte con servicio al cliente.

\\n',maybe_purchase_error:'

#{message}

Si cree que ocurrió un error, por favor contacte con servicio al cliente.

\\n',purchase_error:'Ocurrió un error, por favor contacte con servicio al cliente.\\n'},currency:'USD',payment_for:'Pago por',payment:'Pago',pay:'Pagar',payment_received:'Pago recibido',payment_processing:'Proceso pendiente',payment_received_processing:'Pago recibido, procesando',payment_error:'Ha ocurrido un error',payment_error_accent:'Un error ha ocurrido durante el proceso de pago.',payment_failed:'El pago falló',payment_failed_try_again:'Pago fallido, por favor intente de nuevo',payment_success_description:'

Le enviaremos un email a #{orderEmail}.

Si tiene alguna pregunta, por favor envíela a #{mailLink}.

',order_canceled:'Orden cancelada',contact_payment:'

Por favor envíe todas las preguntas concernientes al pago a #{mailLink}.

',contact_order:'

Por favor envíe todas las preguntas concernientes a la orden a #{mailLink}.

',thanks:'¡Gracias por la orden!',contact_support:'

Por favor, contacte a soporte en #{mailLink}.

',payment_usd:'pago en dólares de EE.UU.',profile_order_link:'

Información de la orden disponible en su perfil.

'};","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","let OrderForm = require('./orderForm');\n\nfunction init() {\n\n let orderForm = document.querySelector('[data-order-form]');\n if (orderForm) {\n new OrderForm({\n elem: orderForm\n });\n }\n\n}\n\ninit();\n"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","lang","LANG","localCurrency","shopCurrency","env","NODE_ENV","rateShopTo","countryCode","ordersMail","providers","stripeKey","paypalClientId","telegramBotId","lookatCodeUrlBase","isRTL","delegate","topElement","selector","eventName","handler","context","addEventListener","event","found","currentNode","target","matches","currentTarget","parentElement","findDelegateTarget","delegateTarget","call","this","delegateMixin","obj","elem","csrfCookie","document","cookie","match","require","NotificationManager","constructor","options","notifications","verticalSpace","register","notification","unshift","setTimeout","recalculate","unregister","idx","indexOf","splice","top","forEach","height","init","window","notificationManager","Notification","html","type","timeout","elemHtml","body","insertAdjacentHTML","lastElementChild","undefined","TIMEOUT_DEFAULT","TIMEOUT_SLOW","TIMEOUT_FAST","setupCloseHandler","setupCloseTimeout","close","parentNode","remove","offsetHeight","value","style","transform","prototype","Info","super","Warning","Success","Spinner","size","class","elemClass","createElement","start","classList","toggle","stop","spinnerElem","querySelector","getCsrfCookie","t","i18n","add","reason","request","XMLHttpRequest","method","url","open","sync","skipCsrf","setRequestHeader","responseType","toString","JSON","stringify","noDocumentEvents","timeStart","Date","now","wrapEvent","dispatchEvent","result","raw","normalStatuses","name","CustomEvent","originalEvent","fail","status","response","responseText","getResponseHeader","json","parse","includes","success","info","send","FormPayment","OrderForm","product","onSubmit","preventDefault","display","checked","onChange","formPayment","showHidePaypalButtons","submit","getOrderData","orderData","order","orderNumber","number","amount","title","email","chooser","orderTemplate","dataset","price","elements","scrollIntoView","scrollBy","focus","currentUser","err","console","error","phrase","hasPhrase","process","I18N_DEBUG","arguments","setFallback","args","arg","__esModule","default","addPhrase","xhr","config","loadPaypalScript","orderForm","paymentMethodElem","currency","components","then","initPaypalButtons","render","paypal","Marks","getElementById","onEnd","startRequestIndication","bind","spinner","readPaymentFormValues","paymentData","querySelectorAll","readOrderDataWithPayment","paymentMethod","invoiceCompanyName","contractHeadElem","prefilled","defaultValue","contractAddressElem","bankDetailsElem","invoiceDocumentExchangeEdoElem","innElem","inn","trim","length","test","kppElem","kpp","invoiceDocumentExchangeMailElem","fields","entries","index","key","sendPaymentRequest","Buttons","layout","color","label","tagline","onClick","data","actions","createOrder","async","form","submitResult","paypalOrderId","onApprove","orderID","redirect","location","protocol","host","message","onCancel","paypalOrder","onError","Promise","reject","errorText","description","href","container","hidden","innerHTML","appendChild","firstChild","r","sdkBaseURL","n","Array","isArray","filter","reduce","substring","dataAttributes","queryParams","a","concat","src","setAttribute","i","attributes","onSuccess","onerror","onload","head","insertBefore","firstElementChild","fetch","text","split","replace","catch","loadScript","u","c","s","d","l","f","cloneNode","uidAuto","parser","plural","_class","isString","isNumber","isNaN","isFinite","isBoolean","isObject","nativeForEach","iterator","hasOwnProperty","formatRegExp","format","len","String","x","Number","flatten","params","val","sub_val","sub_key","keySeparator","makePhraseKey","locale","searchPhraseKey","self","storage","_storage","_defaultLocale","fb_cache","_fallbacks_cache","fb_key","fb","_fallbacks","pluralizer","forms","BabelFish","defaultLocale","_plurals_cache","translation","flattenLevel","fl","Infinity","Math","floor","TypeError","fallbacks","def","slice","push","CAN_HAVE_DIRECTIVES_RE","translate","compiled","str","nodes","buf","strict_exec","forms_exec","plurals_cache","node","anchor","strict","k","parsed","unescaped","Function","join","compile","count","noFallback","getLocale","unique","out","fallback","locales","load","phrases","rule","SyntaxError","expected","offset","line","column","child","parent","ctor","peg$subclass","input","peg$result","peg$FAILED","peg$startRuleFunctions","peg$parsestart","peg$startRuleFunction","peg$c1","peg$c2","peg$c3","peg$c4","peg$c5","peg$c6","peg$c7","regularForms","strictForms","peg$c8","peg$c9","peg$c10","part","more","peg$c11","peg$c12","peg$c13","peg$c14","peg$c15","peg$c16","peg$c17","peg$c18","peg$c19","peg$c20","peg$c21","peg$c22","peg$c23","peg$c24","char","peg$c25","peg$c26","peg$c27","peg$c28","peg$c29","peg$c30","peg$c31","peg$c32","peg$c33","peg$c34","peg$c35","peg$c36","peg$c37","peg$c38","peg$c39","peg$c40","peg$c41","peg$c42","peg$c43","lc","peg$c44","literal_chars","peg$c45","peg$c46","peg$currPos","peg$reportedPos","peg$cachedPos","peg$cachedPosDetails","seenCR","peg$maxFailPos","peg$maxFailExpected","peg$silentFails","startRule","peg$computePosDetails","pos","details","startPos","endPos","p","ch","charAt","advance","peg$fail","peg$buildException","posDetails","sort","b","cleanupExpected","expectedDescs","hex","charCodeAt","toUpperCase","stringEscape","buildMessage","s0","s1","peg$parseliteral","peg$parseplural","peg$parsevariable","s2","s3","s4","substr","peg$parseplural_forms","peg$parseidentifier","peg$parseplural_anchor","peg$parseplural_part","s5","peg$parseplural_char","peg$parseidentifier_part","peg$parseliteral_char","normalize","loc","toLowerCase","c_re","cFn","sval","spl","pow","v","w","o_indexOf","oFn","ordinal","FORMS","unpack","B","y","IN","set","n100","i10","i100","i1000","n10","n1000000","f10","f100","i1000000","n1000","n100000","site","privacy_policy","terms","gdpr_dialog","accept","cancel","theme","light","dark","change","toolbar","lang_switcher","cta_text","footer_text","old_version","logo","normal","svg","width","small","sections","buy_ebook_extra","buy_ebook","search_placeholder","search_button","public_profile","account","admin","logout","sorry_old_browser","contact_us","about_the_project","ilya_kantor","comments","loading","search","share","read_before_commenting","last_updated_at","meta","choose_section","comment","help","edit_on_github","hide_forever","hidden_forever","subscribe","agreement","button","button_unsubscribe","common_updates","common_updates_text","your_email","newsletters","no_selected","value_must_not_be_empty","value_is_too_long","value_is_too_short","invalid_email","invalid_value","invalid_autocomplete","invalid_date","invalid_range","save","upload_file","server_error","build_at","last_version","tracker_ref","tasks","importance","to_solution","solutions","to_formulation","newOrder","sample","choose_course","specifyEmail","note","choose_payment","continue_text","confirmation","continue_with_paypal","continue_with_stripe","continue_pay","orders","failed","payment","successful","pending","choose_another_payment","do_not_pay_twice","questions","thanks","download","confirmation_soon","download_now","link_active_3_months","client","enter_email","onPaid","subject","server_connection_error","server_request_timeout","request_aborted","no_response","invalid_format","choose_payment_method","specify_company_name","error_start_again","maybe_purchase_error","purchase_error","payment_for","pay","payment_received","payment_processing","payment_received_processing","payment_error","payment_error_accent","payment_failed","payment_failed_try_again","payment_success_description","order_canceled","contact_payment","contact_order","contact_support","payment_usd","profile_order_link","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","definition","defineProperty","enumerable","get","prop","Symbol","toStringTag"],"sourceRoot":""}