{"version":3,"file":"ebook.3c71664df1023cf4474c.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/fr.yml","webpack://wp/./modules/ebook/locales/fr.yml","webpack://wp/./modules/engine/koa/error/locales/network/fr.yml","webpack://wp/./modules/payments/locales/fr.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\"./fr.yml\": 334\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\"./fr.yml\": 981\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\"./fr.yml\": 371\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\"./fr.yml\": 764\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:'politique de confidentialité',terms:'conditions d\\'utilisation',banner_bottom:'Développez vos compétences avec cours vidéo sur JavaScript et Frameworks.',action_required:'Action requise',gdpr_dialog:{title:'Ce site web utilise des cookies',text:'Nous utilisons des technologies de navigation telles que les cookies et le stockage local pour stocker vos préférences. Vous devez accepter notre Politique de confidentialité et nos Conditions d\\'utilisation pour accéder de nos services.',accept:'Accepter',cancel:'Annuler'},theme:{light:'Light theme',dark:'Dark theme',change:'Change theme'},toolbar:{lang_switcher:{cta_text:'

Nous souhaitons rendre ce projet open source disponible pour les gens du monde entier.

Aidez-nous à traduire le contenu de ce tutoriel dans votre langue!

\\n',footer_text:'quantité de contenu est traduit dans la langue correspondante',old_version:'L\\'ancienne version est publiée, nécessite un rétroportage.'},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:'Acheter',buy_ebook:'EPUB/PDF',search_placeholder:'Rechercher sur Javascript.info',search_button:'Recherche',public_profile:'Profil public',account:'Compte',notifications:'Notifications',admin:'Admin',logout:'Déconnexion'},sorry_old_browser:'Désolé, Internet Explorer n\\'est pas pris en charge, veuillez utiliser un navigateur plus récent.',contact_us:'nous contacter',about_the_project:'à propos du projet',ilya_kantor:'Ilya Kantor',comments:'Commentaires',loading:'Chargement...',search:'Recherche',share:'Partager',read_before_commenting:'lire ceci avant de commenter…',last_updated_at:'Dernière mise à jour le #{date}',meta:{description:'Tutoriel JavaScript moderne : explications simples mais détaillées avec des exemples et des exercices, y compris : les closures, le document et les événements, la programmation orientée objet et plus encore.'},'tablet-menu':{choose_section:'Choisissez la section',search_placeholder:'Rechercher dans le tutoriel',search_button:'Recherche'},comment:{help:['Si vous avez des améliorations à suggérer, merci de soumettre une issue GitHub ou une pull request au lieu de commenter.','Si vous ne comprenez pas quelque chose dans l\\'article, merci de préciser.','Pour insérer quelques bouts de code, utilisez la balise <code>, pour plusieurs lignes – enveloppez-les avec la balise <pre>, pour plus de 10 lignes - utilisez une sandbox (plnkr, jsbin, codepen…)']},edit_on_github:'Editer sur GitHub',error:'erreur',close:'fermer',hide_forever:'cacher en permanence',hidden_forever:'Cette information n\\'apparaîtra plus.',subscribe:{title:'Surveiller les mises à jour de javascript.info',text:'Nous n\\'envoyons pas de publicités, uniquement des informations pertinentes. Vous choisissez ce que vous souhaitez recevoir :',agreement:'En vous inscrivant aux newsletters, vous acceptez les conditions d\\'utilisation.',button:'S\\'abonner',button_unsubscribe:'Se désabonner de tout',common_updates:'Mises à jour courantes',common_updates_text:'nouveaux cours, master classes, publications d\\'articles et de screencast',your_email:'votre@email.ici',newsletters:'newsletter,newsletters,newsletters',no_selected:'Rien de sélectionné'},form:{value_must_not_be_empty:'La valeur ne doit pas être vide.',value_is_too_long:'La valeur est trop longue.',value_is_too_short:'La valeur est trop courte.',invalid_email:'Email invalide.',invalid_value:'Valeur invalide.',invalid_autocomplete:'Veuillez choisir dans la liste',invalid_date:'Date incorrecte, format : jj.mm.aaaa',invalid_range:'Cette date n\\'est pas valide ici.',save:'Sauvegarder',upload_file:'Uploader un fichier',cancel:'Annuler',server_error:'Erreur de requête, code d\\'état'}}};","export default {build_at:'Construit à',last_version:'La dernière version du tutoriel est disponible à l\\'adresse suivante : #{url}',tracker_ref:'Nous travaillons constamment pour améliorer le tutoriel. Si vous trouvez des erreurs, merci de nous les signaler sur notre Github',tasks:'Exercices',importance:'importance',to_solution:'Vers la solution',solutions:'Solutions',to_formulation:'Vers la formulation',more:'Série supplémentaire',newOrder:{title:'Acheter l’EPUB/PDF pour une lecture hors ligne',sample:'Télécharger un extrait',choose_course:'Quelles parties du didacticiel souhaitez-vous ?',price:'Prix',specifyEmail:'Précisez votre email',note:'Le lien de téléchargement sera envoyé à cette adresse après paiement.',choose_payment:'Sélectionnez le mode de paiement','continue':'Continuer',continue_text:'En appuyant sur le bouton \\'Continuer\\', vous acceptez nos conditions et politique de confidentialité.',confirmation:'Confirmation',currency:'USD',continue_with_paypal:'Payer avec PayPal',continue_with_stripe:'Payer via Stripe',continue_pay:'Procéder au paiement',info:'

La version PDF/EPUB est une version hors ligne du didacticiel. En achetant ce livre, vous soutenez le projet et pourrez lire le tutoriel sous forme de livre électronique.

Vous obtenez tout le contenu dès maintenant, plus 1 an de mises à jour gratuites.

\\n'},orders:{order:'Commander',failed:'Le paiement a échoué, veuillez réessayer plus tard.',currency:'$',payment:'Paiement',successful:'Réussi',pending:'Confirmation en attente',amount:'Prix',choose_another_payment:'Choisissez un autre mode de paiement',do_not_pay_twice:'Ne payez pas deux fois. Ne modifiez le mode de paiement que si vous êtes sûr que le paiement a échoué.',questions:'Si vous avez des questions, veuillez les envoyer à',thanks:'Paiement réussi, merci pour votre achat !',download:'Télécharger l\\'ebook',confirmation_soon:'La confirmation a été envoyée à #{email}',download_now:'Vous pouvez télécharger le tutoriel dès maintenant en utilisant ce lien :',link_active_3_months:'Le lien sera actif pendant 1 an, avec la dernière version du tutoriel.'},client:{enter_email:'Entrez votre e-mail.'},onPaid:{subject:'Tutoriel JavaScript EPUB/PDF'}};","export default {server_connection_error:'Erreur de connexion au serveur.',server_request_timeout:'La requête au serveur a expirée.',request_aborted:'La requête a été abandonnée.',no_response:'Aucune réponse du serveur.',server_error:'Erreur du serveur (code #{status}), réessayez plus tard.',invalid_format:'Format de réponse non valide.'};","export default {client:{choose_payment_method:'Sélectionnez le mode de paiement',specify_company_name:'Spécifiez le nom de l\\'entreprise',error_start_again:'

#{message}

Veuillez réessayer l’achat.

Si vous pensez qu\\'il y a une erreur sur le serveur - contactez-nous par mail customer service.

\\n',maybe_purchase_error:'

#{message}

Si vous pensez qu\\'une erreur s\\'est produite — veuillez contacter par mail au service clients.

\\n',purchase_error:'Une erreur s\\'est produite, veuillez contacter par mail au service clients.\\n'},currency:'USD',payment_for:'Paiement pour',payment:'Paiement',pay:'Payer',payment_received:'Paiement reçu',payment_processing:'Traitement en attente',payment_received_processing:'Paiement reçu, traitement',payment_error:'Une erreur s\\'est produite',payment_error_accent:'Une erreur s\\'est produite lors du traitement du paiement.',payment_failed:'Échec du paiement',payment_failed_try_again:'Échec du paiement, veuillez réessayer',payment_success_description:'

Nous vous enverrons un e-mail à #{orderEmail}.

Si vous avez des questions, veuillez les envoyer à #{mailLink}.

',order_canceled:'Commande annulée',contact_payment:'

Veuillez envoyer toutes les questions concernant le paiement à #{mailLink}.

',contact_order:'

Veuillez envoyer toutes les questions concernant la commande à #{mailLink}.

',thanks:'Merci pour votre commande !',contact_support:'

Veuillez contacter le support à l’adresse #{mailLink}.

',payment_usd:'paiement en dollars américains',profile_order_link:'

Les informations de la commande sont disponibles dans votre profil.

'};","// 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","banner_bottom","action_required","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":""}