diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..e9cfca2 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,97 @@ +# Created by .ignore support plugin (hsz.mobi) +### Node template +# Logs +/logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# next.js build output +.next + +# nuxt.js build output +.nuxt + +# Nuxt generate +dist + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless + +# IDE / Editor +.idea +.vscode + +# Service worker +sw.* + +# one signal +OneSignalSDK* + +# macOS +.DS_Store + +# Vim swap files +*.swp + +# static folder +static/ \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..2cc896f --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,22 @@ +module.exports = { + root: true, + env: { + browser: true, + node: true, + jquery: true + }, + parserOptions: { + parser: '@babel/eslint-parser', + requireConfigFile: false + }, + extends: ['@nuxtjs', 'plugin:nuxt/recommended', 'prettier'], + plugins: [], + // add your custom rules here + rules: { + 'no-console': 'off', + camelcase: 'off', + 'no-async-promise-executor': 'off', + 'vue/no-v-html': 'off', + 'vue/prop-name-casing': 'off' + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f9d3f53 --- /dev/null +++ b/.gitignore @@ -0,0 +1,95 @@ + +/static/uploads/ +# Created by .ignore support plugin (hsz.mobi) +### Node template +# Logs +/logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# next.js build output +.next + +# nuxt.js build output +.nuxt + +# Nuxt generate +dist + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless + +# IDE / Editor +.idea + +# Service worker +sw.* + +# one signal +OneSignalSDK* + +# macOS +.DS_Store + +# Vim swap files +*.swp diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..11f8939 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,99 @@ +### +# Place your Prettier ignore content here + +### +# .gitignore content is duplicated here due to https://github.com/prettier/prettier/issues/8506 + +# Created by .ignore support plugin (hsz.mobi) +### Node template +# Logs +/logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# next.js build output +.next + +# nuxt.js build output +.nuxt + +# Nuxt generate +dist + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless + +# IDE / Editor +.idea + +# Service worker +sw.* + +# macOS +.DS_Store + +# Vim swap files +*.swp + +# static assets +static/ \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..709914c --- /dev/null +++ b/.prettierrc @@ -0,0 +1,8 @@ +{ + "trailingComma": "none", + "tabWidth": 2, + "semi": false, + "singleQuote": true, + "printWidth": 120, + "arrowParens": "avoid" +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..177bc7d --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "pwa-chrome", + "request": "launch", + "name": "Launch Chrome against localhost", + "url": "http://localhost:8080", + "webRoot": "${workspaceFolder}" + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..c47b556 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,16 @@ +{ + "files.exclude": { + "**/.git": true, + "**/.svn": true, + "**/.hg": true, + "**/CVS": true, + "**/.DS_Store": true, + "**/Thumbs.db": true, + "node_modules": true, + "**/.vscode": true, + "**/.nuxt": false, + ".vscode": true + }, + "explorerExclude.backup": null, + "prettier.arrowParens": "avoid" +} diff --git a/.vscode/sftp.json b/.vscode/sftp.json new file mode 100644 index 0000000..3df72a1 --- /dev/null +++ b/.vscode/sftp.json @@ -0,0 +1,10 @@ +{ + "name": "AsanService", + "host": "asan-service.com", + "protocol": "ftp", + "port": 21, + "username": "asanserv", + "password": "6}Y5[G}Zc#we", + "remotePath": "/nuxt", + "uploadOnSave": false +} diff --git a/README.md b/README.md index 1602a9b..0d4d367 100644 --- a/README.md +++ b/README.md @@ -1 +1,23 @@ -# asan-service \ No newline at end of file +# Asan-Service + +## Project bulit with Nodejs version: + +v14.18.3 + +## Build Setup + +```bash +# install dependencies +$ npm i + +# to run project in development mode +$ npm run dev +$ npm run server + +# build for production and launch server +$ npm run build +$ npm run start + +# generate static project +$ npm run generate +``` diff --git a/components/GlobalComponents/AppInstallDialog.vue b/components/GlobalComponents/AppInstallDialog.vue new file mode 100644 index 0000000..ae2e67c --- /dev/null +++ b/components/GlobalComponents/AppInstallDialog.vue @@ -0,0 +1,19 @@ + + + diff --git a/components/GlobalComponents/Hero.vue b/components/GlobalComponents/Hero.vue new file mode 100644 index 0000000..141c06c --- /dev/null +++ b/components/GlobalComponents/Hero.vue @@ -0,0 +1,23 @@ + + + diff --git a/components/GlobalComponents/LotteryPopUp.vue b/components/GlobalComponents/LotteryPopUp.vue new file mode 100644 index 0000000..4bcf8ff --- /dev/null +++ b/components/GlobalComponents/LotteryPopUp.vue @@ -0,0 +1,118 @@ + + + diff --git a/components/GlobalComponents/TableNotice.vue b/components/GlobalComponents/TableNotice.vue new file mode 100644 index 0000000..f0e0ce9 --- /dev/null +++ b/components/GlobalComponents/TableNotice.vue @@ -0,0 +1,3 @@ + diff --git a/components/admin/CustomSubHeader.vue b/components/admin/CustomSubHeader.vue new file mode 100644 index 0000000..00b64c8 --- /dev/null +++ b/components/admin/CustomSubHeader.vue @@ -0,0 +1,21 @@ + + + diff --git a/components/admin/RenderString.js b/components/admin/RenderString.js new file mode 100644 index 0000000..c0488fa --- /dev/null +++ b/components/admin/RenderString.js @@ -0,0 +1,21 @@ +import Vue from 'vue' + +Vue.component('RenderString', { + props: { + // eslint-disable-next-line vue/require-prop-types + string: { + required: true + } + }, + render(h) { + const render = { + template: '
' + this.string + '
', + methods: { + markComplete() { + console.log('the method called') + } + } + } + return h(render) + } +}) diff --git a/components/admin/TheFooter.vue b/components/admin/TheFooter.vue new file mode 100644 index 0000000..43167a2 --- /dev/null +++ b/components/admin/TheFooter.vue @@ -0,0 +1,14 @@ + + + diff --git a/components/admin/TheHeader.vue b/components/admin/TheHeader.vue new file mode 100644 index 0000000..68c386f --- /dev/null +++ b/components/admin/TheHeader.vue @@ -0,0 +1,42 @@ + + + diff --git a/components/admin/TheHeaderDropdownAccnt.vue b/components/admin/TheHeaderDropdownAccnt.vue new file mode 100644 index 0000000..e66be6b --- /dev/null +++ b/components/admin/TheHeaderDropdownAccnt.vue @@ -0,0 +1,64 @@ + + + + + diff --git a/components/admin/TheSidebar.vue b/components/admin/TheSidebar.vue new file mode 100644 index 0000000..2f8a280 --- /dev/null +++ b/components/admin/TheSidebar.vue @@ -0,0 +1,331 @@ + + + diff --git a/components/admin/_nav.js b/components/admin/_nav.js new file mode 100644 index 0000000..f156174 --- /dev/null +++ b/components/admin/_nav.js @@ -0,0 +1,66 @@ +export default [ + { + _name: 'CSidebarNav', + _children: [ + { + _name: 'CSidebarNavItem', + name: 'صفحه اصلی', + to: { name: 'admin' }, + icon: 'cil-speedometer' + }, + // { + // _name: 'CSidebarNavTitle', + // _children: ['مدیریت صفحات داینامیک'] + // }, + { + _name: 'CSidebarNavDropdown', + name: 'دانلود ها', + // route: {name: 'admin-download'}, + fontIcon: 'fal fa-arrow-alt-to-bottom', + items: [ + { + name: 'لیست', + to: { name: 'admin-downloads-page', params: { page: 1 } }, + exact: false + }, + { + name: 'دسته بندی ها', + to: { name: 'admin-download-categories' } + } + ] + }, + { + _name: 'CSidebarNavItem', + name: 'آموزش ها', + to: { name: 'admin-learning-page', params: { page: 1 } }, + exact: false, + icon: 'cil-chart-pie' + }, + { + _name: 'CSidebarNavItem', + name: 'شرایط گارانتی', + to: { name: 'admin-warranty-terms-page', params: { page: 1 } }, + exact: false, + fontIcon: 'fal fa-file-alt' + }, + { + _name: 'CSidebarNavItem', + name: 'سوالات متداول', + to: { name: 'admin-FAQ' }, + exact: false, + fontIcon: 'fal fa-graduation-cap' + }, + { + _name: 'CSidebarNavItem', + name: 'پیام های صفحه تماس با ما', + to: { name: 'admin-contact-us' }, + exact: false, + badge: { + color: 'primary' + // text: this.computed.unreadMessages + }, + fontIcon: 'fal fa-id-card-alt' + } + ] + } +] diff --git a/components/admin/charts/CChartBarExample.vue b/components/admin/charts/CChartBarExample.vue new file mode 100644 index 0000000..8cd99ec --- /dev/null +++ b/components/admin/charts/CChartBarExample.vue @@ -0,0 +1,20 @@ + + + diff --git a/components/admin/charts/CChartBarSimple.vue b/components/admin/charts/CChartBarSimple.vue new file mode 100644 index 0000000..65bf102 --- /dev/null +++ b/components/admin/charts/CChartBarSimple.vue @@ -0,0 +1,78 @@ +/* eslint-disable vue/require-default-prop */ + + + diff --git a/components/admin/charts/CChartDoughnutExample.vue b/components/admin/charts/CChartDoughnutExample.vue new file mode 100644 index 0000000..83e37df --- /dev/null +++ b/components/admin/charts/CChartDoughnutExample.vue @@ -0,0 +1,19 @@ + + + diff --git a/components/admin/charts/CChartLineExample.vue b/components/admin/charts/CChartLineExample.vue new file mode 100644 index 0000000..649a78e --- /dev/null +++ b/components/admin/charts/CChartLineExample.vue @@ -0,0 +1,25 @@ + + + diff --git a/components/admin/charts/CChartLineSimple.vue b/components/admin/charts/CChartLineSimple.vue new file mode 100644 index 0000000..510960a --- /dev/null +++ b/components/admin/charts/CChartLineSimple.vue @@ -0,0 +1,145 @@ +/* eslint-disable vue/require-default-prop */ + + + + diff --git a/components/admin/charts/CChartPieExample.vue b/components/admin/charts/CChartPieExample.vue new file mode 100644 index 0000000..93bbeec --- /dev/null +++ b/components/admin/charts/CChartPieExample.vue @@ -0,0 +1,19 @@ + + + diff --git a/components/admin/charts/CChartPolarAreaExample.vue b/components/admin/charts/CChartPolarAreaExample.vue new file mode 100644 index 0000000..9a36fcb --- /dev/null +++ b/components/admin/charts/CChartPolarAreaExample.vue @@ -0,0 +1,42 @@ + + + diff --git a/components/admin/charts/CChartRadarExample.vue b/components/admin/charts/CChartRadarExample.vue new file mode 100644 index 0000000..e9c6e5a --- /dev/null +++ b/components/admin/charts/CChartRadarExample.vue @@ -0,0 +1,46 @@ + + + diff --git a/components/admin/charts/MainChartExample.vue b/components/admin/charts/MainChartExample.vue new file mode 100644 index 0000000..ae4b502 --- /dev/null +++ b/components/admin/charts/MainChartExample.vue @@ -0,0 +1,135 @@ + + + diff --git a/components/admin/widgets/WidgetsBrand.vue b/components/admin/widgets/WidgetsBrand.vue new file mode 100644 index 0000000..056135e --- /dev/null +++ b/components/admin/widgets/WidgetsBrand.vue @@ -0,0 +1,118 @@ + + + + + diff --git a/components/admin/widgets/WidgetsDropdown.vue b/components/admin/widgets/WidgetsDropdown.vue new file mode 100644 index 0000000..4fd4b6c --- /dev/null +++ b/components/admin/widgets/WidgetsDropdown.vue @@ -0,0 +1,115 @@ + + + diff --git a/components/agents/AgentDetailsModal.vue b/components/agents/AgentDetailsModal.vue new file mode 100644 index 0000000..8cbc41d --- /dev/null +++ b/components/agents/AgentDetailsModal.vue @@ -0,0 +1,97 @@ + + + diff --git a/components/agents/CheckRepAndUploadDocs.vue b/components/agents/CheckRepAndUploadDocs.vue new file mode 100644 index 0000000..839893d --- /dev/null +++ b/components/agents/CheckRepAndUploadDocs.vue @@ -0,0 +1,136 @@ + + + diff --git a/components/agents/EnrollRepresentationAssets.vue b/components/agents/EnrollRepresentationAssets.vue new file mode 100644 index 0000000..b598df1 --- /dev/null +++ b/components/agents/EnrollRepresentationAssets.vue @@ -0,0 +1,97 @@ + + + diff --git a/components/agents/EnrollRepresentationForm.vue b/components/agents/EnrollRepresentationForm.vue new file mode 100644 index 0000000..ce3332b --- /dev/null +++ b/components/agents/EnrollRepresentationForm.vue @@ -0,0 +1,1102 @@ + + + diff --git a/components/agents/RepresentationImageUploader.vue b/components/agents/RepresentationImageUploader.vue new file mode 100644 index 0000000..7800897 --- /dev/null +++ b/components/agents/RepresentationImageUploader.vue @@ -0,0 +1,116 @@ + + + diff --git a/components/footer/SiteFooter.vue b/components/footer/SiteFooter.vue new file mode 100644 index 0000000..b4cbe1b --- /dev/null +++ b/components/footer/SiteFooter.vue @@ -0,0 +1,244 @@ + + + diff --git a/components/header/MobileMenu.vue b/components/header/MobileMenu.vue new file mode 100644 index 0000000..37688cd --- /dev/null +++ b/components/header/MobileMenu.vue @@ -0,0 +1,143 @@ + + + diff --git a/components/header/SiteHeader.vue b/components/header/SiteHeader.vue new file mode 100644 index 0000000..c62af9c --- /dev/null +++ b/components/header/SiteHeader.vue @@ -0,0 +1,124 @@ + + + diff --git a/components/icons/UserIcon.vue b/components/icons/UserIcon.vue new file mode 100644 index 0000000..698567b --- /dev/null +++ b/components/icons/UserIcon.vue @@ -0,0 +1,94 @@ + + + diff --git a/components/icons/logo.vue b/components/icons/logo.vue new file mode 100644 index 0000000..4cd6e71 --- /dev/null +++ b/components/icons/logo.vue @@ -0,0 +1,148 @@ + + + diff --git a/components/profile/AddBuffersToBufferRequest.vue b/components/profile/AddBuffersToBufferRequest.vue new file mode 100644 index 0000000..02aa476 --- /dev/null +++ b/components/profile/AddBuffersToBufferRequest.vue @@ -0,0 +1,167 @@ + + + diff --git a/components/profile/AddOldPiecesToOldPieceRequest.vue b/components/profile/AddOldPiecesToOldPieceRequest.vue new file mode 100644 index 0000000..4d810e1 --- /dev/null +++ b/components/profile/AddOldPiecesToOldPieceRequest.vue @@ -0,0 +1,207 @@ + + + diff --git a/components/profile/AddPiecesToPieceRequest.vue b/components/profile/AddPiecesToPieceRequest.vue new file mode 100644 index 0000000..5f6b77b --- /dev/null +++ b/components/profile/AddPiecesToPieceRequest.vue @@ -0,0 +1,239 @@ + + + diff --git a/components/profile/AddReportToGuaranteeReportForm.vue b/components/profile/AddReportToGuaranteeReportForm.vue new file mode 100644 index 0000000..21a63a6 --- /dev/null +++ b/components/profile/AddReportToGuaranteeReportForm.vue @@ -0,0 +1,223 @@ + + + diff --git a/components/profile/AddStuffModal.vue b/components/profile/AddStuffModal.vue new file mode 100644 index 0000000..acd3948 --- /dev/null +++ b/components/profile/AddStuffModal.vue @@ -0,0 +1,300 @@ + + + diff --git a/components/profile/AddUserItemsToAgentDraft.vue b/components/profile/AddUserItemsToAgentDraft.vue new file mode 100644 index 0000000..faa3547 --- /dev/null +++ b/components/profile/AddUserItemsToAgentDraft.vue @@ -0,0 +1,233 @@ + + + diff --git a/components/profile/ChangeEmailModal.vue b/components/profile/ChangeEmailModal.vue new file mode 100644 index 0000000..06ea211 --- /dev/null +++ b/components/profile/ChangeEmailModal.vue @@ -0,0 +1,99 @@ + + + diff --git a/components/profile/SelectAgentModal.vue b/components/profile/SelectAgentModal.vue new file mode 100644 index 0000000..11b7eb4 --- /dev/null +++ b/components/profile/SelectAgentModal.vue @@ -0,0 +1,230 @@ + + + diff --git a/components/profile/UserAsideMenu.vue b/components/profile/UserAsideMenu.vue new file mode 100644 index 0000000..f22768e --- /dev/null +++ b/components/profile/UserAsideMenu.vue @@ -0,0 +1,237 @@ + + + diff --git a/components/profile/UserDashboardContainer.vue b/components/profile/UserDashboardContainer.vue new file mode 100644 index 0000000..7152330 --- /dev/null +++ b/components/profile/UserDashboardContainer.vue @@ -0,0 +1,34 @@ + + + diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..29037a6 --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "~/*": ["./*"], + "@/*": ["./*"], + "~~/*": ["./*"], + "@@/*": ["./*"] + } + }, + "exclude": ["node_modules", ".nuxt", "dist"] +} diff --git a/layouts/admin-auth.vue b/layouts/admin-auth.vue new file mode 100644 index 0000000..cd101d1 --- /dev/null +++ b/layouts/admin-auth.vue @@ -0,0 +1,13 @@ + + + diff --git a/layouts/admin.vue b/layouts/admin.vue new file mode 100644 index 0000000..1520026 --- /dev/null +++ b/layouts/admin.vue @@ -0,0 +1,98 @@ + + + + + + + diff --git a/layouts/blank.vue b/layouts/blank.vue new file mode 100644 index 0000000..630cfee --- /dev/null +++ b/layouts/blank.vue @@ -0,0 +1,11 @@ + + + diff --git a/layouts/default.vue b/layouts/default.vue new file mode 100644 index 0000000..f330d2d --- /dev/null +++ b/layouts/default.vue @@ -0,0 +1,23 @@ + + + diff --git a/layouts/error.vue b/layouts/error.vue new file mode 100644 index 0000000..5a09ee9 --- /dev/null +++ b/layouts/error.vue @@ -0,0 +1,26 @@ + + + diff --git a/layouts/user-auth.vue b/layouts/user-auth.vue new file mode 100644 index 0000000..e213d9b --- /dev/null +++ b/layouts/user-auth.vue @@ -0,0 +1,20 @@ + + + diff --git a/layouts/user.vue b/layouts/user.vue new file mode 100644 index 0000000..9346d11 --- /dev/null +++ b/layouts/user.vue @@ -0,0 +1,102 @@ + + + diff --git a/middleware/auth-admin.js b/middleware/auth-admin.js new file mode 100644 index 0000000..f6499a8 --- /dev/null +++ b/middleware/auth-admin.js @@ -0,0 +1,4 @@ +export default function ({ $auth, redirect }) { + if ($auth.loggedIn && $auth.hasScope('admin')) return true + else return redirect('/auth/login-register') +} diff --git a/middleware/auth-user.js b/middleware/auth-user.js new file mode 100644 index 0000000..32ed907 --- /dev/null +++ b/middleware/auth-user.js @@ -0,0 +1,5 @@ +export default function ({ $auth, redirect, route }) { + if (!$auth.loggedIn || !$auth.hasScope('user')) return redirect('/auth/login-register') + if (!$auth.user.email_confirmed && route.name !== 'account-verify') return redirect('/account/verify') + return true +} diff --git a/middleware/permissions.js b/middleware/permissions.js new file mode 100644 index 0000000..8dc7a87 --- /dev/null +++ b/middleware/permissions.js @@ -0,0 +1,16 @@ +export default async function ({ $auth, redirect, route }) { + try { + if (route.name === 'admin') { + return true + } else { + let hasPermission = false + for await (const permission of $auth.user.permissions) { + if ((await route.name.includes(permission)) && permission !== '') hasPermission = true + } + if (hasPermission) return true + else redirect('/admin') + } + } catch (e) { + redirect('/admin') + } +} diff --git a/mixins/CoreUtils.js b/mixins/CoreUtils.js new file mode 100644 index 0000000..013f7cc --- /dev/null +++ b/mixins/CoreUtils.js @@ -0,0 +1,172 @@ +export default { + methods: { + getCssCustomProperties() { + if (process.client) { + const cssCustomProperties = {} + const sheets = document.styleSheets + let cssText = '' + for (let i = sheets.length - 1; i > -1; i--) { + const rules = sheets[i].cssRules + for (let j = rules.length - 1; j > -1; j--) { + if (rules[j].selectorText === '.ie-custom-properties') { + // eslint-disable-next-line prefer-destructuring + cssText = rules[j].cssText + break + } + } + + if (cssText) { + break + } + } + + // eslint-disable-next-line unicorn/prefer-string-slice + cssText = cssText.substring(cssText.lastIndexOf('{') + 1, cssText.lastIndexOf('}')) + + cssText.split(';').forEach(property => { + if (property) { + const name = property.split(': ')[0] + const value = property.split(': ')[1] + if (name && value) { + cssCustomProperties[`--${name.trim()}`] = value.trim() + } + } + }) + return cssCustomProperties + } else { + return null + } + }, + deepObjectsMerge(target, source) { + // Iterate through `source` properties and if an `Object` set property to merge of `target` and `source` properties + for (const key of Object.keys(source)) { + if (source[key] instanceof Object) { + Object.assign(source[key], this.deepObjectsMerge(target[key], source[key])) + } + } + + // Join `target` and modified `source` + Object.assign(target || {}, source) + return target + }, + getColor(rawProperty, element = process.client ? document.body : null) { + const property = `--${rawProperty}` + const style = this.getStyle(property, element) + return style || rawProperty + }, + getStyle(property, element = process.client ? document.body : null) { + if (process.client) { + const minIEVersion = 10 + const isIE1x = () => Boolean(document.documentMode) && document.documentMode >= minIEVersion + const isCustomProperty = property => property.match(/^--.*/i) + /// + let style + + if (isCustomProperty(property) && isIE1x()) { + const cssCustomProperties = this.getCssCustomProperties() + style = cssCustomProperties[property] + } else { + style = window.getComputedStyle(element, null).getPropertyValue(property).replace(/^\s/, '') + } + + return style + } else { + return null + } + }, + hexToRgb(color) { + if (typeof color === 'undefined') { + throw new TypeError('Hex color is not defined') + } + + const hex = color.match(/^#(?:[0-9a-f]{3}){1,2}$/i) + + if (!hex) { + throw new Error(`${color} is not a valid hex color`) + } + + let r + let g + let b + + if (color.length === 7) { + r = parseInt(color.slice(1, 3), 16) + g = parseInt(color.slice(3, 5), 16) + b = parseInt(color.slice(5, 7), 16) + } else { + r = parseInt(color.slice(1, 2), 16) + g = parseInt(color.slice(2, 3), 16) + b = parseInt(color.slice(3, 5), 16) + } + + return `rgba(${r}, ${g}, ${b})` + }, + hexToRgba(color, opacity = 100) { + if (typeof color === 'undefined') { + throw new TypeError('Hex color is not defined') + } + + const hex = color.match(/^#(?:[0-9a-f]{3}){1,2}$/i) + + if (!hex) { + throw new Error(`${color} is not a valid hex color`) + } + + let r + let g + let b + + if (color.length === 7) { + r = parseInt(color.slice(1, 3), 16) + g = parseInt(color.slice(3, 5), 16) + b = parseInt(color.slice(5, 7), 16) + } else { + r = parseInt(color.slice(1, 2), 16) + g = parseInt(color.slice(2, 3), 16) + b = parseInt(color.slice(3, 5), 16) + } + + return `rgba(${r}, ${g}, ${b}, ${opacity / 100})` + }, + makeUid() { + const key = Math.random().toString(36).substr(2) + return 'uid-' + key + }, + omitByKeys(originalObject, keys) { + const newObj = {} + const objKeys = Object.keys(originalObject) + for (let i = 0; i < objKeys.length; i++) { + !keys.includes(objKeys[i]) && (newObj[objKeys[i]] = originalObject[objKeys[i]]) + } + return newObj + }, + pickByKeys(originalObject, keys) { + const newObj = {} + for (let i = 0; i < keys.length; i++) { + newObj[keys[i]] = originalObject[keys[i]] + } + return newObj + }, + rgbToHex(color) { + if (typeof color === 'undefined') { + throw new TypeError('Hex color is not defined') + } + + if (color === 'transparent') { + return '#00000000' + } + + const rgb = color.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i) + + if (!rgb) { + throw new Error(`${color} is not a valid rgb color`) + } + + const r = `0${parseInt(rgb[1], 10).toString(16)}` + const g = `0${parseInt(rgb[2], 10).toString(16)}` + const b = `0${parseInt(rgb[3], 10).toString(16)}` + + return `#${r.slice(-2)}${g.slice(-2)}${b.slice(-2)}` + } + } +} diff --git a/mixins/FadeInAnimation.js b/mixins/FadeInAnimation.js new file mode 100644 index 0000000..a8a1475 --- /dev/null +++ b/mixins/FadeInAnimation.js @@ -0,0 +1,25 @@ +export default { + mounted() { + $(document).ready(() => { + const elements = $('.fadeInAnim') + + Object.keys(elements).forEach((item, index) => { + if (index < elements.length) { + this.$gsap.fromTo( + elements[item], + { y: 20, opacity: 0 }, + { + y: 0, + opacity: 1, + duration: 0.5, + scrollTrigger: { + trigger: elements[item], + start: 'top 90%' + } + } + ) + } + }) + }) + } +} diff --git a/mixins/WS_Admin.js b/mixins/WS_Admin.js new file mode 100644 index 0000000..7978551 --- /dev/null +++ b/mixins/WS_Admin.js @@ -0,0 +1,154 @@ +import { io } from 'socket.io/client-dist/socket.io' +export default { + data() { + return { + adminNotificationOffset: 60 + } + }, + computed: { + userIsLoggedIn() { + return this.$auth.loggedIn + }, + adminWS: { + get() { + return this.$store.state.admin.adminWS + }, + set(val) { + this.$store.commit('front/set', ['adminWS', val]) + } + } + }, + methods: { + initAdminWS() { + this.adminWS = true + + /// /////////////////////////////////////////// connetct to ws server + const socket = io(`${this.$config.WebSocketURL}/admin`, { + reconnectionDelay: 20000, + reconnectionDelayMax: 20000, + auth: { + token: this.$auth.strategy.token.get() + } + }) + + /// /////////////////////////////////////////// connection error + + socket.on('connect_error', () => { + this.$notify({ + type: 'error', + title: 'خطا', + message: 'دریافت اعلانات ادمین با مشکل مواجه شد', + position: 'top-left', + offset: this.adminNotificationOffset + // duration: 0 + }) + }) + + /// /////////////////////////////////////////// events + socket.on('connect', () => { + // console.log('**************** You have access to admin notifications') + }) + + socket.on(`admin:allNotifs`, data => { + this.$store.commit('admin/set', ['unreadCuMsgs', data.unreadCuMsgs]) + this.$store.commit('admin/set', ['unreadTickets', data.unreadTickets]) + this.$store.commit('admin/set', ['newCustomers', data.newCustomers]) + this.$store.commit('admin/set', ['newRepresentations', data.newRepresentations]) + this.$store.commit('admin/set', ['newPieceRequests', data.newPieceRequests]) + this.$store.commit('admin/set', ['newOldPieceRequests', data.newOldPieceRequests]) + this.$store.commit('admin/set', ['newBufferRequests', data.newBufferRequests]) + this.$store.commit('admin/set', ['newGuaranteeReports', data.newGuaranteeReports]) + }) + + socket.on(`admin:notify`, data => { + if (data.type === 'updateUnreadCuMsgs') { + // update store + this.$store.commit('admin/set', ['unreadCuMsgs', data.unreadCuMsgs]) + + // update DOM + if (this.$route.name === 'admin-contact-us') { + this.$nuxt.refresh() + } + } + + if (data.type === 'updateUnreadTickets') { + // update store + this.$store.commit('admin/set', ['unreadTickets', data.unreadTickets]) + + // update DOM + if (this.$route.name === 'admin-tickets') { + this.$nuxt.refresh() + } + } + + if (data.type === 'newTicketMsg') { + if (this.$route.name === 'admin-tickets-ticket') { + this.$nuxt.refresh() + setTimeout(() => { + window.scrollTo(0, document.body.scrollHeight) + }, 500) + } + } + + if (data.type === 'updateNewCustomers') { + this.$store.commit('admin/set', ['newCustomers', data.newCustomers]) + } + + if (data.type === 'updateNewRepresentations') { + // update store + this.$store.commit('admin/set', ['newRepresentations', data.newRepresentations]) + + // update DOM + if (this.$route.name === 'admin-representations') { + this.$nuxt.refresh() + } + } + + if (data.type === 'updateNewPieceRequests') { + // update store + this.$store.commit('admin/set', ['newPieceRequests', data.newPieceRequests]) + + // update DOM + if (this.$route.name === 'admin-piece-requests') { + this.$nuxt.refresh() + } + } + + if (data.type === 'updateNewOldPieceRequests') { + // update store + this.$store.commit('admin/set', ['newOldPieceRequests', data.newOldPieceRequests]) + + // update DOM + if (this.$route.name === 'admin-op-requests') { + this.$nuxt.refresh() + } + } + + if (data.type === 'updateNewBufferRequests') { + // update store + this.$store.commit('admin/set', ['newBufferRequests', data.newBufferRequests]) + + // update DOM + if (this.$route.name === 'admin-buffer-requests') { + this.$nuxt.refresh() + } + } + + if (data.type === 'updateNewGuaranteeReports') { + // update store + this.$store.commit('admin/set', ['newGuaranteeReports', data.newGuaranteeReports]) + + // update DOM + if (this.$route.name === 'admin-quarantee-reports') { + this.$nuxt.refresh() + } + } + }) + } + }, + mounted() { + if (this.userIsLoggedIn && !this.adminWS) { + this.initAdminWS() + } + } +} diff --git a/mixins/WS_Agent.js b/mixins/WS_Agent.js new file mode 100644 index 0000000..c07f23d --- /dev/null +++ b/mixins/WS_Agent.js @@ -0,0 +1,106 @@ +import { io } from 'socket.io/client-dist/socket.io' +import Vue from 'vue' +export default { + data() { + return { + agentNotificationOffset: 60 + } + }, + computed: { + user() { + return this.$auth.user + }, + userIsLoggedIn() { + return this.$auth.loggedIn + }, + agentWS: { + get() { + return this.$store.state.front.agentWS + }, + set(val) { + this.$store.commit('front/set', ['agentWS', val]) + } + } + }, + methods: { + initAgentWS() { + this.agentWS = true + + /// /////////////////////////////////////////// connetct to ws server + const socket = io(`${this.$config.WebSocketURL}/agent`, { + reconnectionDelay: 20000, + reconnectionDelayMax: 20000, + auth: { + token: this.$auth.strategy.token.get() + } + }) + + Vue.prototype.$agentSocket = socket + + /// /////////////////////////////////////////// connection error + // eslint-disable-next-line node/handle-callback-err + socket.on('connect_error', err => {}) + + /// /////////////////////////////////////////// events + socket.on('connect', () => { + // console.log('**************** You have access to agent notifications') + socket.emit('agent:fetchAnnouncements') + }) + + socket.on(`agent:allNotifs`, data => { + this.$store.commit('front/set', ['agentInbox', data.agentInbox]) + }) + + socket.on(`agent:announcements`, data => { + this.$store.commit('front/set', ['newAgentAnnosCount', data.newAgentAnnosCount]) + this.$store.commit('front/set', ['agentAnnouncements', data.agentAnnouncements]) + }) + + socket.on(`agent:fetchNewAnnouncements`, data => { + socket.emit('agent:fetchAnnouncements') + }) + + socket.on(`agent:notify`, data => { + if (data.type === 'updateAgentInbox') { + // update store + this.$store.commit('front/set', ['agentInbox', data.agentInbox]) + + // update DOM + if (this.$route.name === 'account-agents-inbox') { + this.$nuxt.refresh() + } + } + + if (data.type === 'newAgentInbox') { + // sent ui notif + this.$notify({ + type: 'success', + title: 'توجه', + message: ' فرم گارانتی جدید در صندوق ورودی شما قرار گرفت', + position: 'top-left', + offset: this.agentNotificationOffset, + duration: 10 * 1000 + }) + } + }) + + socket.on(`agent:notifyAll`, data => { + if (data.type === 'fetchNewAnnouncements') { + socket.emit('agent:fetchAnnouncements') + this.$notify({ + type: 'success', + title: 'توجه', + message: 'پیام جدید در اطلاعیه های نمایندگان دارید', + position: 'top-left', + offset: this.userNotificationOffset + }) + } + }) + } + }, + mounted() { + if (this.userIsLoggedIn && this.user.isAgent && !this.agentWS) { + this.initAgentWS() + } + } +} diff --git a/mixins/WS_User.js b/mixins/WS_User.js new file mode 100644 index 0000000..bf4dbda --- /dev/null +++ b/mixins/WS_User.js @@ -0,0 +1,128 @@ +import { io } from 'socket.io/client-dist/socket.io' +import Vue from 'vue' +export default { + data() { + return { + userNotificationOffset: 60 + } + }, + computed: { + userIsLoggedIn() { + return this.$auth.loggedIn + }, + userWS: { + get() { + return this.$store.state.front.userWS + }, + set(val) { + this.$store.commit('front/set', ['userWS', val]) + } + } + }, + methods: { + initUserWS() { + this.userWS = true + + /// /////////////////////////////////////////// connetct to ws server + const socket = io(`${this.$config.WebSocketURL}/user`, { + reconnectionDelay: 20000, + reconnectionDelayMax: 20000, + auth: { + token: this.$auth.strategy.token.get() + } + }) + + Vue.prototype.$userSocket = socket + + /// /////////////////////////////////////////// connection error + // eslint-disable-next-line node/handle-callback-err + socket.on('connect_error', err => { + this.$notify({ + type: 'error', + title: 'خطا', + message: 'دریافت اعلانات با مشکل مواجه شد', + position: 'top-left', + offset: this.userNotificationOffset + // duration: 0 + }) + }) + + /// /////////////////////////////////////////// events + socket.on('connect', () => { + // console.log('**************** You have access to notifications') + socket.emit('user:fetchAnnouncements') + }) + + socket.on(`user:allNotifs`, data => { + this.$store.commit('front/set', ['unreadTickets', data.unreadTickets]) + this.$store.commit('front/set', ['draftsCount', data.draftsCount]) + }) + + socket.on(`user:announcements`, data => { + this.$store.commit('front/set', ['newUserAnnosCount', data.newUserAnnosCount]) + this.$store.commit('front/set', ['userAnnouncements', data.userAnnouncements]) + }) + + socket.on(`user:fetchNewAnnouncements`, data => { + socket.emit('user:fetchAnnouncements') + }) + + socket.on(`user:notify`, data => { + if (data.type === 'updateUnreadTickets') { + // update store + this.$store.commit('front/set', ['unreadTickets', data.unreadTickets]) + + // update DOM + if (this.$route.name === 'account-tickets') { + this.$nuxt.refresh() + } + } + + if (data.type === 'newTicketMsg') { + this.$notify({ + type: 'success', + title: 'توجه', + message: 'پیام دارید', + position: 'top-left', + offset: this.userNotificationOffset + }) + + if (this.$route.name === 'account-tickets-ticket') { + this.$nuxt.refresh() + setTimeout(() => { + window.scrollTo(0, document.body.scrollHeight) + }, 500) + } + } + + if (data.type === 'updateDraftsCount') { + // update store + this.$store.commit('front/set', ['draftsCount', data.draftsCount]) + + // update DOM + if (this.$route.name === 'account-drafts') { + this.$nuxt.refresh() + } + } + }) + + socket.on(`user:notifyAll`, data => { + if (data.type === 'fetchNewAnnouncements') { + socket.emit('user:fetchAnnouncements') + this.$notify({ + type: 'success', + title: 'توجه', + message: 'پیام جدید در اعلانات دارید', + position: 'top-left', + offset: this.userNotificationOffset + }) + } + }) + } + }, + mounted() { + if (this.userIsLoggedIn && this.$auth.hasScope('user') && !this.userWS) { + this.initUserWS() + } + } +} diff --git a/mixins/axiosUploadProcess.js b/mixins/axiosUploadProcess.js new file mode 100644 index 0000000..be682c2 --- /dev/null +++ b/mixins/axiosUploadProcess.js @@ -0,0 +1,24 @@ +export default { + data() { + return { + axiosConfig: { + onUploadProgress: progressEvent => { + if (progressEvent.total / 1024 > 100) { + const text = 'درحال آپلود ' + const uploadLayout = this.$loading({ + lock: true, + text, + spinner: 'el-icon-loading', + background: 'rgba(0, 0, 0, 0.7)' + }) + document.querySelector('.el-loading-text').innerText = + text + Math.floor((progressEvent.loaded / progressEvent.total) * 100) + '%' + if ((progressEvent.loaded / progressEvent.total) * 100 === 100) { + uploadLayout.close() + } + } + } + } + } + } +} diff --git a/mixins/demoAlert.js b/mixins/demoAlert.js new file mode 100644 index 0000000..a0d2f09 --- /dev/null +++ b/mixins/demoAlert.js @@ -0,0 +1,13 @@ +export default { + mounted() { + setTimeout(() => { + this.$alert( + 'کاربر گرامی سایت در حال حاضر نسخه آزمایشی میباشد و ممکن است در بعضی بخش ها ایراداتی داشته باشد که به زودی برطرف خواهند شد، با تشکر از صبوری شما.', + 'توجه', + { + type: 'warning' + } + ) + }, 2000) + } +} diff --git a/modules/WebSocketServer.js b/modules/WebSocketServer.js new file mode 100644 index 0000000..d041b6b --- /dev/null +++ b/modules/WebSocketServer.js @@ -0,0 +1,9 @@ +const wss = require('../server/WebSocket/wss') +const { isProduction } = require('../server/_env') + +export default function () { + this.nuxt.hook('listen', (server, { host, port }) => { + // attach WebSocket Server to Nuxt Server in production mode + if (isProduction) wss(server) + }) +} diff --git a/nuxt.config.js b/nuxt.config.js new file mode 100644 index 0000000..54dcb40 --- /dev/null +++ b/nuxt.config.js @@ -0,0 +1,188 @@ +import webpack from 'webpack' +import { + DevServerPort, + WebSocketURL, + NuxtPort, + NuxtHost, + isProduction, + // arpa + VerityUserGroupId, + VerityBusinessCategoryId, + VerityStockAreaId, + PanatechUserGroupId, + PanatechBusinessCategoryId, + PanatechStockAreaId +} from './server/_env' +import { serverMiddleware } from './server/index' + +const serverMiddlewareArray = [] +if (isProduction) serverMiddlewareArray.push(serverMiddleware) + +export default { + // Global page headers (https://go.nuxtjs.dev/config-head) + head: { + title: 'آسان سرویس', + htmlAttrs: { + lang: 'fa' + }, + meta: [ + { charset: 'utf-8' }, + { name: 'viewport', content: 'width=device-width, initial-scale=1' }, + { name: 'theme-color', content: '#065495' }, + { name: 'apple-mobile-web-app-status-bar-style', content: 'black-translucent' }, + { + hid: 'description', + name: 'description', + content: + 'آسان سرویس یکی از بزرگترین و فعالترین ارائه دهنده خدمات پس از فروش محصولات الکترونیکی به مدد شبکه گسترده و منسجم خدمات پس از فروش خود توانسته پاسخگوی مشتریان فهیم و گرانقدر باشد.' + } + ], + link: [ + { rel: 'icon', type: 'image/x-icon', href: '/assets/img/favicon.png' }, + { rel: 'stylesheet', type: 'text/css', href: '/assets/css/bootstrap-grid.css' }, + { rel: 'stylesheet', type: 'text/css', href: '/assets/css/reset-css.css' }, + { rel: 'stylesheet', type: 'text/css', href: '/assets/css/fontawesome/css/all.min.css' } + ], + script: [{ src: '/CustomSW.js', deafer: true, body: true }] + }, + loading: false, + pageTransition: 'page', + // Global CSS (https://go.nuxtjs.dev/config-css) + css: ['element-ui/lib/theme-chalk/index.css', '~/sass/main.scss'], + // Plugins to run before rendering page (https://go.nuxtjs.dev/config-plugins) + plugins: [ + '@/plugins/element-ui', + '@/plugins/ckEditor.client', + '@/plugins/gsap.client', + '@/plugins/core-ui.client', + '@/plugins/datePicker.client', + '@/plugins/ATextSplitterVuePlugin.client', + '@/plugins/ArpaError.client', + '@/plugins/jDate' + ], + + // Auto import components (https://go.nuxtjs.dev/config-components) + components: true, + + // Modules for dev and build (recommended) (https://go.nuxtjs.dev/config-modules) + buildModules: ['@nuxtjs/pwa'], + + // Modules (https://go.nuxtjs.dev/config-modules) + modules: [ + // https://go.nuxtjs.dev/axios + '@nuxtjs/axios', + '@nuxtjs/auth-next', + '~/modules/WebSocketServer.js' + ], + pwa: { + icon: { + fileName: 'bigIcon.png' + }, + manifest: { + name: 'خدمات گارانتی آسان سرویس', + short_name: 'AsanService App', + description: false, + lang: 'fa', + useWebmanifestExtension: false, + start_url: '/account' + }, + meta: { + nativeUI: true, + mobileAppIOS: true, + name: 'اسان سرویس', + theme_color: '#065495' + }, + workbox: { + cleanupOutdatedCaches: true + } + }, + // Axios module configuration (https://go.nuxtjs.dev/config-axios) + axios: { + baseURL: `http://127.0.0.1:${NuxtPort}`, + proxy: true + }, + proxy: { + '/api': { target: `http://127.0.0.1:${isProduction ? NuxtPort : DevServerPort}` } + }, + // Build Configuration (https://go.nuxtjs.dev/config-build) + build: { + transpile: [/^element-ui/], + plugins: [ + new webpack.ProvidePlugin({ + $: 'jquery', + jQuery: 'jquery', + 'window.jQuery': 'jquery' + }) + ], + splitChunks: { + layouts: true + } + }, + watchers: { + chokidar: { + ignored: /(server)/ + }, + webpack: { + ignored: /(server)/ + } + }, + router: { + linkActiveClass: 'active' + }, + server: { + host: NuxtHost, + port: NuxtPort + }, + serverMiddleware: serverMiddlewareArray, + auth: { + strategies: { + local: { + token: { + property: 'token', + required: true, + type: '' + }, + user: { + property: 'user', + autoFetch: true + }, + endpoints: { + login: { url: '/api/auth/login', method: 'post' }, + logout: { url: '/api/auth/logout', method: 'post' }, + user: { url: '/api/auth/user', method: 'get' } + } + } + }, + redirect: false + }, + publicRuntimeConfig: { + WebSocketURL: WebSocketURL(), + // verity + VerityUserGroupId, + VerityBusinessCategoryId, + VerityStockAreaId, + // panatech + PanatechUserGroupId, + PanatechBusinessCategoryId, + PanatechStockAreaId, + // footer variables + copyrightName: 'Danak Corporation', + copyrightURL: 'https://danakcorp.com/fa', + whatsApp: '', + instagram: '', + aparat: '', + supportTel: '021-67341', + supportEmail: 'info@asan-service.com', + andoridAppURL: '', + // contact page variables + address: 'تهران، میدان ولیعصر، خیابان نجات اللهی، خیابان جعفر شهری (سپند)، پلاک ۳۶، طبقه ۵', + contactTel: '021-67341', + contactEmail: 'info@asan-service.com', + // post receipt info (for asan service only) + recieverName: 'شرکت آسان سرویس (تهران)', + recieverAddress: 'تهران، میدان ولیعصر، خیابان نجات اللهی، خیابان جعفر شهری (سپند)، پلاک ۳۶، طبقه ۵', + recieverPostalCode: '1598993733', + recieverPhone: '02167341' + }, + privateRuntimeConfig: {} +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..4257ad5 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,15684 @@ +{ + "name": "asan-service", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@ampproject/remapping": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", + "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.0" + } + }, + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/compat-data": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz", + "integrity": "sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw==" + }, + "@babel/core": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.10.tgz", + "integrity": "sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.10", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.10", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.10", + "@babel/types": "^7.12.10", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@babel/eslint-parser": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.17.0.tgz", + "integrity": "sha512-PUEJ7ZBXbRkbq3qqM/jZ2nIuakUBqCYc7Qf52Lj7dlZ6zERnqisdHioL0l4wwQZnmskMeasqUNzLBFKs3nylXA==", + "dev": true, + "requires": { + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", + "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", + "requires": { + "@babel/types": "^7.12.11", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz", + "integrity": "sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ==", + "requires": { + "@babel/types": "^7.12.10" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", + "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", + "requires": { + "@babel/helper-explode-assignable-expression": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz", + "integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==", + "requires": { + "@babel/compat-data": "^7.12.5", + "@babel/helper-validator-option": "^7.12.1", + "browserslist": "^4.14.5", + "semver": "^5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", + "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-member-expression-to-functions": "^7.12.1", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.10.4" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz", + "integrity": "sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "regexpu-core": "^4.7.1" + } + }, + "@babel/helper-define-map": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", + "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/types": "^7.10.5", + "lodash": "^4.17.19" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true + }, + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", + "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-function-name": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz", + "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==", + "requires": { + "@babel/helper-get-function-arity": "^7.12.10", + "@babel/template": "^7.12.7", + "@babel/types": "^7.12.11" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", + "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", + "requires": { + "@babel/types": "^7.12.10" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", + "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", + "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", + "requires": { + "@babel/types": "^7.12.7" + } + }, + "@babel/helper-module-imports": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", + "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "requires": { + "@babel/types": "^7.12.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", + "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "requires": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-simple-access": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/helper-validator-identifier": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", + "lodash": "^4.17.19" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", + "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", + "requires": { + "@babel/types": "^7.12.10" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", + "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-wrap-function": "^7.10.4", + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-replace-supers": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz", + "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.12.7", + "@babel/helper-optimise-call-expression": "^7.12.10", + "@babel/traverse": "^7.12.10", + "@babel/types": "^7.12.11" + } + }, + "@babel/helper-simple-access": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz", + "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==", + "requires": { + "@babel/types": "^7.12.11" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" + }, + "@babel/helper-validator-option": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz", + "integrity": "sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw==" + }, + "@babel/helper-wrap-function": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", + "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helpers": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", + "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", + "requires": { + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.5", + "@babel/types": "^7.12.5" + } + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@babel/parser": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", + "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==" + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", + "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.12.1", + "@babel/plugin-syntax-async-generators": "^7.8.0" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", + "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.1.tgz", + "integrity": "sha512-knNIuusychgYN8fGJHONL0RbFxLGawhXOJNLBk75TniTsZZeA+wdkDuv6wp4lGwzQEKjZi6/WYtnb3udNPmQmQ==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-decorators": "^7.12.1" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", + "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", + "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", + "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.0" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", + "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", + "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz", + "integrity": "sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", + "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz", + "integrity": "sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", + "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", + "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", + "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.1.tgz", + "integrity": "sha512-ir9YW5daRrTYiy9UJ2TzdNIJEZu8KclVzDcfSt4iEmOtwQ4llPtWInNKJyKnVXp1vE4bbVd5S31M/im3mYMO1w==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", + "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", + "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", + "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", + "requires": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.12.1" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", + "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.11.tgz", + "integrity": "sha512-atR1Rxc3hM+VPg/NvNvfYw0npQEAcHuJ+MGZnFn6h3bo+1U3BWXMdFMlvVRApBTWKQMX7SOwRJZA5FBF/JQbvA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", + "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-define-map": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.10.4", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", + "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", + "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", + "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", + "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", + "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", + "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", + "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", + "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", + "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", + "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", + "requires": { + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", + "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", + "requires": { + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-simple-access": "^7.12.1", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", + "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", + "requires": { + "@babel/helper-hoist-variables": "^7.10.4", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-identifier": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", + "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", + "requires": { + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", + "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", + "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", + "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", + "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", + "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", + "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", + "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.10.tgz", + "integrity": "sha512-xOrUfzPxw7+WDm9igMgQCbO3cJKymX7dFdsgRr1eu9n3KjjyU4pptIXbXPseQDquw+W+RuJEJMHKHNsPNNm3CA==", + "requires": { + "@babel/helper-module-imports": "^7.12.5", + "@babel/helper-plugin-utils": "^7.10.4", + "semver": "^5.5.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", + "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", + "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz", + "integrity": "sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", + "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz", + "integrity": "sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", + "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", + "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/preset-env": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.11.tgz", + "integrity": "sha512-j8Tb+KKIXKYlDBQyIOy4BLxzv1NUOwlHfZ74rvW+Z0Gp4/cI2IMDPBWAgWceGcE7aep9oL/0K9mlzlMGxA8yNw==", + "requires": { + "@babel/compat-data": "^7.12.7", + "@babel/helper-compilation-targets": "^7.12.5", + "@babel/helper-module-imports": "^7.12.5", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-option": "^7.12.11", + "@babel/plugin-proposal-async-generator-functions": "^7.12.1", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-dynamic-import": "^7.12.1", + "@babel/plugin-proposal-export-namespace-from": "^7.12.1", + "@babel/plugin-proposal-json-strings": "^7.12.1", + "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-numeric-separator": "^7.12.7", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.12.1", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-async-to-generator": "^7.12.1", + "@babel/plugin-transform-block-scoped-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.11", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-computed-properties": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-dotall-regex": "^7.12.1", + "@babel/plugin-transform-duplicate-keys": "^7.12.1", + "@babel/plugin-transform-exponentiation-operator": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-function-name": "^7.12.1", + "@babel/plugin-transform-literals": "^7.12.1", + "@babel/plugin-transform-member-expression-literals": "^7.12.1", + "@babel/plugin-transform-modules-amd": "^7.12.1", + "@babel/plugin-transform-modules-commonjs": "^7.12.1", + "@babel/plugin-transform-modules-systemjs": "^7.12.1", + "@babel/plugin-transform-modules-umd": "^7.12.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", + "@babel/plugin-transform-new-target": "^7.12.1", + "@babel/plugin-transform-object-super": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-property-literals": "^7.12.1", + "@babel/plugin-transform-regenerator": "^7.12.1", + "@babel/plugin-transform-reserved-words": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/plugin-transform-sticky-regex": "^7.12.7", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/plugin-transform-typeof-symbol": "^7.12.10", + "@babel/plugin-transform-unicode-escapes": "^7.12.1", + "@babel/plugin-transform-unicode-regex": "^7.12.1", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.12.11", + "core-js-compat": "^3.8.0", + "semver": "^5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/runtime": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", + "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "requires": { + "regenerator-runtime": "^0.13.4" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + } + } + }, + "@babel/template": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", + "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7" + } + }, + "@babel/traverse": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.10.tgz", + "integrity": "sha512-6aEtf0IeRgbYWzta29lePeYSk+YAFIC3kyqESeft8o5CkFlYIMX+EQDDWEiAQ9LHOA3d0oHdgrSsID/CKqXJlg==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.10", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.12.10", + "@babel/types": "^7.12.10", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "@babel/types": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.11.tgz", + "integrity": "sha512-ukA9SQtKThINm++CX1CwmliMrE54J6nIYB5XTwL5f/CLFW9owfls+YSU8tVW15RQ2w+a3fSbPjC6HdQNtWZkiA==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "@coreui/coreui": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@coreui/coreui/-/coreui-3.4.0.tgz", + "integrity": "sha512-WqzockdWVkXUNmNwlqdu+AxM+9JoiWGe4rKaySu/dZme1NvVOn2ukjJlpTkssal8UKcSHyitzNixtkMCmUxE1A==" + }, + "@coreui/coreui-chartjs": { + "version": "2.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@coreui/coreui-chartjs/-/coreui-chartjs-2.0.0-beta.0.tgz", + "integrity": "sha512-Svua1A5YQNPbxcTMN/1TLiie/HJvT+iJ8VB3zPcy/c+ihJvFlIf7D0I5JcRL6LvQkZydq2xQiZ9/73Q+Z5BV6Q==", + "requires": { + "@coreui/coreui": "^3.0.0-beta.1", + "chart.js": "^2.8.0" + }, + "dependencies": { + "chart.js": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.4.tgz", + "integrity": "sha512-B07aAzxcrikjAPyV+01j7BmOpxtQETxTSlQ26BEYJ+3iUkbNKaOJ/nDbT6JjyqYxseM0ON12COHYdU2cTIjC7A==", + "requires": { + "chartjs-color": "^2.1.0", + "moment": "^2.10.2" + } + } + } + }, + "@coreui/icons": { + "version": "2.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@coreui/icons/-/icons-2.0.0-rc.0.tgz", + "integrity": "sha512-Bg+uQKzEhERRZk1qo8tcR3bjJQDzv6+uDjt5IpjFwqnnnHE4gZE6adZ7jyMYQjgIlelEaS8ZOlE1M7aKHDWZSA==" + }, + "@coreui/icons-vue": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@coreui/icons-vue/-/icons-vue-1.3.5.tgz", + "integrity": "sha512-GgvtUzyla/kfshaGVhqOxwWOHOCOmtACGD6SXilzw2Puz9LAX6Q9YCn20C1NIkCt8qtJ09jHyyucIZ9Eu+jv0A==", + "requires": { + "vue": "~2.6.11" + } + }, + "@coreui/utils": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@coreui/utils/-/utils-1.3.1.tgz", + "integrity": "sha512-WuWHX7bg89cJH34TWVsLe9RsxzBhTApj+X2Ja19xhjcpxt5Gv11Ozm+fwYt6DD7DgncTvpwYrMcnNlpp701UOg==" + }, + "@coreui/vue": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@coreui/vue/-/vue-3.2.7.tgz", + "integrity": "sha512-FGyjaa1Ic+slyXHNhWQFMaHfE9lvRc4I2vsh5/SBuKVJiEdonik4AGleejWAFuLAYV5Q1BDUPBD8G2PjhcLt7g==", + "requires": { + "@coreui/icons": "^2.0.0-rc.0", + "@coreui/icons-vue": "^1.3.5", + "@coreui/utils": "^1.3.1", + "@popperjs/core": "^2.6.0", + "lodash.clonedeep": "~4.5.0", + "perfect-scrollbar": "~1.5.0", + "tooltip.js": "~1.3.3", + "vue": "^2.6.12", + "vue-functional-data-merge": "~3.1.0" + } + }, + "@coreui/vue-chartjs": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@coreui/vue-chartjs/-/vue-chartjs-1.0.6.tgz", + "integrity": "sha512-x116yRGqBfxBxFFMhJXsY2MDbIBJWajSA24j2w4zyrShjshES2G6iBxi9zSbug0H+3ariYY+fyhv/0uFJ4G/Yg==", + "requires": { + "@coreui/coreui-chartjs": "2.0.0-beta.0", + "chart.js": "^2.9.3", + "vue": "^2.6.12" + }, + "dependencies": { + "chart.js": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.4.tgz", + "integrity": "sha512-B07aAzxcrikjAPyV+01j7BmOpxtQETxTSlQ26BEYJ+3iUkbNKaOJ/nDbT6JjyqYxseM0ON12COHYdU2cTIjC7A==", + "requires": { + "chartjs-color": "^2.1.0", + "moment": "^2.10.2" + } + } + } + }, + "@csstools/convert-colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", + "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==" + }, + "@eslint/eslintrc": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", + "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.1", + "globals": "^13.9.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "globals": { + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@jimp/bmp": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.16.1.tgz", + "integrity": "sha512-iwyNYQeBawrdg/f24x3pQ5rEx+/GwjZcCXd3Kgc+ZUd+Ivia7sIqBsOnDaMZdKCBPlfW364ekexnlOqyVa0NWg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "bmp-js": "^0.1.0" + } + }, + "@jimp/core": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.16.1.tgz", + "integrity": "sha512-la7kQia31V6kQ4q1kI/uLimu8FXx7imWVajDGtwUG8fzePLWDFJyZl0fdIXVCL1JW2nBcRHidUot6jvlRDi2+g==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "any-base": "^1.1.0", + "buffer": "^5.2.0", + "exif-parser": "^0.1.12", + "file-type": "^9.0.0", + "load-bmfont": "^1.3.1", + "mkdirp": "^0.5.1", + "phin": "^2.9.1", + "pixelmatch": "^4.0.2", + "tinycolor2": "^1.4.1" + }, + "dependencies": { + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + } + } + }, + "@jimp/custom": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.16.1.tgz", + "integrity": "sha512-DNUAHNSiUI/j9hmbatD6WN/EBIyeq4AO0frl5ETtt51VN1SvE4t4v83ZA/V6ikxEf3hxLju4tQ5Pc3zmZkN/3A==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/core": "^0.16.1" + } + }, + "@jimp/gif": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.16.1.tgz", + "integrity": "sha512-r/1+GzIW1D5zrP4tNrfW+3y4vqD935WBXSc8X/wm23QTY9aJO9Lw6PEdzpYCEY+SOklIFKaJYUAq/Nvgm/9ryw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "gifwrap": "^0.9.2", + "omggif": "^1.0.9" + } + }, + "@jimp/jpeg": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.16.1.tgz", + "integrity": "sha512-8352zrdlCCLFdZ/J+JjBslDvml+fS3Z8gttdml0We759PnnZGqrnPRhkOEOJbNUlE+dD4ckLeIe6NPxlS/7U+w==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "jpeg-js": "0.4.2" + } + }, + "@jimp/plugin-blit": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.16.1.tgz", + "integrity": "sha512-fKFNARm32RoLSokJ8WZXHHH2CGzz6ire2n1Jh6u+XQLhk9TweT1DcLHIXwQMh8oR12KgjbgsMGvrMVlVknmOAg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-blur": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.16.1.tgz", + "integrity": "sha512-1WhuLGGj9MypFKRcPvmW45ht7nXkOKu+lg3n2VBzIB7r4kKNVchuI59bXaCYQumOLEqVK7JdB4glaDAbCQCLyw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-circle": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.16.1.tgz", + "integrity": "sha512-JK7yi1CIU7/XL8hdahjcbGA3V7c+F+Iw+mhMQhLEi7Q0tCnZ69YJBTamMiNg3fWPVfMuvWJJKOBRVpwNTuaZRg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-color": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.16.1.tgz", + "integrity": "sha512-9yQttBAO5SEFj7S6nJK54f+1BnuBG4c28q+iyzm1JjtnehjqMg6Ljw4gCSDCvoCQ3jBSYHN66pmwTV74SU1B7A==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "tinycolor2": "^1.4.1" + } + }, + "@jimp/plugin-contain": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.16.1.tgz", + "integrity": "sha512-44F3dUIjBDHN+Ym/vEfg+jtjMjAqd2uw9nssN67/n4FdpuZUVs7E7wadKY1RRNuJO+WgcD5aDQcsvurXMETQTg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-cover": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.16.1.tgz", + "integrity": "sha512-YztWCIldBAVo0zxcQXR+a/uk3/TtYnpKU2CanOPJ7baIuDlWPsG+YE4xTsswZZc12H9Kl7CiziEbDtvF9kwA/Q==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-crop": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.16.1.tgz", + "integrity": "sha512-UQdva9oQzCVadkyo3T5Tv2CUZbf0klm2cD4cWMlASuTOYgaGaFHhT9st+kmfvXjKL8q3STkBu/zUPV6PbuV3ew==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-displace": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.16.1.tgz", + "integrity": "sha512-iVAWuz2+G6Heu8gVZksUz+4hQYpR4R0R/RtBzpWEl8ItBe7O6QjORAkhxzg+WdYLL2A/Yd4ekTpvK0/qW8hTVw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-dither": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.16.1.tgz", + "integrity": "sha512-tADKVd+HDC9EhJRUDwMvzBXPz4GLoU6s5P7xkVq46tskExYSptgj5713J5Thj3NMgH9Rsqu22jNg1H/7tr3V9Q==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-fisheye": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.16.1.tgz", + "integrity": "sha512-BWHnc5hVobviTyIRHhIy9VxI1ACf4CeSuCfURB6JZm87YuyvgQh5aX5UDKtOz/3haMHXBLP61ZBxlNpMD8CG4A==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-flip": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.16.1.tgz", + "integrity": "sha512-KdxTf0zErfZ8DyHkImDTnQBuHby+a5YFdoKI/G3GpBl3qxLBvC+PWkS2F/iN3H7wszP7/TKxTEvWL927pypT0w==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-gaussian": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.16.1.tgz", + "integrity": "sha512-u9n4wjskh3N1mSqketbL6tVcLU2S5TEaFPR40K6TDv4phPLZALi1Of7reUmYpVm8mBDHt1I6kGhuCJiWvzfGyg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-invert": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.16.1.tgz", + "integrity": "sha512-2DKuyVXANH8WDpW9NG+PYFbehzJfweZszFYyxcaewaPLN0GxvxVLOGOPP1NuUTcHkOdMFbE0nHDuB7f+sYF/2w==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-mask": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.16.1.tgz", + "integrity": "sha512-snfiqHlVuj4bSFS0v96vo2PpqCDMe4JB+O++sMo5jF5mvGcGL6AIeLo8cYqPNpdO6BZpBJ8MY5El0Veckhr39Q==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-normalize": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.16.1.tgz", + "integrity": "sha512-dOQfIOvGLKDKXPU8xXWzaUeB0nvkosHw6Xg1WhS1Z5Q0PazByhaxOQkSKgUryNN/H+X7UdbDvlyh/yHf3ITRaw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-print": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.16.1.tgz", + "integrity": "sha512-ceWgYN40jbN4cWRxixym+csyVymvrryuKBQ+zoIvN5iE6OyS+2d7Mn4zlNgumSczb9GGyZZESIgVcBDA1ezq0Q==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "load-bmfont": "^1.4.0" + } + }, + "@jimp/plugin-resize": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.16.1.tgz", + "integrity": "sha512-u4JBLdRI7dargC04p2Ha24kofQBk3vhaf0q8FwSYgnCRwxfvh2RxvhJZk9H7Q91JZp6wgjz/SjvEAYjGCEgAwQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-rotate": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.16.1.tgz", + "integrity": "sha512-ZUU415gDQ0VjYutmVgAYYxC9Og9ixu2jAGMCU54mSMfuIlmohYfwARQmI7h4QB84M76c9hVLdONWjuo+rip/zg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-scale": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.16.1.tgz", + "integrity": "sha512-jM2QlgThIDIc4rcyughD5O7sOYezxdafg/2Xtd1csfK3z6fba3asxDwthqPZAgitrLgiKBDp6XfzC07Y/CefUw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-shadow": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.16.1.tgz", + "integrity": "sha512-MeD2Is17oKzXLnsphAa1sDstTu6nxscugxAEk3ji0GV1FohCvpHBcec0nAq6/czg4WzqfDts+fcPfC79qWmqrA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-threshold": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.16.1.tgz", + "integrity": "sha512-iGW8U/wiCSR0+6syrPioVGoSzQFt4Z91SsCRbgNKTAk7D+XQv6OI78jvvYg4o0c2FOlwGhqz147HZV5utoSLxA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugins": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.16.1.tgz", + "integrity": "sha512-c+lCqa25b+4q6mJZSetlxhMoYuiltyS+ValLzdwK/47+aYsq+kcJNl+TuxIEKf59yr9+5rkbpsPkZHLF/V7FFA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/plugin-blit": "^0.16.1", + "@jimp/plugin-blur": "^0.16.1", + "@jimp/plugin-circle": "^0.16.1", + "@jimp/plugin-color": "^0.16.1", + "@jimp/plugin-contain": "^0.16.1", + "@jimp/plugin-cover": "^0.16.1", + "@jimp/plugin-crop": "^0.16.1", + "@jimp/plugin-displace": "^0.16.1", + "@jimp/plugin-dither": "^0.16.1", + "@jimp/plugin-fisheye": "^0.16.1", + "@jimp/plugin-flip": "^0.16.1", + "@jimp/plugin-gaussian": "^0.16.1", + "@jimp/plugin-invert": "^0.16.1", + "@jimp/plugin-mask": "^0.16.1", + "@jimp/plugin-normalize": "^0.16.1", + "@jimp/plugin-print": "^0.16.1", + "@jimp/plugin-resize": "^0.16.1", + "@jimp/plugin-rotate": "^0.16.1", + "@jimp/plugin-scale": "^0.16.1", + "@jimp/plugin-shadow": "^0.16.1", + "@jimp/plugin-threshold": "^0.16.1", + "timm": "^1.6.1" + } + }, + "@jimp/png": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.16.1.tgz", + "integrity": "sha512-iyWoCxEBTW0OUWWn6SveD4LePW89kO7ZOy5sCfYeDM/oTPLpR8iMIGvZpZUz1b8kvzFr27vPst4E5rJhGjwsdw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "pngjs": "^3.3.3" + } + }, + "@jimp/tiff": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.16.1.tgz", + "integrity": "sha512-3K3+xpJS79RmSkAvFMgqY5dhSB+/sxhwTFA9f4AVHUK0oKW+u6r52Z1L0tMXHnpbAdR9EJ+xaAl2D4x19XShkQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "utif": "^2.0.1" + } + }, + "@jimp/types": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.16.1.tgz", + "integrity": "sha512-g1w/+NfWqiVW4CaXSJyD28JQqZtm2eyKMWPhBBDCJN9nLCN12/Az0WFF3JUAktzdsEC2KRN2AqB1a2oMZBNgSQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/bmp": "^0.16.1", + "@jimp/gif": "^0.16.1", + "@jimp/jpeg": "^0.16.1", + "@jimp/png": "^0.16.1", + "@jimp/tiff": "^0.16.1", + "timm": "^1.6.1" + } + }, + "@jimp/utils": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.16.1.tgz", + "integrity": "sha512-8fULQjB0x4LzUSiSYG6ZtQl355sZjxbv8r9PPAuYHzS9sGiSHJQavNqK/nKnpDsVkU88/vRGcE7t3nMU0dEnVw==", + "requires": { + "@babel/runtime": "^7.7.2", + "regenerator-runtime": "^0.13.3" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + } + } + }, + "@jridgewell/resolve-uri": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", + "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", + "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "requires": { + "@nodelib/fs.stat": "2.0.3", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==" + }, + "@nodelib/fs.walk": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", + "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "requires": { + "@nodelib/fs.scandir": "2.1.3", + "fastq": "^1.6.0" + } + }, + "@nuxt/babel-preset-app": { + "version": "2.14.12", + "resolved": "https://registry.npmjs.org/@nuxt/babel-preset-app/-/babel-preset-app-2.14.12.tgz", + "integrity": "sha512-6qAW5i4F+nCRWyGBytJAEJ/P0yH9RpYmIqWwkzQd1GQ1EuO1Fuc9QoOmmzbs+3MrwW7HzpQ5jJtLDuzhQ+e5/w==", + "requires": { + "@babel/core": "^7.12.9", + "@babel/helper-compilation-targets": "^7.12.5", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-decorators": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-transform-runtime": "^7.12.1", + "@babel/preset-env": "^7.12.7", + "@babel/runtime": "^7.12.5", + "@vue/babel-preset-jsx": "^1.2.4", + "core-js": "^2.6.5" + }, + "dependencies": { + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" + } + } + }, + "@nuxt/builder": { + "version": "2.14.12", + "resolved": "https://registry.npmjs.org/@nuxt/builder/-/builder-2.14.12.tgz", + "integrity": "sha512-I25K6BEZVJv7p2bAJfNFAXXEaSF41DGV/QZBAXVb/gFjmhZABNYfvIkwHGnAv5n1JPHHi2Y1R3gsFM4fFXkxxw==", + "requires": { + "@nuxt/devalue": "^1.2.4", + "@nuxt/utils": "2.14.12", + "@nuxt/vue-app": "2.14.12", + "@nuxt/webpack": "2.14.12", + "chalk": "^3.0.0", + "chokidar": "^3.4.3", + "consola": "^2.15.0", + "fs-extra": "^8.1.0", + "glob": "^7.1.6", + "hash-sum": "^2.0.0", + "ignore": "^5.1.8", + "lodash": "^4.17.20", + "pify": "^4.0.1", + "semver": "^7.3.2", + "serialize-javascript": "^5.0.1", + "upath": "^2.0.1" + } + }, + "@nuxt/cli": { + "version": "2.14.12", + "resolved": "https://registry.npmjs.org/@nuxt/cli/-/cli-2.14.12.tgz", + "integrity": "sha512-YRWY1Gg0c3kcO9vg9/Ig9ZMzih5mhxsBTm5b7DCLAEIALBVcJJLamLDnY2C52YLUeMIcY5XCi0HkizvPIv9r2w==", + "requires": { + "@nuxt/config": "2.14.12", + "@nuxt/utils": "2.14.12", + "boxen": "^4.2.0", + "chalk": "^3.0.0", + "compression": "^1.7.4", + "connect": "^3.7.0", + "consola": "^2.15.0", + "crc": "^3.8.0", + "destr": "^1.0.1", + "esm": "^3.2.25", + "execa": "^3.4.0", + "exit": "^0.1.2", + "fs-extra": "^8.1.0", + "globby": "^11.0.1", + "hable": "^3.0.0", + "minimist": "^1.2.5", + "opener": "1.5.2", + "pretty-bytes": "^5.4.1", + "serve-static": "^1.14.1", + "std-env": "^2.2.1", + "upath": "^2.0.1", + "wrap-ansi": "^6.2.0" + } + }, + "@nuxt/components": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@nuxt/components/-/components-1.2.2.tgz", + "integrity": "sha512-AByrBPnV4mWwwf1tPaKLmtg6JBsNJACLuSnpJOpWGV6KjS5S8i6BTf8dqiPN0uGg6YeSQaeDWtnfILcoLp2GSw==", + "requires": { + "chalk": "^4.1.0", + "chokidar": "^3.4.3", + "glob": "^7.1.6", + "globby": "^11.0.1", + "lodash": "^4.17.20", + "semver": "^7.3.4", + "vue-template-compiler": "^2.6.12" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@nuxt/config": { + "version": "2.14.12", + "resolved": "https://registry.npmjs.org/@nuxt/config/-/config-2.14.12.tgz", + "integrity": "sha512-Ob861w1BjgI1IcpXRC14TKMpUSogGYX/BFn7q/0HkntYxSOQAkMaaUZ0/YEx6IR1fuZV2v+NB8M4IkyUrgW1YA==", + "requires": { + "@nuxt/ufo": "^0.5.0", + "@nuxt/utils": "2.14.12", + "consola": "^2.15.0", + "create-require": "^1.1.1", + "defu": "^2.0.4", + "destr": "^1.0.1", + "dotenv": "^8.2.0", + "esm": "^3.2.25", + "jiti": "^0.1.17", + "rc9": "^1.2.0", + "std-env": "^2.2.1" + }, + "dependencies": { + "defu": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-2.0.4.tgz", + "integrity": "sha512-G9pEH1UUMxShy6syWk01VQSRVs3CDWtlxtZu7A+NyqjxaCA4gSlWAKDBx6QiUEKezqS8+DUlXLI14Fp05Hmpwg==" + }, + "dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==" + } + } + }, + "@nuxt/core": { + "version": "2.14.12", + "resolved": "https://registry.npmjs.org/@nuxt/core/-/core-2.14.12.tgz", + "integrity": "sha512-J+ej2KYzB05jpGkEH5y+dHdOLEa/GKSJvJBWf5Zq0wgneOHUaxB+dnBNxIRO75eXHslHxE++y/PRIQ9ZlEdtOw==", + "requires": { + "@nuxt/config": "2.14.12", + "@nuxt/devalue": "^1.2.4", + "@nuxt/server": "2.14.12", + "@nuxt/utils": "2.14.12", + "@nuxt/vue-renderer": "2.14.12", + "consola": "^2.15.0", + "debug": "^4.2.0", + "esm": "^3.2.25", + "fs-extra": "^8.1.0", + "hable": "^3.0.0", + "hash-sum": "^2.0.0", + "std-env": "^2.2.1" + } + }, + "@nuxt/devalue": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@nuxt/devalue/-/devalue-1.2.4.tgz", + "integrity": "sha512-hS87c2HdSfTk1d+2KQx7mQpebyd2HjguvZu/UBy9LB+kUgT1qz2+Sj38FH32yJALK6Fv49ZfOZEwgcZ4rcNLjg==", + "requires": { + "consola": "^2.9.0" + } + }, + "@nuxt/friendly-errors-webpack-plugin": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@nuxt/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-2.5.0.tgz", + "integrity": "sha512-pUgPFmRL56/xuTCGN5rqgTfxvs1N/AYJw7q7tUHiZaBm3UyPgbIVPkadS9njwbFbPD2XcebVy7npQMMVwQJWfA==", + "requires": { + "chalk": "^2.3.2", + "consola": "^2.6.0", + "error-stack-parser": "^2.0.0", + "string-width": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@nuxt/generator": { + "version": "2.14.12", + "resolved": "https://registry.npmjs.org/@nuxt/generator/-/generator-2.14.12.tgz", + "integrity": "sha512-r7+QW3gk0nUGaaHW8zCQ9DaBAmr+LvEI7YOLFeTQdJUjwHBdw65ga36KpL3aC1HIRkb7LgWD6lbyGKJiASkpWQ==", + "requires": { + "@nuxt/utils": "2.14.12", + "chalk": "^3.0.0", + "consola": "^2.15.0", + "devalue": "^2.0.1", + "fs-extra": "^8.1.0", + "html-minifier": "^4.0.0", + "node-html-parser": "^2.0.0" + } + }, + "@nuxt/loading-screen": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nuxt/loading-screen/-/loading-screen-2.0.3.tgz", + "integrity": "sha512-ThvxxUpfTZezzz0gAgyG4vHCM7KDeA692EL7lKrZ/fU8JvXlG6LYngVLWAobexBsydtGkuZyKCwCVDnEGNL4jw==", + "requires": { + "connect": "^3.7.0", + "defu": "^2.0.4", + "get-port-please": "^1.0.0", + "node-res": "^5.0.1", + "serve-static": "^1.14.1" + }, + "dependencies": { + "defu": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-2.0.4.tgz", + "integrity": "sha512-G9pEH1UUMxShy6syWk01VQSRVs3CDWtlxtZu7A+NyqjxaCA4gSlWAKDBx6QiUEKezqS8+DUlXLI14Fp05Hmpwg==" + } + } + }, + "@nuxt/opencollective": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@nuxt/opencollective/-/opencollective-0.3.2.tgz", + "integrity": "sha512-XG7rUdXG9fcafu9KTDIYjJSkRO38EwjlKYIb5TQ/0WDbiTUTtUtgncMscKOYzfsY86kGs05pAuMOR+3Fi0aN3A==", + "requires": { + "chalk": "^4.1.0", + "consola": "^2.15.0", + "node-fetch": "^2.6.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@nuxt/server": { + "version": "2.14.12", + "resolved": "https://registry.npmjs.org/@nuxt/server/-/server-2.14.12.tgz", + "integrity": "sha512-HDOYgjv01zRSmLxPutrXb/F7kwisR+Vur0b2MEyxqBTTy7OcxiyQn1CcXozl/Q21iqZdcGpu/tRpCHO7B8bKOQ==", + "requires": { + "@nuxt/config": "2.14.12", + "@nuxt/utils": "2.14.12", + "@nuxt/vue-renderer": "2.14.12", + "@nuxtjs/youch": "^4.2.3", + "chalk": "^3.0.0", + "compression": "^1.7.4", + "connect": "^3.7.0", + "consola": "^2.15.0", + "etag": "^1.8.1", + "fresh": "^0.5.2", + "fs-extra": "^8.1.0", + "ip": "^1.1.5", + "launch-editor-middleware": "^2.2.1", + "on-headers": "^1.0.2", + "pify": "^4.0.1", + "serve-placeholder": "^1.2.2", + "serve-static": "^1.14.1", + "server-destroy": "^1.0.1" + } + }, + "@nuxt/telemetry": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@nuxt/telemetry/-/telemetry-1.3.0.tgz", + "integrity": "sha512-anAhyccoVyy/RetkqVsIxpJKdAu/GHyLl79ZtH0oOCbYcC85k8d+LC1S10WcqXyeqyUKifLxGR6yPqSPmQCCtg==", + "requires": { + "arg": "^5.0.0", + "chalk": "^4.1.0", + "ci-info": "^2.0.0", + "consola": "^2.15.0", + "create-require": "^1.1.0", + "defu": "^3.2.2", + "destr": "^1.0.1", + "dotenv": "^8.2.0", + "fs-extra": "^8.1.0", + "git-url-parse": "^11.4.0", + "inquirer": "^7.3.3", + "is-docker": "^2.1.1", + "jiti": "^0.1.16", + "nanoid": "^3.1.18", + "node-fetch": "^2.6.1", + "parse-git-config": "^3.0.0", + "rc9": "^1.2.0", + "std-env": "^2.2.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@nuxt/ufo": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@nuxt/ufo/-/ufo-0.5.2.tgz", + "integrity": "sha512-nnKFQ4NA5id5ekyQWHTdOfirIZRQzfEHMB9T0T6NZdWy4+3Nrw0GTBQ3J9Am0gg8kvqR0mMQTn1wK6ya3i/XmA==" + }, + "@nuxt/utils": { + "version": "2.14.12", + "resolved": "https://registry.npmjs.org/@nuxt/utils/-/utils-2.14.12.tgz", + "integrity": "sha512-XAy18aT2JOuyGnCuGImelOMwheLRo/qBkjqufa/TLIqnBtywdv2y7WP7c9uGTZrwh+O6KHYFeeZjnLqFI0r/xQ==", + "requires": { + "@nuxt/ufo": "^0.5.0", + "consola": "^2.15.0", + "fs-extra": "^8.1.0", + "hash-sum": "^2.0.0", + "proper-lockfile": "^4.1.1", + "semver": "^7.3.2", + "serialize-javascript": "^5.0.1", + "signal-exit": "^3.0.3", + "ua-parser-js": "^0.7.22" + } + }, + "@nuxt/vue-app": { + "version": "2.14.12", + "resolved": "https://registry.npmjs.org/@nuxt/vue-app/-/vue-app-2.14.12.tgz", + "integrity": "sha512-DwkXh8Djn2wi2qLetupDKpRIFmBDNZKrdT94xFieI5qY32EhLj9d/T80wZoZNZkPVqAKcwq24WktCSVRQ/uiOw==", + "requires": { + "@nuxt/ufo": "^0.5.0", + "node-fetch": "^2.6.1", + "unfetch": "^4.2.0", + "vue": "^2.6.12", + "vue-client-only": "^2.0.0", + "vue-meta": "^2.4.0", + "vue-no-ssr": "^1.1.1", + "vue-router": "^3.4.9", + "vue-template-compiler": "^2.6.12", + "vuex": "^3.6.0" + } + }, + "@nuxt/vue-renderer": { + "version": "2.14.12", + "resolved": "https://registry.npmjs.org/@nuxt/vue-renderer/-/vue-renderer-2.14.12.tgz", + "integrity": "sha512-bYqN1SIumi4EKWDaay6+V2NxcWS/IygOQekfuvNKYhQk97pzkBuXrBGgI6WRdSGLcEBFV0DpHxx66XWVXghL/g==", + "requires": { + "@nuxt/devalue": "^1.2.4", + "@nuxt/ufo": "^0.5.0", + "@nuxt/utils": "2.14.12", + "consola": "^2.15.0", + "fs-extra": "^8.1.0", + "lru-cache": "^5.1.1", + "vue": "^2.6.12", + "vue-meta": "^2.4.0", + "vue-server-renderer": "^2.6.12" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } + }, + "@nuxt/webpack": { + "version": "2.14.12", + "resolved": "https://registry.npmjs.org/@nuxt/webpack/-/webpack-2.14.12.tgz", + "integrity": "sha512-fZjs000HVkZ4zvVY5KVnRVBpOxAB4o+cx90rte9GZlU/GaJPZ5Go7KQmxnws0SaAqeN3MorURuu0JU05n3ko9g==", + "requires": { + "@babel/core": "^7.12.9", + "@nuxt/babel-preset-app": "2.14.12", + "@nuxt/friendly-errors-webpack-plugin": "^2.5.0", + "@nuxt/utils": "2.14.12", + "babel-loader": "^8.2.2", + "cache-loader": "^4.1.0", + "caniuse-lite": "^1.0.30001164", + "chalk": "^3.0.0", + "consola": "^2.15.0", + "create-require": "^1.1.1", + "css-loader": "^3.6.0", + "cssnano": "^4.1.10", + "eventsource-polyfill": "^0.9.6", + "extract-css-chunks-webpack-plugin": "^4.8.0", + "file-loader": "^4.3.0", + "glob": "^7.1.6", + "hard-source-webpack-plugin": "^0.13.1", + "hash-sum": "^2.0.0", + "html-webpack-plugin": "^4.5.0", + "memory-fs": "^0.4.1", + "optimize-css-assets-webpack-plugin": "^5.0.4", + "pify": "^4.0.1", + "postcss": "^7.0.32", + "postcss-import": "^12.0.1", + "postcss-import-resolver": "^2.0.0", + "postcss-loader": "^3.0.0", + "postcss-preset-env": "^6.7.0", + "postcss-url": "^8.0.0", + "semver": "^7.3.2", + "std-env": "^2.2.1", + "style-resources-loader": "^1.4.1", + "terser-webpack-plugin": "^2.3.5", + "thread-loader": "^2.1.3", + "time-fix-plugin": "^2.0.7", + "url-loader": "^2.3.0", + "vue-loader": "^15.9.5", + "webpack": "^4.44.2", + "webpack-bundle-analyzer": "^3.9.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-hot-middleware": "^2.25.0", + "webpack-node-externals": "^2.5.2", + "webpackbar": "^4.0.0" + } + }, + "@nuxtjs/auth": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@nuxtjs/auth/-/auth-4.9.1.tgz", + "integrity": "sha512-h5VZanq2+P47jq3t0EnsZv800cg/ufOPC6JqvcyeDFJM99p58jHSODAjDuePo3PrZxd8hovMk7zusU5lOHgjvQ==", + "requires": { + "@nuxtjs/axios": "^5.9.5", + "body-parser": "^1.19.0", + "consola": "^2.11.3", + "cookie": "^0.4.0", + "is-https": "^1.0.0", + "js-cookie": "^2.2.1", + "lodash": "^4.17.15", + "nanoid": "^2.1.11" + }, + "dependencies": { + "nanoid": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz", + "integrity": "sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==" + } + } + }, + "@nuxtjs/auth-next": { + "version": "5.0.0-1610375166.4d8db9d", + "resolved": "https://registry.npmjs.org/@nuxtjs/auth-next/-/auth-next-5.0.0-1610375166.4d8db9d.tgz", + "integrity": "sha512-EbdkVDdhBLk/iCB86cRvcZO2Zc43HO/ceBCGZF9dNdcfa7mcHnf65/oKAbWhEJz4ksuAG0wmZbVNfMpPsTbXrA==", + "requires": { + "@nuxtjs/axios": "^5.12.4", + "axios": "^0.21.0", + "body-parser": "^1.19.0", + "consola": "^2.15.0", + "cookie": "^0.4.1", + "defu": "^3.2.2", + "hasha": "^5.2.2", + "jwt-decode": "^3.1.2", + "requrl": "^3.0.2" + }, + "dependencies": { + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + } + } + }, + "@nuxtjs/axios": { + "version": "5.12.4", + "resolved": "https://registry.npmjs.org/@nuxtjs/axios/-/axios-5.12.4.tgz", + "integrity": "sha512-NKDIkrhtteOwC163Qlglw7YyjWHfLecpC/wXax4Z2tVVDlYnvSBa1KGoH9AnDY30lfvi0gjBKWCcTnUY8PaWDA==", + "requires": { + "@nuxtjs/proxy": "^2.1.0", + "axios": "^0.21.0", + "axios-retry": "^3.1.9", + "consola": "^2.15.0", + "defu": "^3.2.2" + } + }, + "@nuxtjs/eslint-config": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@nuxtjs/eslint-config/-/eslint-config-8.0.0.tgz", + "integrity": "sha512-NuZSiMdSCuBukwWgmNQuMYoA/jgL9SLfecOurUUQw/1QTcD0YKh0RxY4h9rNJB2jkfayzmZ+Y11hlOml40FVvw==", + "dev": true, + "requires": { + "eslint-config-standard": "^16.0.3", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jest": "^25.3.0", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^5.1.1", + "eslint-plugin-unicorn": "^39.0.0", + "eslint-plugin-vue": "^8.1.1" + } + }, + "@nuxtjs/eslint-module": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@nuxtjs/eslint-module/-/eslint-module-3.1.0.tgz", + "integrity": "sha512-9bK8AOJBflWmbQeL77SHIsgyGzhiW2b1BdwOtZ53Yyfa7Km3XMMVd8CtLA7z4+03eS+4TVQMxw62yRpJH5icZA==", + "dev": true, + "requires": { + "consola": "^2.15.3", + "defu": "^6.0.0", + "eslint-webpack-plugin": "^2.6.0" + }, + "dependencies": { + "consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "dev": true + }, + "defu": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.0.0.tgz", + "integrity": "sha512-t2MZGLf1V2rV4VBZbWIaXKdX/mUcYW0n2znQZoADBkGGxYL8EWqCuCZBmJPJ/Yy9fofJkyuuSuo5GSwo0XdEgw==", + "dev": true + } + } + }, + "@nuxtjs/proxy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@nuxtjs/proxy/-/proxy-2.1.0.tgz", + "integrity": "sha512-/qtoeqXgZ4Mg6LRg/gDUZQrFpOlOdHrol/vQYMnKu3aN3bP90UfOUB3QSDghUUK7OISAJ0xp8Ld78aHyCTcKCQ==", + "requires": { + "http-proxy-middleware": "^1.0.6" + } + }, + "@nuxtjs/pwa": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@nuxtjs/pwa/-/pwa-3.3.5.tgz", + "integrity": "sha512-8tTmW8DBspWxlJwTimOHTkwfkwPpL9wIcGmy75Gcmin+c9YtX2Ehxmhgt/TLFOC9XsLAqojqynw3/Agr/9OE1w==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "defu": "^3.2.2", + "execa": "^5.0.0", + "fs-extra": "^9.1.0", + "hasha": "^5.2.2", + "jimp-compact": "^0.16.1", + "lodash.template": "^4.5.0", + "serve-static": "^1.14.1", + "workbox-cdn": "^5.1.4" + }, + "dependencies": { + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "@nuxtjs/youch": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@nuxtjs/youch/-/youch-4.2.3.tgz", + "integrity": "sha512-XiTWdadTwtmL/IGkNqbVe+dOlT+IMvcBu7TvKI7plWhVQeBCQ9iKhk3jgvVWFyiwL2yHJDlEwOM5v9oVES5Xmw==", + "requires": { + "cookie": "^0.3.1", + "mustache": "^2.3.0", + "stack-trace": "0.0.10" + }, + "dependencies": { + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + } + } + }, + "@popperjs/core": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.6.0.tgz", + "integrity": "sha512-cPqjjzuFWNK3BSKLm0abspP0sp/IGOli4p5I5fKFAzdS8fvjdOwDCfZqAaIiXd9lPkOWi3SUUfZof3hEb7J/uw==" + }, + "@socket.io/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==" + }, + "@types/anymatch": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", + "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==" + }, + "@types/bson": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.3.tgz", + "integrity": "sha512-mVRvYnTOZJz3ccpxhr3wgxVmSeiYinW+zlzQz3SXWaJmD1DuL05Jeq7nKw3SnbKmbleW5qrLG5vdyWe/A9sXhw==", + "requires": { + "@types/node": "*" + } + }, + "@types/component-emitter": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==" + }, + "@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + }, + "@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" + }, + "@types/eslint": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz", + "integrity": "sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "@types/html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA==" + }, + "@types/http-proxy": { + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.4.tgz", + "integrity": "sha512-IrSHl2u6AWXduUaDLqYpt45tLVCtYv7o4Z0s1KghBCDgIIS9oW5K1H8mZG/A2CfeLdEa7rTd1ACOiHBc1EMT2Q==", + "requires": { + "@types/node": "*" + } + }, + "@types/json-schema": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", + "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==" + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "@types/mongodb": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.3.tgz", + "integrity": "sha512-6YNqGP1hk5bjUFaim+QoFFuI61WjHiHE1BNeB41TA00Xd2K7zG4lcWyLLq/XtIp36uMavvS5hoAUJ+1u/GcX2Q==", + "requires": { + "@types/bson": "*", + "@types/node": "*" + } + }, + "@types/node": { + "version": "14.14.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.14.tgz", + "integrity": "sha512-UHnOPWVWV1z+VV8k6L1HhG7UbGBgIdghqF3l9Ny9ApPghbjICXkUJSd/b9gOgQfjM1r+37cipdw/HJ3F6ICEnQ==" + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" + }, + "@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==" + }, + "@types/tapable": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.6.tgz", + "integrity": "sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA==" + }, + "@types/uglify-js": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.11.1.tgz", + "integrity": "sha512-7npvPKV+jINLu1SpSYVWG8KvyJBhBa8tmzMMdDoVc2pWUYHN8KIXlPJhjJ4LT97c4dXJA2SHL/q6ADbDriZN+Q==", + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "@types/webpack": { + "version": "4.41.25", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.25.tgz", + "integrity": "sha512-cr6kZ+4m9lp86ytQc1jPOJXgINQyz3kLLunZ57jznW+WIAL0JqZbGubQk4GlD42MuQL5JGOABrxdpqqWeovlVQ==", + "requires": { + "@types/anymatch": "*", + "@types/node": "*", + "@types/tapable": "*", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "@types/webpack-sources": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-2.1.0.tgz", + "integrity": "sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg==", + "requires": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + } + } + }, + "@typescript-eslint/experimental-utils": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.19.0.tgz", + "integrity": "sha512-F+X/TTzmb2UXbghY1LrNLNDjMcGZMhKzXuzvu0xD+YEB77EamLM7zMOLuz2kP5807IJRDLBoAFFPYa7HT62sYg==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "5.19.0" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.19.0.tgz", + "integrity": "sha512-Fz+VrjLmwq5fbQn5W7cIJZ066HxLMKvDEmf4eu1tZ8O956aoX45jAuBB76miAECMTODyUxH61AQM7q4/GOMQ5g==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.19.0", + "@typescript-eslint/visitor-keys": "5.19.0" + } + }, + "@typescript-eslint/types": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.19.0.tgz", + "integrity": "sha512-zR1ithF4Iyq1wLwkDcT+qFnhs8L5VUtjgac212ftiOP/ZZUOCuuF2DeGiZZGQXGoHA50OreZqLH5NjDcDqn34w==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.19.0.tgz", + "integrity": "sha512-dRPuD4ocXdaE1BM/dNR21elSEUPKaWgowCA0bqJ6YbYkvtrPVEvZ+zqcX5a8ECYn3q5iBSSUcBBD42ubaOp0Hw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.19.0", + "@typescript-eslint/visitor-keys": "5.19.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/utils": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.19.0.tgz", + "integrity": "sha512-ZuEckdupXpXamKvFz/Ql8YnePh2ZWcwz7APICzJL985Rp5C2AYcHO62oJzIqNhAMtMK6XvrlBTZeNG8n7gS3lQ==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.19.0", + "@typescript-eslint/types": "5.19.0", + "@typescript-eslint/typescript-estree": "5.19.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "dependencies": { + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.19.0.tgz", + "integrity": "sha512-Ym7zZoMDZcAKWsULi2s7UMLREdVQdScPQ/fKWMYefarCztWlHPFVJo8racf8R0Gc8FAEJ2eD4of8As1oFtnQlQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.19.0", + "eslint-visitor-keys": "^3.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + } + } + }, + "@vue/babel-helper-vue-jsx-merge-props": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz", + "integrity": "sha512-QOi5OW45e2R20VygMSNhyQHvpdUwQZqGPc748JLGCYEy+yp8fNFNdbNIGAgZmi9e+2JHPd6i6idRuqivyicIkA==" + }, + "@vue/babel-plugin-transform-vue-jsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.2.1.tgz", + "integrity": "sha512-HJuqwACYehQwh1fNT8f4kyzqlNMpBuUK4rSiSES5D4QsYncv5fxFsLyrxFPG2ksO7t5WP+Vgix6tt6yKClwPzA==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "html-tags": "^2.0.0", + "lodash.kebabcase": "^4.1.1", + "svg-tags": "^1.0.0" + } + }, + "@vue/babel-preset-jsx": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.2.4.tgz", + "integrity": "sha512-oRVnmN2a77bYDJzeGSt92AuHXbkIxbf/XXSE3klINnh9AXBmVS1DGa1f0d+dDYpLfsAKElMnqKTQfKn7obcL4w==", + "requires": { + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "@vue/babel-sugar-composition-api-inject-h": "^1.2.1", + "@vue/babel-sugar-composition-api-render-instance": "^1.2.4", + "@vue/babel-sugar-functional-vue": "^1.2.2", + "@vue/babel-sugar-inject-h": "^1.2.2", + "@vue/babel-sugar-v-model": "^1.2.3", + "@vue/babel-sugar-v-on": "^1.2.3" + } + }, + "@vue/babel-sugar-composition-api-inject-h": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.2.1.tgz", + "integrity": "sha512-4B3L5Z2G+7s+9Bwbf+zPIifkFNcKth7fQwekVbnOA3cr3Pq71q71goWr97sk4/yyzH8phfe5ODVzEjX7HU7ItQ==", + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-composition-api-render-instance": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.2.4.tgz", + "integrity": "sha512-joha4PZznQMsxQYXtR3MnTgCASC9u3zt9KfBxIeuI5g2gscpTsSKRDzWQt4aqNIpx6cv8On7/m6zmmovlNsG7Q==", + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-functional-vue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.2.2.tgz", + "integrity": "sha512-JvbgGn1bjCLByIAU1VOoepHQ1vFsroSA/QkzdiSs657V79q6OwEWLCQtQnEXD/rLTA8rRit4rMOhFpbjRFm82w==", + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-inject-h": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.2.2.tgz", + "integrity": "sha512-y8vTo00oRkzQTgufeotjCLPAvlhnpSkcHFEp60+LJUwygGcd5Chrpn5480AQp/thrxVm8m2ifAk0LyFel9oCnw==", + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-v-model": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.2.3.tgz", + "integrity": "sha512-A2jxx87mySr/ulAsSSyYE8un6SIH0NWHiLaCWpodPCVOlQVODCaSpiR4+IMsmBr73haG+oeCuSvMOM+ttWUqRQ==", + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "camelcase": "^5.0.0", + "html-tags": "^2.0.0", + "svg-tags": "^1.0.0" + } + }, + "@vue/babel-sugar-v-on": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.2.3.tgz", + "integrity": "sha512-kt12VJdz/37D3N3eglBywV8GStKNUhNrsxChXIV+o0MwVXORYuhDTHJRKPgLJRb/EY3vM2aRFQdxJBp9CLikjw==", + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "camelcase": "^5.0.0" + } + }, + "@vue/component-compiler-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.2.0.tgz", + "integrity": "sha512-lejBLa7xAMsfiZfNp7Kv51zOzifnb29FwdnMLa96z26kXErPFioSf9BMcePVIQ6/Gc6/mC0UrPpxAWIHyae0vw==", + "requires": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.14", + "postcss-selector-parser": "^6.0.2", + "prettier": "^1.18.2", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=" + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "prettier": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "optional": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + } + } + }, + "@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "requires": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" + }, + "@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" + }, + "@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "requires": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" + }, + "@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "requires": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" + }, + "@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "requires": { + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" + }, + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "requires": { + "type-fest": "^0.11.0" + } + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=" + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "any-base": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", + "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==" + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "arg": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.0.tgz", + "integrity": "sha512-4P8Zm2H+BRS+c/xX1LrHw0qKpEhdlZjLCgWy+d78T9vqa2Z2SiD2wMrYuWIAFy5IZUD7nnNXroRttz+0RzlrzQ==" + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "array-includes": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + }, + "dependencies": { + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "es-abstract": { + "version": "1.19.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.4.tgz", + "integrity": "sha512-flV8e5g9/xulChMG48Fygk1ptpo4lQRJ0eJYtxJFgi7pklLx7EFcOJ34jnvr8pbWlaFN/AT1cZpe0hiFel9Hqg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + } + } + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "dev": true + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + } + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "array.prototype.flat": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", + "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + }, + "dependencies": { + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "es-abstract": { + "version": "1.19.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.4.tgz", + "integrity": "sha512-flV8e5g9/xulChMG48Fygk1ptpo4lQRJ0eJYtxJFgi7pklLx7EFcOJ34jnvr8pbWlaFN/AT1cZpe0hiFel9Hqg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "dependencies": { + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + } + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "dev": true + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + } + } + }, + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "optional": true + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, + "async-validator": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.8.5.tgz", + "integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==", + "requires": { + "babel-runtime": "6.x" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "autoprefixer": { + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "axios": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.0.tgz", + "integrity": "sha512-fmkJBknJKoZwem3/IKSSLpkdNXZeBu5Q7GA/aRsr2btgrptmSCxi2oFjZHqGdK9DoTil9PIHlPIZw2EcRJXRvw==", + "requires": { + "follow-redirects": "^1.10.0" + } + }, + "axios-retry": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/axios-retry/-/axios-retry-3.1.9.tgz", + "integrity": "sha512-NFCoNIHq8lYkJa6ku4m+V1837TP6lCa7n79Iuf8/AqATAHYB0ISaAS1eyIenDOfHOLtym34W65Sjke2xjg2fsA==", + "requires": { + "is-retry-allowed": "^1.1.0" + } + }, + "babel-helper-vue-jsx-merge-props": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz", + "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==" + }, + "babel-loader": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", + "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" + } + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" + }, + "bfj": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz", + "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==", + "requires": { + "bluebird": "^3.5.5", + "check-types": "^8.0.3", + "hoopy": "^0.1.4", + "tryer": "^1.0.1" + } + }, + "big-integer": { + "version": "1.6.48", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", + "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==" + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + }, + "binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "requires": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + } + }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" + }, + "bl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", + "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + } + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "bmp-js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", + "integrity": "sha1-4Fpj95amwf8l9Hcex62twUjAcjM=" + }, + "bn.js": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", + "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==" + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.16.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.0.tgz", + "integrity": "sha512-/j6k8R0p3nxOC6kx5JGAxsnhc9ixaWJfYc+TNTzxg6+ARaESAvQGV7h0uNOB4t+pLQJZWzcrMxXOxjgsCj3dqQ==", + "requires": { + "caniuse-lite": "^1.0.30001165", + "colorette": "^1.2.1", + "electron-to-chromium": "^1.3.621", + "escalade": "^3.1.1", + "node-releases": "^1.1.67" + } + }, + "bson": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz", + "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==" + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=" + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==" + }, + "buffer-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-json/-/buffer-json-2.0.0.tgz", + "integrity": "sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=" + }, + "builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + }, + "busboy": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz", + "integrity": "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==", + "requires": { + "dicer": "0.3.0" + } + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "cacache": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz", + "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==", + "requires": { + "chownr": "^1.1.2", + "figgy-pudding": "^3.5.1", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "minipass": "^3.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "p-map": "^3.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^2.7.1", + "ssri": "^7.0.0", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cache-loader": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-4.1.0.tgz", + "integrity": "sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==", + "requires": { + "buffer-json": "^2.0.0", + "find-cache-dir": "^3.0.0", + "loader-utils": "^1.2.3", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "schema-utils": "^2.0.0" + } + }, + "call-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", + "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.0" + } + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" + }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + } + } + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001300", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001300.tgz", + "integrity": "sha512-cVjiJHWGcNlJi8TZVKNMnvMid3Z3TTdDHmLDzlOdIiZq138Exvo0G+G0wTdVYolxKb4AYwC+38pxodiInVtJSA==" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "requires": { + "traverse": ">=0.3.0 <0.4" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "chartjs-color": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.4.1.tgz", + "integrity": "sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==", + "requires": { + "chartjs-color-string": "^0.6.0", + "color-convert": "^1.9.3" + } + }, + "chartjs-color-string": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz", + "integrity": "sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A==", + "requires": { + "color-name": "^1.0.0" + } + }, + "check-types": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz", + "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==" + }, + "chokidar": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", + "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "ckeditor4-integrations-common": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ckeditor4-integrations-common/-/ckeditor4-integrations-common-0.1.0.tgz", + "integrity": "sha512-Z0fOFOyIavYti3jh8u7SQCFTHTJfCF6cceIkxwnrtpTczt5nI0PI16EnknKvUOPOsHVAnmvRi10IUM+2Rooslw==", + "requires": { + "load-script": "^1.0.0" + } + }, + "ckeditor4-vue": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ckeditor4-vue/-/ckeditor4-vue-1.2.0.tgz", + "integrity": "sha512-JvlBnfDHrhCOoUrQ/Lfug8o+ChOVaNdVE+AuQ9b69h5K8DRZQUAvJgF9/s2L6qngx0FDAKOCpCJhbcBTWlSdAQ==", + "requires": { + "ckeditor4-integrations-common": "^0.1.0", + "load-script": "^1.0.0" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "clean-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", + "integrity": "sha1-jffHquUf02h06PjQW5GAvBGj/tc=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + } + } + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", + "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.4" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", + "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "consola": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.0.tgz", + "integrity": "sha512-vlcSGgdYS26mPf7qNi+dCisbhiyDnrN1zaRbw3CSuc2wGOMEGGPsp46PdRG5gqXwgtJfjxDkxRNAgRPr1B77vQ==" + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "requires": { + "bluebird": "^3.1.1" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "core-js": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.1.tgz", + "integrity": "sha512-9Id2xHY1W7m8hCl8NkhQn5CufmF/WuR30BTRewvCXc1aZd3kMECwNZ69ndLbekKfakw9Rf2Xyc+QR6E7Gg+obg==" + }, + "core-js-compat": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.8.1.tgz", + "integrity": "sha512-a16TLmy9NVD1rkjUGbwuyWkiDoN0FDpAwrfLONvHFQx0D9k7J9y0srwMT8QP/Z6HE3MIFaVynEeYwZwPX1o5RQ==", + "requires": { + "browserslist": "^4.15.0", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "requires": { + "buffer": "^5.1.0" + }, + "dependencies": { + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + } + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "css-blank-pseudo": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", + "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", + "requires": { + "postcss": "^7.0.5" + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + } + }, + "css-has-pseudo": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", + "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", + "requires": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^5.0.0-rc.4" + }, + "dependencies": { + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "css-loader": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", + "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", + "requires": { + "camelcase": "^5.3.1", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.32", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.2", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "css-prefers-color-scheme": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", + "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", + "requires": { + "postcss": "^7.0.5" + } + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" + }, + "cssdb": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", + "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==" + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + }, + "cssnano": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", + "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.7", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "cssnano-preset-default": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", + "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.2", + "postcss-unique-selectors": "^4.0.1" + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=" + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=" + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "requires": { + "postcss": "^7.0.0" + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "requires": { + "css-tree": "^1.1.2" + }, + "dependencies": { + "css-tree": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.2.tgz", + "integrity": "sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ==", + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "cuint": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=" + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "dateformat": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.4.1.tgz", + "integrity": "sha512-3V9b/50QBYmFtd2c3cPOmdr2xNfnDphoBLxh/UVBoPIsylWkbUYGq3f4EQYuEaK7Mq4vcIpQCmOyJ37pqW/Uug==" + }, + "de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=" + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", + "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==" + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "defu": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/defu/-/defu-3.2.2.tgz", + "integrity": "sha512-8UWj5lNv7HD+kB0e9w77Z7TdQlbUYDVWqITLHNqFIn6khrNHv5WQo38Dcm1f6HeNyZf0U7UbPf6WeZDSdCzGDQ==" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "denque": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz", + "integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ==" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/destr/-/destr-1.0.1.tgz", + "integrity": "sha512-LnEdINrd1ydSqRiAGjMBVrG/G8hNruwE+fEKlkJA14MGPEoI9T7zJDwGpkMTyXT2ASE0ycnN2SYn4k6Q7j7lHg==" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=" + }, + "devalue": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-2.0.1.tgz", + "integrity": "sha512-I2TiqT5iWBEyB8GRfTDP0hiLZ0YeDJZ+upDxjBfOC2lebO5LezQMv7QvIUTzdb64jQyAKLf1AHADtGN+jw6v8Q==" + }, + "dicer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz", + "integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==", + "requires": { + "streamsearch": "0.1.2" + } + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "requires": { + "utila": "~0.4" + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", + "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==" + } + } + }, + "dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "requires": { + "is-obj": "^2.0.0" + } + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "requires": { + "readable-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==" + }, + "electron-to-chromium": { + "version": "1.3.629", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.629.tgz", + "integrity": "sha512-iSPPJtPvHrMAvYOt+9cdbDmTasPqwnwz4lkP8Dn200gDNUBQOLQ96xUsWXBwXslAo5XxdoXAoQQ3RAy4uao9IQ==" + }, + "element-ui": { + "version": "2.15.13", + "resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.15.13.tgz", + "integrity": "sha512-LJoatEYX6WV74FqXBss8Xfho9fh9rjDSzrDrTyREdGb1h1R3uRvmLh5jqp2JU137aj4/BgqA3K06RQpQBX33Bg==", + "requires": { + "async-validator": "~1.8.1", + "babel-helper-vue-jsx-merge-props": "^2.0.0", + "deepmerge": "^1.2.0", + "normalize-wheel": "^1.0.1", + "resize-observer-polyfill": "^1.5.0", + "throttle-debounce": "^1.0.1" + } + }, + "elliptic": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "engine.io": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.2.tgz", + "integrity": "sha512-v/7eGHxPvO2AWsksyx2PUsQvBafuvqs0jJJQ0FdmJG1b9qIvgSbqDRGwNhfk2XHaTTbTXiC4quRE8Q9nRjsrQQ==", + "requires": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.0", + "ws": "~8.2.3" + }, + "dependencies": { + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + }, + "ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==" + } + } + }, + "engine.io-parser": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", + "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", + "requires": { + "@socket.io/base64-arraybuffer": "~1.0.2" + } + }, + "enhanced-resolve": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", + "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==" + }, + "env-paths": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz", + "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==", + "dev": true + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", + "requires": { + "stackframe": "^1.1.1" + } + }, + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "eslint": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.13.0.tgz", + "integrity": "sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.2.1", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + }, + "dependencies": { + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + } + } + }, + "globals": { + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true + }, + "eslint-config-standard": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz", + "integrity": "sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==", + "dev": true + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "requires": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + } + } + }, + "eslint-module-utils": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", + "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "dev": true, + "requires": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "dependencies": { + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-plugin-import": { + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "es-abstract": { + "version": "1.19.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.4.tgz", + "integrity": "sha512-flV8e5g9/xulChMG48Fygk1ptpo4lQRJ0eJYtxJFgi7pklLx7EFcOJ34jnvr8pbWlaFN/AT1cZpe0hiFel9Hqg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "dependencies": { + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + } + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true + }, + "is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "dev": true + }, + "object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "requires": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + } + } + }, + "eslint-plugin-jest": { + "version": "25.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", + "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "^5.0.0" + } + }, + "eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dev": true, + "requires": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "dependencies": { + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "eslint-plugin-nuxt": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-nuxt/-/eslint-plugin-nuxt-3.2.0.tgz", + "integrity": "sha512-SWpmJALwagdrlMooajFX9IFxFEKdBxD+e4NFOVw9FGc22HQpNKdiljRHchS/3O5e2R7sPZYv8xdCtoordqIXFQ==", + "dev": true, + "requires": { + "eslint-plugin-vue": "^8.5.0", + "semver": "^7.3.5", + "vue-eslint-parser": "^8.3.0" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "eslint-plugin-promise": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-5.2.0.tgz", + "integrity": "sha512-SftLb1pUG01QYq2A/hGAWfDRXqYD82zE7j7TopDOyNdU+7SvvoXREls/+PRTY17vUXzXnZA/zfnyKgRH6x4JJw==", + "dev": true + }, + "eslint-plugin-unicorn": { + "version": "39.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-39.0.0.tgz", + "integrity": "sha512-fd5RK2FtYjGcIx3wra7csIE/wkkmBo22T1gZtRTsLr1Mb+KsFKJ+JOdSqhHXQUrI/JTs/Mon64cEYzTgSCbltw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.9", + "ci-info": "^3.2.0", + "clean-regexp": "^1.0.0", + "eslint-template-visitor": "^2.3.2", + "eslint-utils": "^3.0.0", + "esquery": "^1.4.0", + "indent-string": "4", + "is-builtin-module": "^3.1.0", + "lodash": "^4.17.21", + "pluralize": "^8.0.0", + "read-pkg-up": "^7.0.1", + "regexp-tree": "^0.1.23", + "safe-regex": "^2.1.1", + "semver": "^7.3.5", + "strip-indent": "^3.0.0" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true + }, + "ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", + "dev": true + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "safe-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz", + "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==", + "dev": true, + "requires": { + "regexp-tree": "~0.1.1" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "eslint-plugin-vue": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.6.0.tgz", + "integrity": "sha512-abXiF2J18n/7ZPy9foSlJyouKf54IqpKlNvNmzhM93N0zs3QUxZG/oBd3tVPOJTKg7SlhBUtPxugpqzNbgGpQQ==", + "dev": true, + "requires": { + "eslint-utils": "^3.0.0", + "natural-compare": "^1.4.0", + "semver": "^7.3.5", + "vue-eslint-parser": "^8.0.1" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-template-visitor": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/eslint-template-visitor/-/eslint-template-visitor-2.3.2.tgz", + "integrity": "sha512-3ydhqFpuV7x1M9EK52BPNj6V0Kwu0KKkcIAfpUhwHbR8ocRln/oUHgfxQupY8O1h4Qv/POHDumb/BwwNfxbtnA==", + "dev": true, + "requires": { + "@babel/core": "^7.12.16", + "@babel/eslint-parser": "^7.12.16", + "eslint-visitor-keys": "^2.0.0", + "esquery": "^1.3.1", + "multimap": "^1.1.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/compat-data": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz", + "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==", + "dev": true + }, + "@babel/core": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.9.tgz", + "integrity": "sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.9", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helpers": "^7.17.9", + "@babel/parser": "^7.17.9", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.9", + "@babel/types": "^7.17.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + } + }, + "@babel/generator": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz", + "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==", + "dev": true, + "requires": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz", + "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + } + }, + "@babel/helper-function-name": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", + "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", + "dev": true, + "requires": { + "@babel/template": "^7.16.7", + "@babel/types": "^7.17.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-transforms": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", + "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" + } + }, + "@babel/helper-simple-access": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", + "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", + "dev": true, + "requires": { + "@babel/types": "^7.17.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true + }, + "@babel/helpers": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", + "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", + "dev": true, + "requires": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.9", + "@babel/types": "^7.17.0" + } + }, + "@babel/highlight": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", + "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz", + "integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==", + "dev": true + }, + "@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/traverse": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.9.tgz", + "integrity": "sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.9", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.9", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "browserslist": { + "version": "4.20.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", + "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001317", + "electron-to-chromium": "^1.4.84", + "escalade": "^3.1.1", + "node-releases": "^2.0.2", + "picocolors": "^1.0.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001331", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001331.tgz", + "integrity": "sha512-Y1xk6paHpUXKP/P6YjQv1xqyTbgAP05ycHBcRdQjTcyXlWol868sJJPlmk5ylOekw2BrucWes5jk+LvVd7WZ5Q==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "electron-to-chromium": { + "version": "1.4.107", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.107.tgz", + "integrity": "sha512-Huen6taaVrUrSy8o7mGStByba8PfOWWluHNxSHGBrCgEdFVLtvdQDBr9LBCF9Uci8SYxh28QNNMO0oC17wbGAg==", + "dev": true + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true + }, + "node-releases": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.3.tgz", + "integrity": "sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + }, + "eslint-webpack-plugin": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-2.6.0.tgz", + "integrity": "sha512-V+LPY/T3kur5QO3u+1s34VDTcRxjXWPUGM4hlmTb5DwVD0OQz631yGTxJZf4SpAqAjdbBVe978S8BJeHpAdOhQ==", + "dev": true, + "requires": { + "@types/eslint": "^7.28.2", + "arrify": "^2.0.1", + "jest-worker": "^27.3.1", + "micromatch": "^4.0.4", + "normalize-path": "^3.0.0", + "schema-utils": "^3.1.1" + }, + "dependencies": { + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==" + }, + "espree": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", + "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", + "dev": true, + "requires": { + "acorn": "^8.7.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.3.0" + }, + "dependencies": { + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "events": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==" + }, + "eventsource-polyfill": { + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/eventsource-polyfill/-/eventsource-polyfill-0.9.6.tgz", + "integrity": "sha1-EODRh/ERsWfyj9q5GIQ859gY8Tw=" + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", + "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "exif-parser": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", + "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=" + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "express-fileupload": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/express-fileupload/-/express-fileupload-1.2.0.tgz", + "integrity": "sha512-oe4WpKcSppXnl5peornawWUa6tKmIc1/kJxMNRGJR1A0v4zyLL6VsFR6wZ8P2a4Iq3aGx8xae3Vlr+MOMQhFPw==", + "requires": { + "busboy": "^0.3.1" + } + }, + "express-validator": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/express-validator/-/express-validator-6.8.0.tgz", + "integrity": "sha512-zEHxjly2Rx0vzJOgWJBCTk1vNNwxqp0a8S8WtKaW912oTmnQGSdh/XuuNzkt+tRBgw66z9u+ah+Sv8SH5SJyUQ==", + "requires": { + "lodash": "^4.17.20", + "validator": "^13.5.1" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extract-css-chunks-webpack-plugin": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/extract-css-chunks-webpack-plugin/-/extract-css-chunks-webpack-plugin-4.9.0.tgz", + "integrity": "sha512-HNuNPCXRMqJDQ1OHAUehoY+0JVCnw9Y/H22FQzYVwo8Ulgew98AGDu0grnY5c7xwiXHjQa6yJ/1dxLCI/xqTyQ==", + "requires": { + "loader-utils": "^2.0.0", + "normalize-url": "1.9.1", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-glob": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastq": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.9.0.tgz", + "integrity": "sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==", + "requires": { + "reusify": "^1.0.4" + } + }, + "figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "file-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.3.0.tgz", + "integrity": "sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==", + "requires": { + "loader-utils": "^1.2.3", + "schema-utils": "^2.5.0" + } + }, + "file-type": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", + "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==" + }, + "filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "dev": true + }, + "flatten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", + "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==" + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "follow-redirects": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz", + "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==" + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-memo": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fs-memo/-/fs-memo-1.2.0.tgz", + "integrity": "sha512-YEexkCpL4j03jn5SxaMHqcO6IuWuqm8JFUYhyCep7Ao89JIYmB8xoKhK7zXXJ9cCaNXpyNH5L3QtAmoxjoHW2w==" + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "requires": { + "minipass": "^3.0.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "optional": true + }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "requires": { + "globule": "^1.0.0" + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz", + "integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-port-please": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-1.1.0.tgz", + "integrity": "sha512-C9adQpQ9uyboxURlYAVcqvKdnrZ0uIad6lAZzIr51G5shhUFcZUwl8rxY0B0hB6OJytBNzPB1Uj/S1CpP9aFzQ==", + "requires": { + "fs-memo": "^1.2.0" + } + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "dependencies": { + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + } + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "gifwrap": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.9.2.tgz", + "integrity": "sha512-fcIswrPaiCDAyO8xnWvHSZdWChjKXUanKKpAiWWJ/UTkEi/aYKn5+90e7DE820zbEaVR9CE2y4z9bzhQijZ0BA==", + "requires": { + "image-q": "^1.1.1", + "omggif": "^1.0.10" + } + }, + "git-config-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-config-path/-/git-config-path-2.0.0.tgz", + "integrity": "sha512-qc8h1KIQbJpp+241id3GuAtkdyJ+IK+LIVtkiFTRKRrmddDzs3SI9CvP1QYmWBFvm1I/PWRwj//of8bgAc0ltA==" + }, + "git-up": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-4.0.2.tgz", + "integrity": "sha512-kbuvus1dWQB2sSW4cbfTeGpCMd8ge9jx9RKnhXhuJ7tnvT+NIrTVfYZxjtflZddQYcmdOTlkAcjmx7bor+15AQ==", + "requires": { + "is-ssh": "^1.3.0", + "parse-url": "^5.0.0" + } + }, + "git-url-parse": { + "version": "11.4.3", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.4.3.tgz", + "integrity": "sha512-LZTTk0nqJnKN48YRtOpR8H5SEfp1oM2tls90NuZmBxN95PnCvmuXGzqQ4QmVirBgKx2KPYfPGteX3/raWjKenQ==", + "requires": { + "git-up": "^4.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "globule": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz", + "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==", + "dev": true, + "requires": { + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, + "gsap": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.5.1.tgz", + "integrity": "sha512-EMV0RSUKZNeTUzLKAizGlwxVOUyif3/g8I3S1aA/hf3gbqwBvmQ02x1RdTBQNQMOpHCVBv9y/vaHwfctoAg8zw==" + }, + "gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "requires": { + "duplexer": "^0.1.1", + "pify": "^4.0.1" + } + }, + "hable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hable/-/hable-3.0.0.tgz", + "integrity": "sha512-7+G0/2/COR8pwteYFqHIVYfQpuEiO2HXwJrhCBJVgrNrl9O5eaUoJVDGXUJX+0RpGncNVTuestexjk1afj01wQ==" + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "hard-source-webpack-plugin": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/hard-source-webpack-plugin/-/hard-source-webpack-plugin-0.13.1.tgz", + "integrity": "sha512-r9zf5Wq7IqJHdVAQsZ4OP+dcUSvoHqDMxJlIzaE2J0TZWn3UjMMrHqwDHR8Jr/pzPfG7XxSe36E7Y8QGNdtuAw==", + "requires": { + "chalk": "^2.4.1", + "find-cache-dir": "^2.0.0", + "graceful-fs": "^4.1.11", + "lodash": "^4.15.0", + "mkdirp": "^0.5.1", + "node-object-hash": "^1.2.0", + "parse-json": "^4.0.0", + "pkg-dir": "^3.0.0", + "rimraf": "^2.6.2", + "semver": "^5.6.0", + "tapable": "^1.0.0-beta.5", + "webpack-sources": "^1.0.1", + "write-json-file": "^2.3.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "^3.0.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + } + } + }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + } + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==" + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "requires": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + } + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==" + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" + }, + "html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==" + }, + "html-entities": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==" + }, + "html-minifier": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz", + "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==", + "requires": { + "camel-case": "^3.0.0", + "clean-css": "^4.2.1", + "commander": "^2.19.0", + "he": "^1.2.0", + "param-case": "^2.1.1", + "relateurl": "^0.2.7", + "uglify-js": "^3.5.1" + }, + "dependencies": { + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "requires": { + "lower-case": "^1.1.1" + } + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "requires": { + "no-case": "^2.2.0" + } + } + } + }, + "html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "requires": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + } + }, + "html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=" + }, + "html-webpack-plugin": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz", + "integrity": "sha512-MouoXEYSjTzCrjIxWwg8gxL5fE2X2WZJLmBYXlaJhQUH5K/b5OrqmV7T4dB7iu0xkmJ6JlUuV6fFVtnqbPopZw==", + "requires": { + "@types/html-minifier-terser": "^5.0.0", + "@types/tapable": "^1.0.5", + "@types/webpack": "^4.41.8", + "html-minifier-terser": "^5.0.1", + "loader-utils": "^1.2.3", + "lodash": "^4.17.15", + "pretty-error": "^2.1.1", + "tapable": "^1.1.3", + "util.promisify": "1.0.0" + }, + "dependencies": { + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + } + } + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + } + } + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.0.6.tgz", + "integrity": "sha512-NyL6ZB6cVni7pl+/IT2W0ni5ME00xR0sN27AQZZrpKn1b+qRh+mLbBxIq9Cq1oGfmTc7BUq4HB77mxwCaxAYNg==", + "requires": { + "@types/http-proxy": "^1.17.4", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "lodash": "^4.17.20", + "micromatch": "^4.0.2" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "requires": { + "postcss": "^7.0.14" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + }, + "image-q": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/image-q/-/image-q-1.1.1.tgz", + "integrity": "sha1-/IQJlmRGC5DKhi2TALa/u7+/gFY=" + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" + }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "requires": { + "import-from": "^2.1.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "requires": { + "resolve-from": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "dependencies": { + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + } + } + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=" + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "dependencies": { + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-builtin-module": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz", + "integrity": "sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==", + "dev": true, + "requires": { + "builtin-modules": "^3.0.0" + } + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==" + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" + }, + "is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==" + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-https/-/is-https-1.0.0.tgz", + "integrity": "sha512-1adLLwZT9XEXjzhQhZxd75uxf0l+xI9uTSFaZeSESjL3E1eXSPpO+u5RcgqtzeZ1KCaNvtEwZSTO2P4U5erVqQ==" + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" + }, + "is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + }, + "dependencies": { + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + } + } + }, + "is-ssh": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.2.tgz", + "integrity": "sha512-elEw0/0c2UscLrNG+OAorbP539E3rhliKPg+hDMWN9VwrDXfYK+4PBEykDPfxlYYtQvl84TascnQyobfQLHEhQ==", + "requires": { + "protocols": "^1.1.0" + } + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", + "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "requires": { + "html-comment-regex": "^1.1.0" + } + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + }, + "dependencies": { + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + } + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "jalaali-js": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/jalaali-js/-/jalaali-js-1.1.5.tgz", + "integrity": "sha512-eS+zDRtz2JcGnVPWeng53rzlKU8tX2RWbJ1cqu1+eZHPEh1QL5ydB+pXD4RCf/zE3eKDN2bLQEjY0u/WIewMVQ==" + }, + "jest-worker": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", + "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jimp": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.16.1.tgz", + "integrity": "sha512-+EKVxbR36Td7Hfd23wKGIeEyHbxShZDX6L8uJkgVW3ESA9GiTEPK08tG1XI2r/0w5Ch0HyJF5kPqF9K7EmGjaw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/custom": "^0.16.1", + "@jimp/plugins": "^0.16.1", + "@jimp/types": "^0.16.1", + "regenerator-runtime": "^0.13.3" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + } + } + }, + "jimp-compact": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/jimp-compact/-/jimp-compact-0.16.1.tgz", + "integrity": "sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==", + "dev": true + }, + "jiti": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-0.1.17.tgz", + "integrity": "sha512-IlUGuEHKA44dqJoSqpv1poIRyyi31ciEmpLlRZCmo9TasVSZhwfmaVUuQVs26EHuwYdx+NirOm41+wbykH/+9Q==" + }, + "jpeg-js": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.2.tgz", + "integrity": "sha512-+az2gi/hvex7eLTMTlbRLOhH6P6WFdk2ITI8HJsaH2VqYO0I594zXSYEP+tf4FW+8Cy68ScDXoAsQdyQanv3sw==" + }, + "jquery": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz", + "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg==" + }, + "js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", + "dev": true + }, + "js-cookie": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", + "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jszip": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.6.0.tgz", + "integrity": "sha512-jgnQoG9LKnWO3mnVNBnfhkh0QknICd1FGSrXcgrl67zioyJ4wgx25o9ZqwNtrROSflGBCGYnJfjrIyRIby1OoQ==", + "requires": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "jwt-decode": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", + "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==" + }, + "kareem": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", + "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==" + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "klona": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", + "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", + "dev": true + }, + "last-call-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", + "requires": { + "lodash": "^4.17.5", + "webpack-sources": "^1.1.0" + } + }, + "launch-editor": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.2.1.tgz", + "integrity": "sha512-On+V7K2uZK6wK7x691ycSUbLD/FyKKelArkbaAMSSJU8JmqmhwN2+mnJDNINuJWSrh2L0kDk+ZQtbC/gOWUwLw==", + "requires": { + "chalk": "^2.3.0", + "shell-quote": "^1.6.1" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "launch-editor-middleware": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.2.1.tgz", + "integrity": "sha512-s0UO2/gEGiCgei3/2UN3SMuUj1phjQN8lcpnvgLSz26fAzNWPQ6Nf/kF5IFClnfU2ehp6LrmKdMU/beveO+2jg==", + "requires": { + "launch-editor": "^2.2.1" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "requires": { + "immediate": "~3.0.5" + } + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=" + }, + "load-bmfont": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", + "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", + "requires": { + "buffer-equal": "0.0.1", + "mime": "^1.3.4", + "parse-bmfont-ascii": "^1.0.3", + "parse-bmfont-binary": "^1.0.5", + "parse-bmfont-xml": "^1.1.4", + "phin": "^2.9.1", + "xhr": "^2.0.1", + "xtend": "^4.0.0" + }, + "dependencies": { + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + } + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "dependencies": { + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "load-script": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz", + "integrity": "sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ=" + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=" + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, + "lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "requires": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "requires": { + "tslib": "^2.0.3" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "mime": { + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.7.tgz", + "integrity": "sha512-dhNd1uA2u397uQk3Nv5LM4lm93WYDUXFn3Fu291FJerns4jyTudqhIWe4W04YLy7Uk1tm1Ore04NpjRvQp/NPA==" + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "requires": { + "dom-walk": "^0.1.0" + } + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, + "moment-jalaali": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/moment-jalaali/-/moment-jalaali-0.9.2.tgz", + "integrity": "sha512-Z7dgu6NFnq9MhbAtwj0x7tHFXm+rzSu5Ju7Fc3RloqFQ/3zSJh8kuzxNdAp7cgMF/s/ydob+fAEJvQds/hz25g==", + "requires": { + "jalaali-js": "^1.1.0", + "moment": "^2.22.2", + "moment-timezone": "^0.5.21", + "rimraf": "^2.6.2" + } + }, + "moment-timezone": { + "version": "0.5.33", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz", + "integrity": "sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w==", + "requires": { + "moment": ">= 2.9.0" + } + }, + "mongodb": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.3.tgz", + "integrity": "sha512-rOZuR0QkodZiM+UbQE5kDsJykBqWi0CL4Ec2i1nrGrUI3KO11r6Fbxskqmq3JK2NH7aW4dcccBuUujAP0ERl5w==", + "requires": { + "bl": "^2.2.1", + "bson": "^1.1.4", + "denque": "^1.4.1", + "require_optional": "^1.0.1", + "safe-buffer": "^5.1.2", + "saslprep": "^1.0.0" + } + }, + "mongoose": { + "version": "5.11.8", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.11.8.tgz", + "integrity": "sha512-RRfrYLg7pyuyx7xu5hwadjIZZJB9W2jqIMkL1CkTmk/uOCX3MX2tl4BVIi2rJUtgMNwn6dy3wBD3soB8I9Nlog==", + "requires": { + "@types/mongodb": "^3.5.27", + "bson": "^1.1.4", + "kareem": "2.3.2", + "mongodb": "3.6.3", + "mongoose-legacy-pluralize": "1.0.2", + "mpath": "0.8.1", + "mquery": "3.2.3", + "ms": "2.1.2", + "regexp-clone": "1.0.0", + "safe-buffer": "5.2.1", + "sift": "7.0.1", + "sliced": "1.0.1" + } + }, + "mongoose-legacy-pluralize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", + "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" + }, + "mongoose-paginate-v2": { + "version": "1.3.13", + "resolved": "https://registry.npmjs.org/mongoose-paginate-v2/-/mongoose-paginate-v2-1.3.13.tgz", + "integrity": "sha512-ajMi2eLZ5auV/XVetELjTeSmBJfBsd5QZKW8WFgZP9mvJevLlMU7qLcushvS+545bo0nfKtjh/7zy3NhvPfI9Q==" + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "mpath": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.1.tgz", + "integrity": "sha512-norEinle9aFc05McBawVPwqgFZ7npkts9yu17ztIVLwPwO9rq0OTp89kGVTqvv5rNLMz96E5iWHpVORjI411vA==" + }, + "mquery": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.3.tgz", + "integrity": "sha512-cIfbP4TyMYX+SkaQ2MntD+F2XbqaBHUYWk3j+kqdDztPWok3tgyssOZxMHMtzbV1w9DaSlvEea0Iocuro41A4g==", + "requires": { + "bluebird": "3.5.1", + "debug": "3.1.0", + "regexp-clone": "^1.0.0", + "safe-buffer": "5.1.2", + "sliced": "1.0.1" + }, + "dependencies": { + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "multimap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multimap/-/multimap-1.1.0.tgz", + "integrity": "sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw==", + "dev": true + }, + "mustache": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.3.2.tgz", + "integrity": "sha512-KpMNwdQsYz3O/SBS1qJ/o3sqUJ5wSb8gb0pul8CO0S56b9Y2ALm8zCfsjPXsqGFfoNBkDwZuZIAjhsZI03gYVQ==" + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" + }, + "nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==" + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + }, + "node-gyp": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", + "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" + }, + "dependencies": { + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "node-html-parser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-2.0.0.tgz", + "integrity": "sha512-3wJdYSxiVIBxuiFm9UtfNWAlBw2P+Vb/RN1nqf40q2JeZDpcJ1HsrWuWV3j15SSJ25TvfnOoac2Q+uDU9iY0sw==", + "requires": { + "he": "1.2.0" + } + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "node-object-hash": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/node-object-hash/-/node-object-hash-1.4.2.tgz", + "integrity": "sha512-UdS4swXs85fCGWWf6t6DMGgpN/vnlKeSGEQ7hJcrs7PBFoxoKLmibc3QRb7fwiYsjdL7PX8iI/TMSlZ90dgHhQ==" + }, + "node-releases": { + "version": "1.1.67", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz", + "integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==" + }, + "node-res": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/node-res/-/node-res-5.0.1.tgz", + "integrity": "sha512-YOleO9c7MAqoHC+Ccu2vzvV1fL6Ku49gShq3PIMKWHRgrMSih3XcwL05NbLBi6oU2J471gTBfdpVVxwT6Pfhxg==", + "requires": { + "destroy": "^1.0.4", + "etag": "^1.8.1", + "mime-types": "^2.1.19", + "on-finished": "^2.3.0", + "vary": "^1.1.2" + } + }, + "node-sass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-5.0.0.tgz", + "integrity": "sha512-opNgmlu83ZCF792U281Ry7tak9IbVC+AKnXGovcQ8LG8wFaJv6cLnRlc6DIHlmNxWEexB5bZxi9SZ9JyUuOYjw==", + "dev": true, + "requires": { + "async-foreach": "^0.1.3", + "chalk": "^1.1.1", + "cross-spawn": "^7.0.3", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "lodash": "^4.17.15", + "meow": "^3.7.0", + "mkdirp": "^0.5.1", + "nan": "^2.13.2", + "node-gyp": "^7.1.0", + "npmlog": "^4.0.0", + "request": "^2.88.0", + "sass-graph": "2.2.5", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "nodemailer": { + "version": "6.4.17", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.4.17.tgz", + "integrity": "sha512-89ps+SBGpo0D4Bi5ZrxcrCiRFaMmkCt+gItMXQGzEtZVR3uAD3QAQIDoxTWnx3ky0Dwwy/dhFrQ+6NNGXpw/qQ==" + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" + }, + "normalize-wheel": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz", + "integrity": "sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA==" + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "requires": { + "path-key": "^3.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "requires": { + "boolbase": "~1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "nuxt": { + "version": "2.14.12", + "resolved": "https://registry.npmjs.org/nuxt/-/nuxt-2.14.12.tgz", + "integrity": "sha512-tfGz7s0ahL6mCGzzVEWpHgv+/hekNXgY1fX0SBB0dvJKjVHKAdoMxaoHBYhoCYdNL2GNiNQncHRipxiEtuCtOQ==", + "requires": { + "@nuxt/builder": "2.14.12", + "@nuxt/cli": "2.14.12", + "@nuxt/components": "^1.2.2", + "@nuxt/core": "2.14.12", + "@nuxt/generator": "2.14.12", + "@nuxt/loading-screen": "^2.0.3", + "@nuxt/opencollective": "^0.3.2", + "@nuxt/telemetry": "^1.3.0", + "@nuxt/webpack": "2.14.12" + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz", + "integrity": "sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz", + "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" + } + }, + "omggif": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", + "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==" + }, + "optimize-css-assets-webpack-plugin": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.4.tgz", + "integrity": "sha512-wqd6FdI2a5/FdoiCNNkEvLeA//lHHfG24Ln2Xm2qqdIk4aOlsR18jwpyOihqQ8849W3qu2DX8fOYxpvTMj+93A==", + "requires": { + "cssnano": "^4.1.10", + "last-call-webpack-plugin": "^3.0.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==" + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + } + } + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-bmfont-ascii": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", + "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=" + }, + "parse-bmfont-binary": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", + "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=" + }, + "parse-bmfont-xml": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", + "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", + "requires": { + "xml-parse-from-string": "^1.0.0", + "xml2js": "^0.4.5" + } + }, + "parse-git-config": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/parse-git-config/-/parse-git-config-3.0.0.tgz", + "integrity": "sha512-wXoQGL1D+2COYWCD35/xbiKma1Z15xvZL8cI25wvxzled58V51SJM04Urt/uznS900iQor7QO04SgdfT/XlbuA==", + "requires": { + "git-config-path": "^2.0.0", + "ini": "^1.3.5" + } + }, + "parse-headers": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", + "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==" + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse-path": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-4.0.2.tgz", + "integrity": "sha512-HSqVz6iuXSiL8C1ku5Gl1Z5cwDd9Wo0q8CoffdAghP6bz8pJa1tcMC+m4N+z6VAS8QdksnIGq1TB6EgR4vPR6w==", + "requires": { + "is-ssh": "^1.3.0", + "protocols": "^1.4.0" + } + }, + "parse-url": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-5.0.2.tgz", + "integrity": "sha512-Czj+GIit4cdWtxo3ISZCvLiUjErSo0iI3wJ+q9Oi3QuMYTI6OZu+7cewMWZ+C1YAnKhYTk6/TLuhIgCypLthPA==", + "requires": { + "is-ssh": "^1.3.0", + "normalize-url": "^3.3.0", + "parse-path": "^4.0.0", + "protocols": "^1.4.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "optional": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "pbkdf2": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "perfect-scrollbar": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/perfect-scrollbar/-/perfect-scrollbar-1.5.0.tgz", + "integrity": "sha512-NrNHJn5mUGupSiheBTy6x+6SXCFbLlm8fVZh9moIzw/LgqElN5q4ncR4pbCBCYuCJ8Kcl9mYM0NgDxvW+b4LxA==" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "phin": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", + "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pixelmatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", + "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", + "requires": { + "pngjs": "^3.0.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "requires": { + "find-up": "^4.0.0" + } + }, + "pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true + }, + "pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" + }, + "popper.js": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-attribute-case-insensitive": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz", + "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==", + "requires": { + "postcss": "^7.0.2", + "postcss-selector-parser": "^6.0.2" + } + }, + "postcss-calc": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "requires": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + } + }, + "postcss-color-functional-notation": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", + "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", + "requires": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-color-gray": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", + "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", + "requires": { + "@csstools/convert-colors": "^1.4.0", + "postcss": "^7.0.5", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-color-hex-alpha": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", + "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", + "requires": { + "postcss": "^7.0.14", + "postcss-values-parser": "^2.0.1" + } + }, + "postcss-color-mod-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", + "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", + "requires": { + "@csstools/convert-colors": "^1.4.0", + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-color-rebeccapurple": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", + "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", + "requires": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-custom-media": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", + "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", + "requires": { + "postcss": "^7.0.14" + } + }, + "postcss-custom-properties": { + "version": "8.0.11", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", + "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", + "requires": { + "postcss": "^7.0.17", + "postcss-values-parser": "^2.0.1" + } + }, + "postcss-custom-selectors": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", + "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", + "requires": { + "postcss": "^7.0.2", + "postcss-selector-parser": "^5.0.0-rc.3" + }, + "dependencies": { + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-dir-pseudo-class": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", + "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", + "requires": { + "postcss": "^7.0.2", + "postcss-selector-parser": "^5.0.0-rc.3" + }, + "dependencies": { + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-double-position-gradients": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", + "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", + "requires": { + "postcss": "^7.0.5", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-env-function": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", + "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", + "requires": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-focus-visible": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", + "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-focus-within": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", + "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-font-variant": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz", + "integrity": "sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-gap-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", + "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-image-set-function": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", + "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", + "requires": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-import": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz", + "integrity": "sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==", + "requires": { + "postcss": "^7.0.1", + "postcss-value-parser": "^3.2.3", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-import-resolver": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-import-resolver/-/postcss-import-resolver-2.0.0.tgz", + "integrity": "sha512-y001XYgGvVwgxyxw9J1a5kqM/vtmIQGzx34g0A0Oy44MFcy/ZboZw1hu/iN3VYFjSTRzbvd7zZJJz0Kh0AGkTw==", + "requires": { + "enhanced-resolve": "^4.1.1" + } + }, + "postcss-initial": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.2.tgz", + "integrity": "sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA==", + "requires": { + "lodash.template": "^4.5.0", + "postcss": "^7.0.2" + } + }, + "postcss-lab-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", + "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", + "requires": { + "@csstools/convert-colors": "^1.4.0", + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-load-config": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", + "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", + "requires": { + "cosmiconfig": "^5.0.0", + "import-cwd": "^2.0.0" + } + }, + "postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "requires": { + "loader-utils": "^1.1.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^1.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "postcss-logical": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", + "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-media-minmax": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", + "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "requires": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "requires": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "requires": { + "postcss": "^7.0.5" + } + }, + "postcss-modules-local-by-default": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "requires": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "requires": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" + } + }, + "postcss-modules-values": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", + "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "requires": { + "icss-utils": "^4.0.0", + "postcss": "^7.0.6" + } + }, + "postcss-nesting": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", + "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "requires": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-overflow-shorthand": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", + "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-page-break": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", + "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-place": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", + "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", + "requires": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + } + }, + "postcss-preset-env": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", + "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", + "requires": { + "autoprefixer": "^9.6.1", + "browserslist": "^4.6.4", + "caniuse-lite": "^1.0.30000981", + "css-blank-pseudo": "^0.1.4", + "css-has-pseudo": "^0.10.0", + "css-prefers-color-scheme": "^3.1.1", + "cssdb": "^4.4.0", + "postcss": "^7.0.17", + "postcss-attribute-case-insensitive": "^4.0.1", + "postcss-color-functional-notation": "^2.0.1", + "postcss-color-gray": "^5.0.0", + "postcss-color-hex-alpha": "^5.0.3", + "postcss-color-mod-function": "^3.0.3", + "postcss-color-rebeccapurple": "^4.0.1", + "postcss-custom-media": "^7.0.8", + "postcss-custom-properties": "^8.0.11", + "postcss-custom-selectors": "^5.1.2", + "postcss-dir-pseudo-class": "^5.0.0", + "postcss-double-position-gradients": "^1.0.0", + "postcss-env-function": "^2.0.2", + "postcss-focus-visible": "^4.0.0", + "postcss-focus-within": "^3.0.0", + "postcss-font-variant": "^4.0.0", + "postcss-gap-properties": "^2.0.0", + "postcss-image-set-function": "^3.0.1", + "postcss-initial": "^3.0.0", + "postcss-lab-function": "^2.0.1", + "postcss-logical": "^3.0.0", + "postcss-media-minmax": "^4.0.0", + "postcss-nesting": "^7.0.0", + "postcss-overflow-shorthand": "^2.0.0", + "postcss-page-break": "^2.0.0", + "postcss-place": "^4.0.1", + "postcss-pseudo-class-any-link": "^6.0.0", + "postcss-replace-overflow-wrap": "^3.0.0", + "postcss-selector-matches": "^4.0.0", + "postcss-selector-not": "^4.0.0" + } + }, + "postcss-pseudo-class-any-link": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", + "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", + "requires": { + "postcss": "^7.0.2", + "postcss-selector-parser": "^5.0.0-rc.3" + }, + "dependencies": { + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "requires": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-replace-overflow-wrap": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", + "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", + "requires": { + "postcss": "^7.0.2" + } + }, + "postcss-selector-matches": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", + "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", + "requires": { + "balanced-match": "^1.0.0", + "postcss": "^7.0.2" + } + }, + "postcss-selector-not": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz", + "integrity": "sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ==", + "requires": { + "balanced-match": "^1.0.0", + "postcss": "^7.0.2" + } + }, + "postcss-selector-parser": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", + "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", + "requires": { + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", + "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "requires": { + "is-svg": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + } + }, + "postcss-url": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-8.0.0.tgz", + "integrity": "sha512-E2cbOQ5aii2zNHh8F6fk1cxls7QVFZjLPSrqvmiza8OuXLzIpErij8BDS5Y3STPfJgpIMNCPEr8JlKQWEoozUw==", + "requires": { + "mime": "^2.3.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.0", + "postcss": "^7.0.2", + "xxhashjs": "^0.2.1" + } + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + }, + "postcss-values-parser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", + "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", + "requires": { + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "prettier": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", + "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", + "dev": true + }, + "pretty-bytes": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.4.1.tgz", + "integrity": "sha512-s1Iam6Gwz3JI5Hweaz4GoCD1WUNUIyzePFy5+Js2hjwGVt2Z79wNN+ZKOZ2vB6C+Xs6njyB84Z1IthQg8d9LxA==" + }, + "pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "requires": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" + }, + "proper-lockfile": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.1.tgz", + "integrity": "sha512-1w6rxXodisVpn7QYvLk706mzprPTAPCYAqxMvctmPN3ekuRk/kuGkGc82pangZiAt4R3lwSuUzheTTn0/Yb7Zg==", + "requires": { + "graceful-fs": "^4.1.11", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "protocols": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz", + "integrity": "sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==" + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "rc9": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-1.2.0.tgz", + "integrity": "sha512-/jknmhG0USFAx5uoKkAKhtG40sONds9RWhFHrP1UzJ3OvVfqFWOypSUpmsQD0fFwAV7YtzHhsn3QNasfAoxgcQ==", + "requires": { + "defu": "^2.0.4", + "destr": "^1.0.0", + "flat": "^5.0.0" + }, + "dependencies": { + "defu": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-2.0.4.tgz", + "integrity": "sha512-G9pEH1UUMxShy6syWk01VQSRVs3CDWtlxtZu7A+NyqjxaCA4gSlWAKDBx6QiUEKezqS8+DUlXLI14Fp05Hmpwg==" + } + } + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "requires": { + "pify": "^2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } + } + }, + "read-excel-file": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/read-excel-file/-/read-excel-file-5.2.2.tgz", + "integrity": "sha512-GRwsCcVRjdhxH4uQjS7j+BT+KnIvZsCP8iHE+UD5OZk0ISPEFddziEnqm8A0dalSKYQTNHdb7H2Wy3GUj3Ts5Q==", + "requires": { + "jszip": "^3.6.0", + "unzipper": "^0.10.11", + "xmldom": "^0.6.0" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "dependencies": { + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + } + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + }, + "dependencies": { + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + } + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp-clone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", + "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" + }, + "regexp-tree": { + "version": "0.1.24", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.24.tgz", + "integrity": "sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==", + "dev": true + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + } + }, + "regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" + }, + "regjsparser": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "optional": true + }, + "renderkid": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.4.tgz", + "integrity": "sha512-K2eXrSOJdq+HuKzlcjOlGoOarUu5SDguDEhE7+Ah4zuOWL40j8A/oHvLlLob9PSTNvVnBd+/q0Er1QfpEuem5g==", + "requires": { + "css-select": "^1.1.0", + "dom-converter": "^0.2", + "htmlparser2": "^3.3.0", + "lodash": "^4.17.20", + "strip-ansi": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "require_optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", + "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", + "requires": { + "resolve-from": "^2.0.0", + "semver": "^5.1.0" + }, + "dependencies": { + "resolve-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "requrl": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/requrl/-/requrl-3.0.2.tgz", + "integrity": "sha512-f3gjR6d8MhOpn46PP+DSJywbmxi95fxQm3coXBFwognjFLla9X6tr8BdNyaIKNOEkaRbRcm0/zYAqN19N1oyhg==" + }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "requires": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + }, + "run-parallel": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", + "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==" + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "requires": { + "aproba": "^1.1.1" + } + }, + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "requires": { + "sparse-bitfield": "^3.0.3" + } + }, + "sass-graph": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.5.tgz", + "integrity": "sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==", + "dev": true, + "requires": { + "glob": "^7.0.0", + "lodash": "^4.0.0", + "scss-tokenizer": "^0.2.3", + "yargs": "^13.3.2" + } + }, + "sass-loader": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.1.0.tgz", + "integrity": "sha512-ZCKAlczLBbFd3aGAhowpYEy69Te3Z68cg8bnHHl6WnSCvnKpbM6pQrz957HWMa8LKVuhnD9uMplmMAHwGQtHeg==", + "dev": true, + "requires": { + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "semver": "^7.3.2" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "dev": true, + "requires": { + "js-base64": "^2.1.8", + "source-map": "^0.4.2" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-placeholder": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/serve-placeholder/-/serve-placeholder-1.2.3.tgz", + "integrity": "sha512-DC7t66WeIrlVzVMzickfHIn1zHu7eMsVNiH0nkD/wCrijFQdvgyfH2zc5lkFf79EApUgRhZntkpKjfgLkn2i/Q==", + "requires": { + "defu": "^3.2.2" + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=" + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "sift": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz", + "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g==" + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "sliced": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", + "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "socket.io": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz", + "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==", + "requires": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.1.0", + "socket.io-adapter": "~2.3.3", + "socket.io-parser": "~4.0.4" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "requires": { + "ms": "2.1.2" + } + } + } + }, + "socket.io-adapter": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz", + "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==" + }, + "socket.io-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", + "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", + "requires": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + }, + "sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", + "optional": true, + "requires": { + "memory-pager": "^1.0.2" + } + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz", + "integrity": "sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==", + "requires": { + "figgy-pudding": "^3.5.1", + "minipass": "^3.1.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + }, + "stackframe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", + "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==" + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "std-env": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.2.1.tgz", + "integrity": "sha512-IjYQUinA3lg5re/YMlwlfhqNRTzMZMqE+pezevdcTaHceqx8ngEi1alX9nNCk9Sc81fy1fLDeQoaCzeiW1yBOQ==", + "requires": { + "ci-info": "^1.6.0" + } + }, + "stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, + "streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "string.prototype.trimend": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", + "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", + "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "style-resources-loader": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/style-resources-loader/-/style-resources-loader-1.4.1.tgz", + "integrity": "sha512-UaAoQXq20relw6B633z4QZDxDyW7gevTt1e0y3MZtzdZfnvB90UL658czAgNc609Y7Kn5ErdthK9bSVhnykBUA==", + "requires": { + "glob": "^7.1.6", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=" + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" + }, + "tar": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", + "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + } + } + }, + "term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==" + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "terser-webpack-plugin": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.8.tgz", + "integrity": "sha512-/fKw3R+hWyHfYx7Bv6oPqmk4HGQcrWLtV3X6ggvPuwPNHSnzvVV51z6OaaCOus4YLjutYGOz3pEpbhe6Up2s1w==", + "requires": { + "cacache": "^13.0.1", + "find-cache-dir": "^3.3.1", + "jest-worker": "^25.4.0", + "p-limit": "^2.3.0", + "schema-utils": "^2.6.6", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.6.12", + "webpack-sources": "^1.4.3" + }, + "dependencies": { + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "thread-loader": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-2.1.3.tgz", + "integrity": "sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg==", + "requires": { + "loader-runner": "^2.3.1", + "loader-utils": "^1.1.0", + "neo-async": "^2.6.0" + } + }, + "throttle-debounce": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-1.1.0.tgz", + "integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg==" + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "time-fix-plugin": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/time-fix-plugin/-/time-fix-plugin-2.0.7.tgz", + "integrity": "sha512-uVFet1LQToeUX0rTcSiYVYVoGuBpc8gP/2jnlUzuHMHe+gux6XLsNzxLUweabMwiUj5ejhoIMsUI55nVSEa/Vw==" + }, + "timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "requires": { + "setimmediate": "^1.0.4" + } + }, + "timm": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", + "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==" + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" + }, + "tinycolor2": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", + "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "tooltip.js": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tooltip.js/-/tooltip.js-1.3.3.tgz", + "integrity": "sha512-XWWuy/dBdF/F/YpRE955yqBZ4VdLfiTAUdOqoU+wJm6phJlMpEzl/iYHZ+qJswbeT9VG822bNfsETF9wzmoy5A==", + "requires": { + "popper.js": "^1.0.2" + } + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=" + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "dev": true, + "requires": { + "glob": "^7.1.2" + } + }, + "tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" + }, + "tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "tslib": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", + "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "ua-parser-js": { + "version": "0.7.23", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.23.tgz", + "integrity": "sha512-m4hvMLxgGHXG3O3fQVAyyAQpZzDOvwnhOTjYz5Xmr7r/+LpkNy3vJXdVRWgd1TkAb7NGROZuSy96CrlNVjA7KA==" + }, + "uglify-js": { + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.12.2.tgz", + "integrity": "sha512-rWYleAvfJPjduYCt+ELvzybNah/zIkRteGXIBO8X0lteRZPGladF61hFi8tU7qKTsF7u6DUQCtT9k00VlFOgkg==" + }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + } + } + }, + "unfetch": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", + "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==" + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" + }, + "unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + } + } + }, + "unzipper": { + "version": "0.10.11", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", + "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", + "requires": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + }, + "dependencies": { + "bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "upath": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==" + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" + }, + "uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + } + } + }, + "url-loader": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.3.0.tgz", + "integrity": "sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog==", + "requires": { + "loader-utils": "^1.2.3", + "mime": "^2.4.4", + "schema-utils": "^2.5.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, + "utif": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", + "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", + "requires": { + "pako": "^1.0.5" + } + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validator": { + "version": "13.5.2", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.5.2.tgz", + "integrity": "sha512-mD45p0rvHVBlY2Zuy3F3ESIe1h5X58GPfAtslBjY7EtTqGquZTj+VX/J4RnHWN8FKq0C9WRVt1oWAcytWRuYLQ==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" + }, + "vue": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.12.tgz", + "integrity": "sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg==" + }, + "vue-client-only": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vue-client-only/-/vue-client-only-2.0.0.tgz", + "integrity": "sha512-arhk1wtWAfLsJyxGMoEYhoBowM87/i6HLSG2LH/03Yog6i2d9JEN1peMP0Ceis+/n9DxdenGYZZTxbPPJyHciA==" + }, + "vue-eslint-parser": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz", + "integrity": "sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g==", + "dev": true, + "requires": { + "debug": "^4.3.2", + "eslint-scope": "^7.0.0", + "eslint-visitor-keys": "^3.1.0", + "espree": "^9.0.0", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.5" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "vue-functional-data-merge": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vue-functional-data-merge/-/vue-functional-data-merge-3.1.0.tgz", + "integrity": "sha512-leT4kdJVQyeZNY1kmnS1xiUlQ9z1B/kdBFCILIjYYQDqZgLqCLa0UhjSSeRX6c3mUe6U5qYeM8LrEqkHJ1B4LA==" + }, + "vue-hot-reload-api": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", + "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==" + }, + "vue-loader": { + "version": "15.9.6", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.6.tgz", + "integrity": "sha512-j0cqiLzwbeImIC6nVIby2o/ABAWhlppyL/m5oJ67R5MloP0hj/DtFgb0Zmq3J9CG7AJ+AXIvHVnJAPBvrLyuDg==", + "requires": { + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=" + } + } + }, + "vue-meta": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/vue-meta/-/vue-meta-2.4.0.tgz", + "integrity": "sha512-XEeZUmlVeODclAjCNpWDnjgw+t3WA6gdzs6ENoIAgwO1J1d5p1tezDhtteLUFwcaQaTtayRrsx7GL6oXp/m2Jw==", + "requires": { + "deepmerge": "^4.2.2" + }, + "dependencies": { + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + } + } + }, + "vue-no-ssr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vue-no-ssr/-/vue-no-ssr-1.1.1.tgz", + "integrity": "sha512-ZMjqRpWabMPqPc7gIrG0Nw6vRf1+itwf0Itft7LbMXs2g3Zs/NFmevjZGN1x7K3Q95GmIjWbQZTVerxiBxI+0g==" + }, + "vue-persian-datetime-picker": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/vue-persian-datetime-picker/-/vue-persian-datetime-picker-2.10.3.tgz", + "integrity": "sha512-rXd0MQmNUhxA0h81txYzT7NNVbEb2XAEzWJDvcH8CZzUrc0w4IF0qx+qgoJ/KpwPa+HykAjbIYV1rlg+5mueqQ==", + "requires": { + "moment-jalaali": "^0.9.2" + } + }, + "vue-router": { + "version": "3.4.9", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.4.9.tgz", + "integrity": "sha512-CGAKWN44RqXW06oC+u4mPgHLQQi2t6vLD/JbGRDAXm0YpMv0bgpKuU5bBd7AvMgfTz9kXVRIWKHqRwGEb8xFkA==" + }, + "vue-server-renderer": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/vue-server-renderer/-/vue-server-renderer-2.6.12.tgz", + "integrity": "sha512-3LODaOsnQx7iMFTBLjki8xSyOxhCtbZ+nQie0wWY4iOVeEtTg1a3YQAjd82WvKxrWHHTshjvLb7OXMc2/dYuxw==", + "requires": { + "chalk": "^1.1.3", + "hash-sum": "^1.0.2", + "he": "^1.1.0", + "lodash.template": "^4.5.0", + "lodash.uniq": "^4.5.0", + "resolve": "^1.2.0", + "serialize-javascript": "^3.1.0", + "source-map": "0.5.6" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=" + }, + "serialize-javascript": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz", + "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "vue-style-loader": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.2.tgz", + "integrity": "sha512-0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ==", + "requires": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=" + } + } + }, + "vue-template-compiler": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz", + "integrity": "sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg==", + "requires": { + "de-indent": "^1.0.2", + "he": "^1.1.0" + } + }, + "vue-template-es2015-compiler": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==" + }, + "vuex": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.6.0.tgz", + "integrity": "sha512-W74OO2vCJPs9/YjNjW8lLbj+jzT24waTo2KShI8jLvJW8OaIkgb3wuAMA7D+ZiUxDOx3ubwSZTaJBip9G8a3aQ==" + }, + "watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "requires": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.1" + } + }, + "watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "optional": true, + "requires": { + "chokidar": "^2.1.8" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "optional": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "optional": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "optional": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "optional": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "optional": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "optional": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "optional": true, + "requires": { + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "optional": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "optional": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "optional": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "optional": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "optional": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "optional": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "optional": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "optional": true + } + } + }, + "webpack": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", + "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.3.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "^3.0.0" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } + }, + "webpack-bundle-analyzer": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz", + "integrity": "sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA==", + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1", + "bfj": "^6.1.1", + "chalk": "^2.4.1", + "commander": "^2.18.0", + "ejs": "^2.6.1", + "express": "^4.16.3", + "filesize": "^3.6.1", + "gzip-size": "^5.0.0", + "lodash": "^4.17.19", + "mkdirp": "^0.5.1", + "opener": "^1.5.1", + "ws": "^6.0.0" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + } + } + }, + "webpack-dev-middleware": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + } + }, + "webpack-hot-middleware": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.0.tgz", + "integrity": "sha512-xs5dPOrGPCzuRXNi8F6rwhawWvQQkeli5Ro48PRuQh8pYPCPmNnltP9itiUPT4xI8oW+y0m59lyyeQk54s5VgA==", + "requires": { + "ansi-html": "0.0.7", + "html-entities": "^1.2.0", + "querystring": "^0.2.0", + "strip-ansi": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + } + }, + "webpack-node-externals": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-2.5.2.tgz", + "integrity": "sha512-aHdl/y2N7PW2Sx7K+r3AxpJO+aDMcYzMQd60Qxefq3+EwhewSbTBqNumOsCE1JsCUNoyfGj5465N0sSf6hc/5w==" + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "webpackbar": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-4.0.0.tgz", + "integrity": "sha512-k1qRoSL/3BVuINzngj09nIwreD8wxV4grcuhHTD8VJgUbGcy8lQSPqv+bM00B7F+PffwIsQ8ISd4mIwRbr23eQ==", + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^2.4.2", + "consola": "^2.10.0", + "figures": "^3.0.0", + "pretty-time": "^1.1.0", + "std-env": "^2.2.1", + "text-table": "^0.2.0", + "wrap-ansi": "^6.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "requires": { + "string-width": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "workbox-cdn": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-cdn/-/workbox-cdn-5.1.4.tgz", + "integrity": "sha512-04gM3mi8QGutokkSaA9xunVfjURnLbo9TTWyi8+pSDCEW5cD8u5GbJiliLK1vB9CShk/9OY1UDfW+XcmD+d6KQ==", + "dev": true + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "requires": { + "errno": "~0.1.7" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "write-json-file": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-2.3.0.tgz", + "integrity": "sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8=", + "requires": { + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "pify": "^3.0.0", + "sort-keys": "^2.0.0", + "write-file-atomic": "^2.0.0" + }, + "dependencies": { + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "requires": { + "is-plain-obj": "^1.0.0" + } + } + } + }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "requires": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "xml-parse-from-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", + "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=" + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + }, + "xmldom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.6.0.tgz", + "integrity": "sha512-iAcin401y58LckRZ0TkI4k0VSM1Qg0KGSc3i8rU+xrxe19A/BN1zHyVSJY7uoutVlaTSzYyk/v5AmkewAP7jtg==" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "xxhashjs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", + "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", + "requires": { + "cuint": "^0.2.2" + } + }, + "y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..adca044 --- /dev/null +++ b/package.json @@ -0,0 +1,60 @@ +{ + "name": "asan-service", + "version": "1.0.0", + "private": true, + "scripts": { + "nodemon": "nodemon --watch server --exec \"nuxt start\"", + "server": "nodemon --watch server --exec \"SET NODE_ENV=devServer&&node ./server/index.js\"", + "dev": "nuxt", + "start": "nuxt start", + "generate": "nuxt generate", + "build": "nuxt build", + "lint:js": "eslint --ext \".js,.vue\" .", + "lint:prettier": "prettier --check .", + "lint": "npm run lint:js && npm run lint:prettier", + "lintfix": "prettier --write --list-different . && npm run lint:js -- --fix" + }, + "dependencies": { + "@coreui/coreui": "^3.2.2", + "@coreui/icons": "^2.0.0-beta.5", + "@coreui/utils": "^1.3.1", + "@coreui/vue": "^3.1.2", + "@coreui/vue-chartjs": "^1.0.5", + "@nuxtjs/auth": "^4.9.1", + "@nuxtjs/auth-next": "5.0.0-1610375166.4d8db9d", + "@nuxtjs/axios": "^5.12.2", + "bcryptjs": "^2.4.3", + "ckeditor4-vue": "^1.2.0", + "core-js": "^3.6.5", + "dateformat": "^4.4.1", + "element-ui": "^2.15.13", + "express": "^4.17.1", + "express-fileupload": "^1.2.0", + "express-validator": "^6.8.0", + "gsap": "^3.5.1", + "jimp": "^0.16.1", + "jquery": "^3.5.1", + "jsonwebtoken": "^8.5.1", + "moment-jalaali": "^0.9.2", + "mongoose": "^5.11.8", + "mongoose-paginate-v2": "^1.3.13", + "nodemailer": "^6.4.17", + "nuxt": "^2.14.6", + "read-excel-file": "^5.2.2", + "socket.io": "^4.4.1", + "vue-persian-datetime-picker": "^2.10.3" + }, + "devDependencies": { + "@babel/eslint-parser": "^7.16.3", + "@nuxtjs/eslint-config": "^8.0.0", + "@nuxtjs/eslint-module": "^3.0.2", + "eslint": "^8.4.1", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-nuxt": "^3.1.0", + "eslint-plugin-vue": "^8.2.0", + "prettier": "^2.5.1", + "@nuxtjs/pwa": "^3.3.5", + "node-sass": "^5.0.0", + "sass-loader": "^10.1.0" + } +} diff --git a/pages/FAQ/index.vue b/pages/FAQ/index.vue new file mode 100644 index 0000000..66766bb --- /dev/null +++ b/pages/FAQ/index.vue @@ -0,0 +1,80 @@ + + + diff --git a/pages/about/index.vue b/pages/about/index.vue new file mode 100644 index 0000000..087a8d0 --- /dev/null +++ b/pages/about/index.vue @@ -0,0 +1,86 @@ + + + diff --git a/pages/account/addTicket/index.vue b/pages/account/addTicket/index.vue new file mode 100644 index 0000000..fd32a19 --- /dev/null +++ b/pages/account/addTicket/index.vue @@ -0,0 +1,140 @@ + + + diff --git a/pages/account/agents/announcements/index.vue b/pages/account/agents/announcements/index.vue new file mode 100644 index 0000000..cbb2e01 --- /dev/null +++ b/pages/account/agents/announcements/index.vue @@ -0,0 +1,39 @@ + + + diff --git a/pages/account/agents/buffer/_br.vue b/pages/account/agents/buffer/_br.vue new file mode 100644 index 0000000..5395341 --- /dev/null +++ b/pages/account/agents/buffer/_br.vue @@ -0,0 +1,297 @@ + + + diff --git a/pages/account/agents/buffer/index.vue b/pages/account/agents/buffer/index.vue new file mode 100644 index 0000000..88290f7 --- /dev/null +++ b/pages/account/agents/buffer/index.vue @@ -0,0 +1,232 @@ + + + diff --git a/pages/account/agents/edit-info/index.vue b/pages/account/agents/edit-info/index.vue new file mode 100644 index 0000000..9bb5fc1 --- /dev/null +++ b/pages/account/agents/edit-info/index.vue @@ -0,0 +1,53 @@ + + + diff --git a/pages/account/agents/file-upload/index.vue b/pages/account/agents/file-upload/index.vue new file mode 100644 index 0000000..16b0e34 --- /dev/null +++ b/pages/account/agents/file-upload/index.vue @@ -0,0 +1,81 @@ + + + diff --git a/pages/account/agents/guaranteeReports/_gr.vue b/pages/account/agents/guaranteeReports/_gr.vue new file mode 100644 index 0000000..0d2cc94 --- /dev/null +++ b/pages/account/agents/guaranteeReports/_gr.vue @@ -0,0 +1,341 @@ + + + diff --git a/pages/account/agents/guaranteeReports/index.vue b/pages/account/agents/guaranteeReports/index.vue new file mode 100644 index 0000000..3af3065 --- /dev/null +++ b/pages/account/agents/guaranteeReports/index.vue @@ -0,0 +1,220 @@ + + + diff --git a/pages/account/agents/inbox/index.vue b/pages/account/agents/inbox/index.vue new file mode 100644 index 0000000..59a6a61 --- /dev/null +++ b/pages/account/agents/inbox/index.vue @@ -0,0 +1,159 @@ + + + diff --git a/pages/account/agents/inbox/view/index.vue b/pages/account/agents/inbox/view/index.vue new file mode 100644 index 0000000..72aa4fb --- /dev/null +++ b/pages/account/agents/inbox/view/index.vue @@ -0,0 +1,340 @@ + + + diff --git a/pages/account/agents/ops/_op.vue b/pages/account/agents/ops/_op.vue new file mode 100644 index 0000000..8b02211 --- /dev/null +++ b/pages/account/agents/ops/_op.vue @@ -0,0 +1,312 @@ + + + diff --git a/pages/account/agents/ops/index.vue b/pages/account/agents/ops/index.vue new file mode 100644 index 0000000..01d52e0 --- /dev/null +++ b/pages/account/agents/ops/index.vue @@ -0,0 +1,230 @@ + + + diff --git a/pages/account/agents/pieces/_pr.vue b/pages/account/agents/pieces/_pr.vue new file mode 100644 index 0000000..2852471 --- /dev/null +++ b/pages/account/agents/pieces/_pr.vue @@ -0,0 +1,340 @@ + + + diff --git a/pages/account/agents/pieces/index.vue b/pages/account/agents/pieces/index.vue new file mode 100644 index 0000000..6728d34 --- /dev/null +++ b/pages/account/agents/pieces/index.vue @@ -0,0 +1,232 @@ + + + diff --git a/pages/account/agents/reports/index.vue b/pages/account/agents/reports/index.vue new file mode 100644 index 0000000..9faba73 --- /dev/null +++ b/pages/account/agents/reports/index.vue @@ -0,0 +1,1102 @@ + + + diff --git a/pages/account/announcements/index.vue b/pages/account/announcements/index.vue new file mode 100644 index 0000000..873ff83 --- /dev/null +++ b/pages/account/announcements/index.vue @@ -0,0 +1,39 @@ + + + diff --git a/pages/account/drafts/_draftID.vue b/pages/account/drafts/_draftID.vue new file mode 100644 index 0000000..9b7c275 --- /dev/null +++ b/pages/account/drafts/_draftID.vue @@ -0,0 +1,286 @@ + + + diff --git a/pages/account/drafts/index.vue b/pages/account/drafts/index.vue new file mode 100644 index 0000000..8ef49fa --- /dev/null +++ b/pages/account/drafts/index.vue @@ -0,0 +1,129 @@ + + + diff --git a/pages/account/guarantee/factor/index.vue b/pages/account/guarantee/factor/index.vue new file mode 100644 index 0000000..a83450f --- /dev/null +++ b/pages/account/guarantee/factor/index.vue @@ -0,0 +1,203 @@ + + + diff --git a/pages/account/guarantee/index.vue b/pages/account/guarantee/index.vue new file mode 100644 index 0000000..dc6a3b7 --- /dev/null +++ b/pages/account/guarantee/index.vue @@ -0,0 +1,191 @@ + + + diff --git a/pages/account/guarantee/paymentFactor/index.vue b/pages/account/guarantee/paymentFactor/index.vue new file mode 100644 index 0000000..bf00014 --- /dev/null +++ b/pages/account/guarantee/paymentFactor/index.vue @@ -0,0 +1,202 @@ + + + diff --git a/pages/account/guarantee/receipt/index.vue b/pages/account/guarantee/receipt/index.vue new file mode 100644 index 0000000..f448e25 --- /dev/null +++ b/pages/account/guarantee/receipt/index.vue @@ -0,0 +1,252 @@ + + + diff --git a/pages/account/guarantee/view/index.vue b/pages/account/guarantee/view/index.vue new file mode 100644 index 0000000..f5b9640 --- /dev/null +++ b/pages/account/guarantee/view/index.vue @@ -0,0 +1,240 @@ + + + diff --git a/pages/account/history/index.vue b/pages/account/history/index.vue new file mode 100644 index 0000000..5f0a8f5 --- /dev/null +++ b/pages/account/history/index.vue @@ -0,0 +1,121 @@ + + + diff --git a/pages/account/index.vue b/pages/account/index.vue new file mode 100644 index 0000000..0714263 --- /dev/null +++ b/pages/account/index.vue @@ -0,0 +1,15 @@ + + + diff --git a/pages/account/post/index.vue b/pages/account/post/index.vue new file mode 100644 index 0000000..d1b3732 --- /dev/null +++ b/pages/account/post/index.vue @@ -0,0 +1,121 @@ + + + diff --git a/pages/account/profile/index.vue b/pages/account/profile/index.vue new file mode 100644 index 0000000..63d2f27 --- /dev/null +++ b/pages/account/profile/index.vue @@ -0,0 +1,327 @@ + + + diff --git a/pages/account/survey/index.vue b/pages/account/survey/index.vue new file mode 100644 index 0000000..2525bd1 --- /dev/null +++ b/pages/account/survey/index.vue @@ -0,0 +1,104 @@ + + + diff --git a/pages/account/tickets/_ticket.vue b/pages/account/tickets/_ticket.vue new file mode 100644 index 0000000..0d91711 --- /dev/null +++ b/pages/account/tickets/_ticket.vue @@ -0,0 +1,110 @@ + + + diff --git a/pages/account/tickets/index.vue b/pages/account/tickets/index.vue new file mode 100644 index 0000000..919fe9e --- /dev/null +++ b/pages/account/tickets/index.vue @@ -0,0 +1,78 @@ + + + diff --git a/pages/account/verify/index.vue b/pages/account/verify/index.vue new file mode 100644 index 0000000..4309871 --- /dev/null +++ b/pages/account/verify/index.vue @@ -0,0 +1,204 @@ + + + diff --git a/pages/admin/add-tickets/index.vue b/pages/admin/add-tickets/index.vue new file mode 100644 index 0000000..72f2f8e --- /dev/null +++ b/pages/admin/add-tickets/index.vue @@ -0,0 +1,132 @@ + + + diff --git a/pages/admin/admins/_admin.vue b/pages/admin/admins/_admin.vue new file mode 100644 index 0000000..0e0cd02 --- /dev/null +++ b/pages/admin/admins/_admin.vue @@ -0,0 +1,274 @@ + + + diff --git a/pages/admin/admins/index.vue b/pages/admin/admins/index.vue new file mode 100644 index 0000000..3445bbd --- /dev/null +++ b/pages/admin/admins/index.vue @@ -0,0 +1,108 @@ + + + diff --git a/pages/admin/agentReports/index.vue b/pages/admin/agentReports/index.vue new file mode 100644 index 0000000..9f69168 --- /dev/null +++ b/pages/admin/agentReports/index.vue @@ -0,0 +1,1511 @@ + + + + + diff --git a/pages/admin/agentUpdate/index.vue b/pages/admin/agentUpdate/index.vue new file mode 100644 index 0000000..41b1e31 --- /dev/null +++ b/pages/admin/agentUpdate/index.vue @@ -0,0 +1,66 @@ + + + diff --git a/pages/admin/agents/_agent.vue b/pages/admin/agents/_agent.vue new file mode 100644 index 0000000..cd8048b --- /dev/null +++ b/pages/admin/agents/_agent.vue @@ -0,0 +1,621 @@ + + + diff --git a/pages/admin/agents/index.vue b/pages/admin/agents/index.vue new file mode 100644 index 0000000..2d6c554 --- /dev/null +++ b/pages/admin/agents/index.vue @@ -0,0 +1,194 @@ + + + diff --git a/pages/admin/agentsInbox/_tr.vue b/pages/admin/agentsInbox/_tr.vue new file mode 100644 index 0000000..2c126a3 --- /dev/null +++ b/pages/admin/agentsInbox/_tr.vue @@ -0,0 +1,199 @@ + + + diff --git a/pages/admin/agentsInbox/index.vue b/pages/admin/agentsInbox/index.vue new file mode 100644 index 0000000..255cede --- /dev/null +++ b/pages/admin/agentsInbox/index.vue @@ -0,0 +1,339 @@ + + + + + diff --git a/pages/admin/announcements/_item.vue b/pages/admin/announcements/_item.vue new file mode 100644 index 0000000..6ee20e5 --- /dev/null +++ b/pages/admin/announcements/_item.vue @@ -0,0 +1,226 @@ + + + + + diff --git a/pages/admin/announcements/index.vue b/pages/admin/announcements/index.vue new file mode 100644 index 0000000..0b82034 --- /dev/null +++ b/pages/admin/announcements/index.vue @@ -0,0 +1,151 @@ + + + diff --git a/pages/admin/buffer-requests/_brId.vue b/pages/admin/buffer-requests/_brId.vue new file mode 100644 index 0000000..1879b94 --- /dev/null +++ b/pages/admin/buffer-requests/_brId.vue @@ -0,0 +1,225 @@ + + + diff --git a/pages/admin/buffer-requests/index.vue b/pages/admin/buffer-requests/index.vue new file mode 100644 index 0000000..22220de --- /dev/null +++ b/pages/admin/buffer-requests/index.vue @@ -0,0 +1,219 @@ + + + + + diff --git a/pages/admin/contact-us/_message.vue b/pages/admin/contact-us/_message.vue new file mode 100644 index 0000000..cfaab19 --- /dev/null +++ b/pages/admin/contact-us/_message.vue @@ -0,0 +1,54 @@ + + + diff --git a/pages/admin/contact-us/index.vue b/pages/admin/contact-us/index.vue new file mode 100644 index 0000000..ce734b9 --- /dev/null +++ b/pages/admin/contact-us/index.vue @@ -0,0 +1,116 @@ + + + + + diff --git a/pages/admin/customers/_customer.vue b/pages/admin/customers/_customer.vue new file mode 100644 index 0000000..a9c55bd --- /dev/null +++ b/pages/admin/customers/_customer.vue @@ -0,0 +1,269 @@ + + + diff --git a/pages/admin/customers/index.vue b/pages/admin/customers/index.vue new file mode 100644 index 0000000..6f38430 --- /dev/null +++ b/pages/admin/customers/index.vue @@ -0,0 +1,194 @@ + + + + + diff --git a/pages/admin/download-categories/_item.vue b/pages/admin/download-categories/_item.vue new file mode 100644 index 0000000..83697e8 --- /dev/null +++ b/pages/admin/download-categories/_item.vue @@ -0,0 +1,90 @@ + + + diff --git a/pages/admin/download-categories/index.vue b/pages/admin/download-categories/index.vue new file mode 100644 index 0000000..eb42b1d --- /dev/null +++ b/pages/admin/download-categories/index.vue @@ -0,0 +1,104 @@ + + + diff --git a/pages/admin/download-categories/new.vue b/pages/admin/download-categories/new.vue new file mode 100644 index 0000000..d9261f8 --- /dev/null +++ b/pages/admin/download-categories/new.vue @@ -0,0 +1,79 @@ + + + diff --git a/pages/admin/downloads/_page/_item.vue b/pages/admin/downloads/_page/_item.vue new file mode 100644 index 0000000..b640760 --- /dev/null +++ b/pages/admin/downloads/_page/_item.vue @@ -0,0 +1,370 @@ + + + + + diff --git a/pages/admin/downloads/_page/index.vue b/pages/admin/downloads/_page/index.vue new file mode 100644 index 0000000..57a6aa4 --- /dev/null +++ b/pages/admin/downloads/_page/index.vue @@ -0,0 +1,139 @@ + + + diff --git a/pages/admin/downloads/new.vue b/pages/admin/downloads/new.vue new file mode 100644 index 0000000..e9a7243 --- /dev/null +++ b/pages/admin/downloads/new.vue @@ -0,0 +1,186 @@ + + + diff --git a/pages/admin/faq/_item.vue b/pages/admin/faq/_item.vue new file mode 100644 index 0000000..3fa8b25 --- /dev/null +++ b/pages/admin/faq/_item.vue @@ -0,0 +1,93 @@ + + + diff --git a/pages/admin/faq/index.vue b/pages/admin/faq/index.vue new file mode 100644 index 0000000..e0b6fa2 --- /dev/null +++ b/pages/admin/faq/index.vue @@ -0,0 +1,97 @@ + + + diff --git a/pages/admin/faq/new.vue b/pages/admin/faq/new.vue new file mode 100644 index 0000000..aff0b4d --- /dev/null +++ b/pages/admin/faq/new.vue @@ -0,0 +1,87 @@ + + + diff --git a/pages/admin/guarantee-reports/_grId.vue b/pages/admin/guarantee-reports/_grId.vue new file mode 100644 index 0000000..a3728db --- /dev/null +++ b/pages/admin/guarantee-reports/_grId.vue @@ -0,0 +1,117 @@ + + + diff --git a/pages/admin/guarantee-reports/index.vue b/pages/admin/guarantee-reports/index.vue new file mode 100644 index 0000000..d0f7403 --- /dev/null +++ b/pages/admin/guarantee-reports/index.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/pages/admin/help/index.vue b/pages/admin/help/index.vue new file mode 100644 index 0000000..8015215 --- /dev/null +++ b/pages/admin/help/index.vue @@ -0,0 +1,102 @@ + + + diff --git a/pages/admin/index.vue b/pages/admin/index.vue new file mode 100644 index 0000000..9613fb1 --- /dev/null +++ b/pages/admin/index.vue @@ -0,0 +1,34 @@ + + + diff --git a/pages/admin/learning/_page/_item.vue b/pages/admin/learning/_page/_item.vue new file mode 100644 index 0000000..8adf6d7 --- /dev/null +++ b/pages/admin/learning/_page/_item.vue @@ -0,0 +1,191 @@ + + + diff --git a/pages/admin/learning/_page/index.vue b/pages/admin/learning/_page/index.vue new file mode 100644 index 0000000..c12b3a8 --- /dev/null +++ b/pages/admin/learning/_page/index.vue @@ -0,0 +1,127 @@ + + + diff --git a/pages/admin/learning/new.vue b/pages/admin/learning/new.vue new file mode 100644 index 0000000..be51f3e --- /dev/null +++ b/pages/admin/learning/new.vue @@ -0,0 +1,175 @@ + + + diff --git a/pages/admin/lottery/_lottery.vue b/pages/admin/lottery/_lottery.vue new file mode 100644 index 0000000..e657a4c --- /dev/null +++ b/pages/admin/lottery/_lottery.vue @@ -0,0 +1,324 @@ + + + diff --git a/pages/admin/lottery/index.vue b/pages/admin/lottery/index.vue new file mode 100644 index 0000000..2b6c861 --- /dev/null +++ b/pages/admin/lottery/index.vue @@ -0,0 +1,148 @@ + + + diff --git a/pages/admin/lotteryPopUp/index.vue b/pages/admin/lotteryPopUp/index.vue new file mode 100644 index 0000000..bc6bf6a --- /dev/null +++ b/pages/admin/lotteryPopUp/index.vue @@ -0,0 +1,147 @@ + + + diff --git a/pages/admin/op-requests/_oprId.vue b/pages/admin/op-requests/_oprId.vue new file mode 100644 index 0000000..be3113b --- /dev/null +++ b/pages/admin/op-requests/_oprId.vue @@ -0,0 +1,239 @@ + + + diff --git a/pages/admin/op-requests/index.vue b/pages/admin/op-requests/index.vue new file mode 100644 index 0000000..9e7f50d --- /dev/null +++ b/pages/admin/op-requests/index.vue @@ -0,0 +1,219 @@ + + + + + diff --git a/pages/admin/piece-requests/_prId.vue b/pages/admin/piece-requests/_prId.vue new file mode 100644 index 0000000..647b83a --- /dev/null +++ b/pages/admin/piece-requests/_prId.vue @@ -0,0 +1,248 @@ + + + diff --git a/pages/admin/piece-requests/index.vue b/pages/admin/piece-requests/index.vue new file mode 100644 index 0000000..a609a03 --- /dev/null +++ b/pages/admin/piece-requests/index.vue @@ -0,0 +1,219 @@ + + + + + diff --git a/pages/admin/pieces/_piece.vue b/pages/admin/pieces/_piece.vue new file mode 100644 index 0000000..3587bbe --- /dev/null +++ b/pages/admin/pieces/_piece.vue @@ -0,0 +1,131 @@ + + + diff --git a/pages/admin/pieces/index.vue b/pages/admin/pieces/index.vue new file mode 100644 index 0000000..6ac9baf --- /dev/null +++ b/pages/admin/pieces/index.vue @@ -0,0 +1,106 @@ + + + diff --git a/pages/admin/representations/_representation.vue b/pages/admin/representations/_representation.vue new file mode 100644 index 0000000..cee0c99 --- /dev/null +++ b/pages/admin/representations/_representation.vue @@ -0,0 +1,400 @@ + + + diff --git a/pages/admin/representations/index.vue b/pages/admin/representations/index.vue new file mode 100644 index 0000000..fbe7c65 --- /dev/null +++ b/pages/admin/representations/index.vue @@ -0,0 +1,232 @@ + + + + + diff --git a/pages/admin/serials-exel/index.vue b/pages/admin/serials-exel/index.vue new file mode 100644 index 0000000..6e16237 --- /dev/null +++ b/pages/admin/serials-exel/index.vue @@ -0,0 +1,163 @@ + + + diff --git a/pages/admin/sms/_item.vue b/pages/admin/sms/_item.vue new file mode 100644 index 0000000..0dc1d20 --- /dev/null +++ b/pages/admin/sms/_item.vue @@ -0,0 +1,333 @@ + + + diff --git a/pages/admin/sms/index.vue b/pages/admin/sms/index.vue new file mode 100644 index 0000000..6fbf06c --- /dev/null +++ b/pages/admin/sms/index.vue @@ -0,0 +1,92 @@ + + + diff --git a/pages/admin/surveys/_survey.vue b/pages/admin/surveys/_survey.vue new file mode 100644 index 0000000..0797493 --- /dev/null +++ b/pages/admin/surveys/_survey.vue @@ -0,0 +1,62 @@ + + + diff --git a/pages/admin/surveys/index.vue b/pages/admin/surveys/index.vue new file mode 100644 index 0000000..d63c205 --- /dev/null +++ b/pages/admin/surveys/index.vue @@ -0,0 +1,113 @@ + + + diff --git a/pages/admin/tickets/_ticket.vue b/pages/admin/tickets/_ticket.vue new file mode 100644 index 0000000..8706f22 --- /dev/null +++ b/pages/admin/tickets/_ticket.vue @@ -0,0 +1,162 @@ + + + diff --git a/pages/admin/tickets/index.vue b/pages/admin/tickets/index.vue new file mode 100644 index 0000000..7d71c8e --- /dev/null +++ b/pages/admin/tickets/index.vue @@ -0,0 +1,146 @@ + + + + + diff --git a/pages/admin/transactions/_item.vue b/pages/admin/transactions/_item.vue new file mode 100644 index 0000000..d81c36b --- /dev/null +++ b/pages/admin/transactions/_item.vue @@ -0,0 +1,100 @@ + + + diff --git a/pages/admin/transactions/index.vue b/pages/admin/transactions/index.vue new file mode 100644 index 0000000..b70836b --- /dev/null +++ b/pages/admin/transactions/index.vue @@ -0,0 +1,92 @@ + + + diff --git a/pages/admin/warranty-terms/_page/_item.vue b/pages/admin/warranty-terms/_page/_item.vue new file mode 100644 index 0000000..c67d90a --- /dev/null +++ b/pages/admin/warranty-terms/_page/_item.vue @@ -0,0 +1,175 @@ + + + diff --git a/pages/admin/warranty-terms/_page/index.vue b/pages/admin/warranty-terms/_page/index.vue new file mode 100644 index 0000000..ef1eeb7 --- /dev/null +++ b/pages/admin/warranty-terms/_page/index.vue @@ -0,0 +1,127 @@ + + + diff --git a/pages/admin/warranty-terms/new.vue b/pages/admin/warranty-terms/new.vue new file mode 100644 index 0000000..88e9ea4 --- /dev/null +++ b/pages/admin/warranty-terms/new.vue @@ -0,0 +1,164 @@ + + + diff --git a/pages/agent-benefits/index.vue b/pages/agent-benefits/index.vue new file mode 100644 index 0000000..67730f3 --- /dev/null +++ b/pages/agent-benefits/index.vue @@ -0,0 +1,52 @@ + + + diff --git a/pages/agents/index.vue b/pages/agents/index.vue new file mode 100644 index 0000000..cd8678e --- /dev/null +++ b/pages/agents/index.vue @@ -0,0 +1,223 @@ + + + diff --git a/pages/auth/login-register/index.vue b/pages/auth/login-register/index.vue new file mode 100644 index 0000000..4bd5efe --- /dev/null +++ b/pages/auth/login-register/index.vue @@ -0,0 +1,449 @@ + + + diff --git a/pages/auth/resetpass-newpass/_token.vue b/pages/auth/resetpass-newpass/_token.vue new file mode 100644 index 0000000..48b791f --- /dev/null +++ b/pages/auth/resetpass-newpass/_token.vue @@ -0,0 +1,99 @@ + + + diff --git a/pages/auth/resetpass/index.vue b/pages/auth/resetpass/index.vue new file mode 100644 index 0000000..98b2c96 --- /dev/null +++ b/pages/auth/resetpass/index.vue @@ -0,0 +1,179 @@ + + + diff --git a/pages/contact/index.vue b/pages/contact/index.vue new file mode 100644 index 0000000..bfb2155 --- /dev/null +++ b/pages/contact/index.vue @@ -0,0 +1,109 @@ + + + diff --git a/pages/download/_item+.vue b/pages/download/_item+.vue new file mode 100644 index 0000000..7f6cdd6 --- /dev/null +++ b/pages/download/_item+.vue @@ -0,0 +1,143 @@ + + + diff --git a/pages/download/index.vue b/pages/download/index.vue new file mode 100644 index 0000000..567e865 --- /dev/null +++ b/pages/download/index.vue @@ -0,0 +1,185 @@ + + + diff --git a/pages/enroll-representation/index.vue b/pages/enroll-representation/index.vue new file mode 100644 index 0000000..11241d1 --- /dev/null +++ b/pages/enroll-representation/index.vue @@ -0,0 +1,70 @@ + + + diff --git a/pages/index.vue b/pages/index.vue new file mode 100644 index 0000000..d877a5a --- /dev/null +++ b/pages/index.vue @@ -0,0 +1,169 @@ + + + diff --git a/pages/learning/_post+.vue b/pages/learning/_post+.vue new file mode 100644 index 0000000..4393304 --- /dev/null +++ b/pages/learning/_post+.vue @@ -0,0 +1,56 @@ + + + diff --git a/pages/learning/index.vue b/pages/learning/index.vue new file mode 100644 index 0000000..f448126 --- /dev/null +++ b/pages/learning/index.vue @@ -0,0 +1,95 @@ + + + diff --git a/pages/lottery/index.vue b/pages/lottery/index.vue new file mode 100644 index 0000000..ac5c311 --- /dev/null +++ b/pages/lottery/index.vue @@ -0,0 +1,212 @@ + + + diff --git a/pages/representation/index.vue b/pages/representation/index.vue new file mode 100644 index 0000000..da3d9fa --- /dev/null +++ b/pages/representation/index.vue @@ -0,0 +1,100 @@ + + + diff --git a/pages/warranty-terms/index.vue b/pages/warranty-terms/index.vue new file mode 100644 index 0000000..42db8b2 --- /dev/null +++ b/pages/warranty-terms/index.vue @@ -0,0 +1,88 @@ + + + diff --git a/plugins/ATextSplitterVuePlugin.client.js b/plugins/ATextSplitterVuePlugin.client.js new file mode 100644 index 0000000..0de878a --- /dev/null +++ b/plugins/ATextSplitterVuePlugin.client.js @@ -0,0 +1,78 @@ +/* eslint-disable no-undef */ +/// /////////////////////////////////////////////////////////// +/// /////////////////// custom text splitor created by ammiiir1 +/// ////// (amir.i.iii.vii.iii@gmail.com | ammiiir1@gmail.com ) +// (https://gitlab.com/ammiiir1 | https://github.com/ammiiir1) + +import Vue from 'vue' + +class ATextSplitterVuePlugin { + /// /////////////////////////////////////////////////////////////////////////////////// + /// text animation#1 + // .staggerFrom($("#txtID .tsWords"), 0.5, {cycle: {y: [20, -20]}, opacity: 0}, 0.1, 0) + // ************************************************************************************ + /// text animation#2 + // .staggerFrom($("#txtID .tsLetters"), 0.2, {scale: 5, opacity: 0}, 0.07) + // ************************************************************************************ + // text animation#3 + // .staggerFrom($("#txtID .tsWords"), 0.4, {scale:2,opacity: 0}, 0.015,1.4) + // ************************************************************************************ + /// text animation#4 + // .staggerFrom($("#txtID .tsWords"), 0.3, {opacity: 0}, 0.07) + // ************************************************************************************ + constructor({ rtl = false, letterSpace = 0, wordSpace = '3px' } = {}) { + // options + this.rtl = rtl + this.letterSpace = letterSpace + 'px' + this.wordSpace = wordSpace + 'px' + // pipeline vars + this.word = '' + this.letterSpans = '' + this.wordSpans = '' + } + + /// /////////////////////////////////////////////// private classes + _split(strOrId, isElement = true) { + // pipeline + const line = isElement ? $(`#${strOrId}`).text() : strOrId // get the sentence + const parts = line.split(' ') + for (let i = 0; i < parts.length; i++) { + // how many words + this.letterSpans = '' + this.word = parts[i] + + for (let j = 0; j < this.word.length; j++) { + // how many letters in each words + this.letterSpans += '' + this.word[j] + '' // creat a span for each letter + } + this.wordSpans += '' + this.letterSpans + ' ' + } + } + + _setStyles(txtID) { + $(`#${txtID} .tsLetters`).css({ + display: this.rtl ? 'inline' : 'inline-block', + marginRight: this.rtl ? 0 : this.letterSpace, + marginLeft: this.rtl ? this.letterSpace : 0 + }) + $(`#${txtID} .tsWords`).css({ + display: 'inline-block', + marginRight: this.rtl ? 0 : this.wordSpace, + marginLeft: this.rtl ? this.wordSpace : 0 + }) + } + + /// /////////////////////////////////////////////// output methods + injectToElement(txtID) { + this._split(txtID, true) + $(`#${txtID}`).html(this.wordSpans) // render the sentence + this._setStyles(txtID) + } + + returnString(str) { + this._split(str, false) + return this.wordSpans // return splitted string + } +} + +Vue.prototype.$ATextSplitter = ATextSplitterVuePlugin diff --git a/plugins/ArpaError.client.js b/plugins/ArpaError.client.js new file mode 100644 index 0000000..86d9222 --- /dev/null +++ b/plugins/ArpaError.client.js @@ -0,0 +1,44 @@ +import Vue from 'vue' + +function arpaError() { + const arpaErrorMsg = 'تبادل اطلاعات با پایگاه داده آسان سرویس با مشکل مواجه شده، لطفا صفحه را بروزرسانی کنید.' + const arpaErrorTitle = 'مشکل در ارتباط' + Vue.prototype + .$confirm(arpaErrorMsg, arpaErrorTitle, { + confirmButtonText: 'بروزرسانی صفحه', + cancelButtonText: 'بستن', + type: 'warning' + }) + .then(() => { + window.location.reload() + }) + .catch(() => { + Vue.prototype.$message({ + type: 'info', + message: 'برای ادامه صفحه را به صورت دستی بروزرسانی کنید' + }) + }) +} + +function fetchError() { + const arpaErrorMsg = 'دریافت اطلاعات با مشکل مواجه شده، لطفا صفحه را بروزرسانی کنید.' + const arpaErrorTitle = 'دریافت ناموفق' + Vue.prototype + .$confirm(arpaErrorMsg, arpaErrorTitle, { + confirmButtonText: 'تلاش مجدد', + cancelButtonText: 'بستن', + type: 'warning' + }) + .then(() => { + window.location.reload() + }) + .catch(() => { + Vue.prototype.$message({ + type: 'info', + message: 'برای ادامه صفحه را به صورت دستی بروزرسانی کنید' + }) + }) +} + +Vue.prototype.$arpaError = arpaError +Vue.prototype.$fetchError = fetchError diff --git a/plugins/ckEditor.client.js b/plugins/ckEditor.client.js new file mode 100644 index 0000000..4c10cbb --- /dev/null +++ b/plugins/ckEditor.client.js @@ -0,0 +1,4 @@ +import Vue from 'vue' +import CKEditor from 'ckeditor4-vue' + +Vue.use(CKEditor) diff --git a/plugins/core-ui.client.js b/plugins/core-ui.client.js new file mode 100644 index 0000000..8a5278c --- /dev/null +++ b/plugins/core-ui.client.js @@ -0,0 +1,11 @@ +import Vue from 'vue' +import CoreUi from '@coreui/vue' +import CoreUiVueCharts from '@coreui/vue-chartjs' +import { iconsSet as icons } from '~/utils/adminPanelIcons' + +Vue.use(CoreUiVueCharts) +Vue.use(CoreUi) + +export default ({ app }) => { + app.icons = icons +} diff --git a/plugins/datePicker.client.js b/plugins/datePicker.client.js new file mode 100644 index 0000000..8bccd45 --- /dev/null +++ b/plugins/datePicker.client.js @@ -0,0 +1,4 @@ +import Vue from 'vue' +import VuePersianDatetimePicker from 'vue-persian-datetime-picker' + +Vue.component('PersianDatePicker', VuePersianDatetimePicker) diff --git a/plugins/element-ui.js b/plugins/element-ui.js new file mode 100644 index 0000000..4bbf940 --- /dev/null +++ b/plugins/element-ui.js @@ -0,0 +1,5 @@ +import Vue from 'vue' +import Element from 'element-ui' +import locale from 'element-ui/lib/locale/lang/fa' + +Vue.use(Element, { locale }) diff --git a/plugins/gsap.client.js b/plugins/gsap.client.js new file mode 100644 index 0000000..63cf2f4 --- /dev/null +++ b/plugins/gsap.client.js @@ -0,0 +1,8 @@ +/* eslint-disable import/no-named-as-default */ +import Vue from 'vue' +import gsap from 'gsap' +import scrollToPlugin from 'gsap/ScrollToPlugin' +import scrollTrigger from 'gsap/ScrollTrigger' + +gsap.registerPlugin(scrollToPlugin, scrollTrigger) +Vue.prototype.$gsap = gsap diff --git a/plugins/jDate.js b/plugins/jDate.js new file mode 100644 index 0000000..1392945 --- /dev/null +++ b/plugins/jDate.js @@ -0,0 +1,13 @@ +import Vue from 'vue' +import moment from 'moment-jalaali' + +function jDate(date) { + return moment(date).format('jYYYY/jMM/jDD') +} + +function jDateTime(date) { + return moment(date).format('jYYYY/jMM/jDD - HH:mm:ss') +} + +Vue.prototype.$jDate = jDate +Vue.prototype.$jDateTime = jDateTime diff --git a/sass/admin/_custom.scss b/sass/admin/_custom.scss new file mode 100644 index 0000000..1d87935 --- /dev/null +++ b/sass/admin/_custom.scss @@ -0,0 +1,92 @@ +// Here you can add other styles +.copy-right { + color: #872071; + font-weight: bold; + + &:hover { + text-decoration: none; + color: #872071; + } +} + +pre { + background: #000 !important; + color: green !important; + direction: ltr !important; + text-align: left !important; + padding: 20px !important; + font-size: 20px !important; +} + +.c-app { + .custom-subheader { + align-items: center; + width: 100%; + position: fixed; + top: $header-height; + left: 0; + z-index: 10; + transition: width $layout-transition-speed; + -webkit-transition: width $layout-transition-speed; + -moz-transition: width $layout-transition-speed; + -ms-transition: width $layout-transition-speed; + -o-transition: width $layout-transition-speed; + + &.sideBarFull { + width: calc(100% - #{$sidebar-width}); + } + + &.sideBarMinimized { + width: calc(100% - #{$sidebar-minimized-width}); + } + + &.sideBarClose { + width: 100%; + } + + @media (max-width: 992px) { + width: 100% !important; + } + } + + .form-group { + &.err { + .col-form-label { + color: red !important; + } + + .form-control { + border-color: red !important; + } + + .form-text { + color: red !important; + } + } + } + + .c-sidebar-nav-dropdown { + .c-sidebar-nav-dropdown-toggle { + background: rgba(gray, 0.2) !important; + } + } + + .vpd-main { + .vpd-selected { + .vpd-day-text { + color: #fff; + } + } + + .vpd-date { + span { + color: #fff; + } + } + + // vue persian dateTime picker styles + .vpd-icon-btn { + padding: 9px 10px; + } + } +} diff --git a/sass/admin/_el_ui_rtl.scss b/sass/admin/_el_ui_rtl.scss new file mode 100644 index 0000000..fa390fd --- /dev/null +++ b/sass/admin/_el_ui_rtl.scss @@ -0,0 +1,136 @@ +//////////////////////////////////////////////////////////////////////////////////////////////////////// element ui rtl fix +html:lang(fa) { + .el-tag { + /*margin-bottom: 10px!important;*/ + } + + .text-area { + textarea { + height: 100px; + } + } + + .el-popup-parent--hidden { + padding-right: 0 !important; + } + + .el-tag .el-icon-close { + right: auto !important; + left: -5px !important; + } + + .el-table .el-table__body-wrapper .el-table__row .is-left { + text-align: left !important; + } + + .wrapper { + min-height: 100vh; + } + + .el-form-item__label { + float: right !important; + text-align: right !important; + } + + .el-form-item__content { + margin-left: 0 !important; + margin-right: 120px !important; + } + + @media (max-width: 768px) { + .el-form-item__content { + margin-left: 0 !important; + margin-right: 0 !important; + } + } + + .secondTitle { + margin-top: 50px; + } + + .el-upload__input { + display: none !important; + } + + .el-message-box__title, + .el-message-box__message { + direction: rtl !important; + text-align: right !important; + } + + .el-message-box__message { + padding-left: 12px !important; + padding-right: 36px !important; + } + + .el-message-box__btns { + text-align: left !important; + } + + .el-message-box__headerbtn { + right: auto !important; + left: 15px !important; + } + + .el-message-box__btns button:nth-child(2) { + margin-left: 0 !important; + margin-right: 10px !important; + } + + .el-message-box__status { + right: 0 !important; + } + + .el-table td, + .el-table th { + text-align: right !important; + } + + .el-upload__input { + display: none !important; + } + + .el-checkbox__label { + padding-left: 0 !important; + padding-right: 10px !important; + } + + .el-message__icon { + margin-right: 0 !important; + margin-left: 10px !important; + } + + .sidebar-subnav { + background: rgba(0, 0, 0, 0.05) !important; + } + + .sidebar > .nav > li { + border-bottom: 1px solid #eee !important; + } + + .brand-logo p { + margin-top: 6px !important; + } + + .brand-logo-collapsed svg { + fill: #fff !important; + } + + .nav-floating { + background: #fff !important; + } + + .el-dialog__headerbtn { + right: auto !important; + left: 20px !important; + } + + .el-radio__label { + padding-right: 10px !important; + } + + .el-scrollbar__wrap { + margin-right: 0 !important; + margin-left: -17px !important; + } +} diff --git a/sass/admin/_variables.scss b/sass/admin/_variables.scss new file mode 100644 index 0000000..286831d --- /dev/null +++ b/sass/admin/_variables.scss @@ -0,0 +1,2 @@ +// Variable overrides +$gray-base: #1a1e24; diff --git a/sass/admin/style.scss b/sass/admin/style.scss new file mode 100644 index 0000000..2bd34cb --- /dev/null +++ b/sass/admin/style.scss @@ -0,0 +1,18 @@ +// If you want to override variables do it here +@import 'variables'; + +// Import styles +@import '~@coreui/coreui/scss/coreui'; + +// If you want to add something do it here +@import 'custom'; +@import 'el_ui_rtl'; + +.card-header:not(.content-center) > .c-icon:first-child { + margin-right: 0.1rem; + margin-top: 0.1rem; + vertical-align: top; + width: 1.2rem; + height: 1.2rem; + font-size: 1.2rem; +} diff --git a/sass/app/CKEditorStyle.scss b/sass/app/CKEditorStyle.scss new file mode 100644 index 0000000..326e4ca --- /dev/null +++ b/sass/app/CKEditorStyle.scss @@ -0,0 +1,118 @@ +.ck-content { + width: 100%; + direction: rtl; + text-align: right; + + &:lang(en) { + direction: ltr; + text-align: left; + } + + a { + display: inline-block; + color: blue; + } + + p, + a, + span, + b, + ul, + li, + em, + h1, + h2, + h3, + h4, + h5, + h6, + strong { + font-family: inherit, sans-serif; + direction: unset; + text-align: unset; + + &:lang(en) { + font-family: inherit; + direction: unset; + text-align: unset; + } + + &[dir='ltr'] { + direction: ltr; + text-align: left; + + p, + a, + span, + b, + ul, + li, + em, + h1, + h2, + h3, + h4, + h5, + h6, + strong { + direction: ltr; + text-align: left; + } + } + + &[dir='rtl'] { + direction: rtl; + text-align: right; + + p, + a, + span, + b, + ul, + li, + em, + h1, + h2, + h3, + h4, + h5, + h6, + strong { + direction: rtl; + text-align: right; + } + } + } + + p { + line-height: 1.6em; + } + + h1, + h2, + h3, + h4, + h5, + h6 { + line-height: 1.3em; + } + + li { + margin-bottom: 15px; + line-height: 1.6em; + } + + ol { + list-style: decimal; + list-style-position: inside; + } + + ul { + list-style: disc; + list-style-position: inside; + } + + img { + max-width: 100% !important; + } +} diff --git a/sass/app/el-ui-custom.scss b/sass/app/el-ui-custom.scss new file mode 100644 index 0000000..37c3432 --- /dev/null +++ b/sass/app/el-ui-custom.scss @@ -0,0 +1,190 @@ +.el-button--primary { + span { + color: #fff; + } +} + +.el-pagination { + --height: 50px; + + .btn-prev { + border-top-left-radius: 5px; + border-bottom-left-radius: 5px; + } + + .btn-next { + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; + } + + button { + height: var(--height); + line-height: var(--height); + } + + .el-pager { + li { + height: var(--height); + line-height: var(--height); + } + } +} + +.el-message { + @media (max-width: 575px) { + min-width: calc(100% - 30px); + } +} + +.el-message-box { + max-width: 420px; + width: calc(100% - 15px); + + .el-button span { + color: #000; + } + + .el-button.el-button--primary span { + color: #fff; + } +} + +.el-select-dropdown { + .el-select-dropdown__item { + @media (max-width: 575px) { + max-width: 250px; + white-space: pre-wrap; + word-break: break-word; + margin-bottom: 15px; + height: auto; + line-height: 1em; + + span { + display: block; + width: 100%; + font-size: 13px; + } + } + } +} + +.el-popover { + font-family: 'iranYekanL', sans-serif; + direction: ltr; + text-align: right; + + .el-popover__title { + font-family: 'iranYekanB', sans-serif; + } +} + +.el-loading-text { + text-align: center; +} + +.el-dialog { + @extend %defaultBorderRadius; + + @media (max-width: 1400px) { + width: 80%; + } + @media (max-width: 992px) { + width: 90%; + } + + @media (max-width: 768px) { + width: calc(100% - 15px); + } + + @media (max-width: 575px) { + .el-dialog__body { + padding: 10px; + } + } + + .dialog-footer { + .el-button--primary { + span { + color: #fff; + } + } + } +} + +.el-select-group__title { + padding-left: 0; + padding-right: 20px; + color: rgba(#000, 0.3); +} + +.custom-el-button { + direction: ltr; + display: inline-flex; + justify-content: center; + align-items: center; + + span { + color: #fff; + } +} + +.no-address-added { + a { + color: $theme; + font-weight: bold; + } +} + +.select-form-address { + .form_3 { + display: flex; + flex-wrap: wrap; + + .formRow { + flex-basis: 33.33%; + } + + .title { + flex-basis: 100%; + margin-bottom: 30px; + + p { + color: #000; + font-weight: bold; + font-family: 'iranYekanB'; + font-size: 20px; + } + } + + hr { + flex-basis: 100%; + margin-bottom: 30px; + } + + .btnRow { + button { + span { + color: #fff; + } + } + } + } + + .buttons { + text-align: center; + margin-top: 50px; + + button { + span { + color: #fff; + } + } + } +} + +.agentsStatus-popover-insideBtn { + span { + color: $theme; + font-family: 'iranYekanB'; + } +} diff --git a/sass/app/el_ui_rtl.scss b/sass/app/el_ui_rtl.scss new file mode 100644 index 0000000..6e51a92 --- /dev/null +++ b/sass/app/el_ui_rtl.scss @@ -0,0 +1,211 @@ +//////////////////////////////////////////////////////////////////////////////////////////////////////// element ui rtl fix +html:lang(fa) { + .el-tag { + /*margin-bottom: 10px!important;*/ + } + + .text-area { + textarea { + height: 100px; + } + } + + .el-popup-parent--hidden { + padding-right: 0 !important; + } + + .el-tag .el-icon-close { + right: auto !important; + left: -5px !important; + } + + .el-table .el-table__body-wrapper .el-table__row .is-left { + text-align: left !important; + } + + .wrapper { + min-height: 100vh; + } + + .el-form-item__label { + float: right !important; + text-align: right !important; + } + + .el-form-item__content { + margin-left: 0 !important; + margin-right: 120px !important; + } + + @media (max-width: 768px) { + .el-form-item__content { + margin-left: 0 !important; + margin-right: 0 !important; + } + } + + .secondTitle { + margin-top: 50px; + } + + .el-upload__input { + display: none !important; + } + + .el-message-box__title, + .el-message-box__message { + direction: rtl !important; + text-align: right !important; + } + + .el-message-box__message { + padding-left: 12px !important; + padding-right: 36px !important; + } + + .el-message-box__btns { + text-align: left !important; + } + + .el-message-box__headerbtn { + right: auto !important; + left: 15px !important; + } + + .el-message-box__btns button:nth-child(2) { + margin-left: 0 !important; + margin-right: 10px !important; + } + + .el-message-box__status { + right: 0 !important; + } + + .el-table { + td, + th { + text-align: right !important; + } + .is-center { + text-align: center !important; + } + } + + .el-upload__input { + display: none !important; + } + + .el-checkbox__label { + padding-left: 0 !important; + padding-right: 10px !important; + } + + .el-message__icon { + margin-right: 0 !important; + margin-left: 10px !important; + } + + .sidebar-subnav { + background: rgba(0, 0, 0, 0.05) !important; + } + + .sidebar > .nav > li { + border-bottom: 1px solid #eee !important; + } + + .brand-logo p { + margin-top: 6px !important; + } + + .brand-logo-collapsed svg { + fill: #fff !important; + } + + .nav-floating { + background: #fff !important; + } + + .el-dialog__headerbtn { + right: auto !important; + left: 20px !important; + } + + .el-radio__label { + padding-right: 10px !important; + } + + .el-scrollbar__wrap { + margin-right: 0 !important; + margin-left: -17px !important; + } + + .el-alert.is-light .el-alert__closebtn { + right: auto !important; + left: 15px !important; + } + + .el-tooltip__popper[x-placement^='top'] .popper__arrow::after { + margin-left: 0 !important; + margin-right: -5px !important; + } + + .el-notification { + padding-right: 13px; + padding-left: 26px; + + .el-notification__group { + margin-right: 13px; + margin-left: 8px; + + .el-notification__closeBtn { + right: auto; + left: 15px; + } + } + } + + .el-collapse { + direction: rtl; + + .el-collapse-item { + .el-collapse-item__header { + direction: rtl; + + .header-icon { + margin-right: 5px; + } + + .el-collapse-item__arrow { + margin-right: auto; + margin-left: 0; + @include transform(rotate(180deg)); + + &.is-active { + @include transform(rotate(90deg)); + } + } + } + } + } + + .el-upload-list { + .el-upload-list__item { + margin-right: 0; + margin-left: 8px; + + .el-upload-list__item-actions { + i { + color: #fff; + } + .el-upload-list__item-delete { + margin-left: 0; + margin-right: 15px; + } + } + } + } + + .el-radio-group{ + direction: ltr; + } +} diff --git a/sass/app/extentions.scss b/sass/app/extentions.scss new file mode 100644 index 0000000..76735df --- /dev/null +++ b/sass/app/extentions.scss @@ -0,0 +1,24 @@ +%defaultTransition { + @include transition(0.3s); +} + +%userSelect { + user-select: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; +} + +%appearance { + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; +} + +%defaultBoxShadow { + @include boxShadow(0 5px 8px rgba(0, 0, 0, 0.2)); +} + +%defaultBorderRadius { + @include borderRadius(15px); +} diff --git a/sass/app/fonts.scss b/sass/app/fonts.scss new file mode 100644 index 0000000..9f87cb4 --- /dev/null +++ b/sass/app/fonts.scss @@ -0,0 +1,24 @@ +////// sahel +@font-face { + font-family: 'iranYekanB'; + src: url('/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.eot') format('embedded-opentype'), + url('/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.ttf') format('truetype'), + url('/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.woff') format('woff'), + url('/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.woff2') format('woff2'); +} + +@font-face { + font-family: 'iranYekanL'; + src: url('/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.eot') format('embedded-opentype'), + url('/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.ttf') format('truetype'), + url('/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.woff') format('woff'), + url('/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.woff2') format('woff2'); +} + +@font-face { + font-family: 'iranYekanR'; + src: url('/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.eot') format('embedded-opentype'), + url('/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.ttf') format('truetype'), + url('/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.woff') format('woff'), + url('/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.woff2') format('woff2'); +} diff --git a/sass/app/global.scss b/sass/app/global.scss new file mode 100644 index 0000000..8807396 --- /dev/null +++ b/sass/app/global.scss @@ -0,0 +1,156 @@ +html { + scroll-behavior: smooth; +} + +body { + direction: rtl; + background: $bg; + + &:lang(en) { + direction: ltr; + } +} + +p, +span, +b { + font-family: 'iranYekanL', sans-serif; + color: $txtColor; + line-height: 1.6em; +} + +form, +input, +textarea, +select, +option, +button, +table, +tr, +td, +th, +ul, +ol, +li { + outline: none; + font-family: 'iranYekanR', sans-serif; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: 'iranYekanB', sans-serif; + line-height: 1.3em; +} + +a { + font-family: 'iranYekanR', sans-serif; + text-decoration: none; + color: $txtColor; + line-height: 1.6em; + + &:hover { + text-decoration: none; + color: rgba(0, 0, 0, 0.7); + } +} + +.default { + p { + text-align: justify; + } +} + +pre { + direction: ltr !important; + text-align: left; + padding: 25px; + background: #000; + color: greenyellow; + font-size: 18px; +} + +section { + padding: 0 0 100px; +} + +@keyframes loading { + 0% { + @include transform(rotateZ(0)); + } + + 100% { + @include transform(rotateZ(360deg)); + } +} + +/////// global classes +.page { + min-height: 100vh; + padding-top: 50px; + overflow: hidden; + + .no-post { + text-align: center; + + h2 { + padding: 15px; + background: orangered; + color: #fff; + @include borderRadius(15px); + margin-top: 50px; + } + } +} + +.overflow-hidden { + overflow-x: hidden; +} + +.singleLineTxt { + overflow: hidden !important; + display: -webkit-box !important; + -webkit-line-clamp: 1 !important; + -webkit-box-orient: vertical !important; +} + +.notificationAnim { + @keyframes ring { + from { + @include transform(rotateZ(20deg)); + } + to { + @include transform(rotateZ(-20deg)); + } + } + + display: inline-block; + animation: ring 0.5s alternate-reverse infinite; +} + +.vpd-wrapper { + .vpd-selected { + .vpd-day-text { + color: #fff !important; + } + } + + .vpd-date { + span { + color: #fff !important; + } + } +} +///////// animations +.page-enter-active, +.page-leave-active { + transition: opacity 0.5s; +} + +.page-enter, +.page-leave-to { + opacity: 0; +} diff --git a/sass/app/mixins.scss b/sass/app/mixins.scss new file mode 100644 index 0000000..6740cd0 --- /dev/null +++ b/sass/app/mixins.scss @@ -0,0 +1,44 @@ +@mixin transform($p...) { + transform: $p; + -webkit-transform: $p; + -moz-transform: $p; + -ms-transform: $p; + -o-transform: $p; +} + +@mixin transition($p...) { + transition: $p; + -webkit-transition: $p; + -moz-transition: $p; + -ms-transition: $p; + -o-transition: $p; +} + +@mixin boxSizing($p) { + box-sizing: $p; + -webkit-box-sizing: $p; + -moz-box-sizing: $p; +} + +@mixin filter($p...) { + filter: $p; + -ms-filter: $p; +} + +@mixin boxShadow($p) { + box-shadow: $p; + -webkit-box-shadow: $p; + -moz-box-shadow: $p; +} + +@mixin borderRadius($p) { + border-radius: $p; + -webkit-border-radius: $p; + -moz-border-radius: $p; +} + +@mixin animation($p) { + animation: $p; + -webkit-animation: $p; + -o-animation: $p; +} diff --git a/sass/app/printStyles.scss b/sass/app/printStyles.scss new file mode 100644 index 0000000..16d782b --- /dev/null +++ b/sass/app/printStyles.scss @@ -0,0 +1,271 @@ +body { + -webkit-print-color-adjust: exact !important; +} + +@page { + size: landscape !important; +} + +#box-face-receipt { + padding: 20px; + + .receipt-body { + border: 1px solid rgba(#000, 1); + padding: 15px; + + .infoRow { + margin-bottom: 15px; + } + + .topLeft { + display: flex; + align-items: center; + justify-content: center; + text-align: center; + background: rgba(0, 0, 0, 0.05); + padding: 10px; + flex-basis: 300px; + + @media (max-width: 992px) { + flex-basis: 100%; + } + + &:first-child { + margin-bottom: 5px; + } + } + + h2 { + margin-bottom: 20px; + } + + b, + span { + display: inline-block; + } + + b { + margin-left: 5px; + } + + .senderInfo { + .topLeft { + &:last-child { + @media (max-width: 992px) { + margin-bottom: 20px; + } + } + } + } + + .receiverInfo { + .topLeft { + flex-direction: column; + background: transparent; + justify-content: center; + align-items: center; + + @media (max-width: 992px) { + justify-content: center; + margin-bottom: 20px; + } + + svg { + width: 200px; + margin: 0; + + path, + rect { + fill: #000; + } + } + + img { + width: 200px; + } + + &.ar { + justify-content: flex-end; + + @media print { + flex-direction: row; + justify-content: space-between; + align-items: center; + + img { + width: 100px; + } + } + } + } + } + } +} + +#box-inner-receipt { + padding: 20px; + + .receipt-body { + border: 1px solid rgba(#000, 1); + padding: 15px; + + .topBar { + margin-bottom: 30px; + + svg { + width: 200px; + + path, + rect { + fill: #000; + } + } + } + + .topLeft { + display: flex; + align-items: center; + justify-content: center; + text-align: center; + background: rgba(0, 0, 0, 0.05); + padding: 10px; + flex-basis: 300px; + + &:first-child { + margin-left: 5px; + } + } + + .stuff-list { + margin-bottom: 30px !important; + + @media print { + .notice { + display: none; + } + } + + table { + width: 100% !important; + + thead { + tr { + background: rgba(0, 0, 0, 0.7) !important; + color: #fff !important; + } + } + + tr { + background-color: #e0e6ed !important; + + &.odd { + background-color: #8a92a9 !important; + } + + td, + th { + padding: 10px !important; + text-align: center !important; + } + } + } + } + } +} + +#factor-layout { + border: 1px dashed #000; + padding: 10px; + + span, + p { + font-family: 'iranYekanR', sans-serif; + color: #000; + } + + .pageHeader { + margin-bottom: 10px; + + .row1 { + h2 { + text-align: center; + font-family: 'iranYekanB'; + font-weight: bold; + } + } + + .row2 { + display: flex; + flex-direction: column; + align-items: flex-end; + + @media (max-width: 992px) { + align-items: flex-start; + margin-top: 20px; + } + + p { + width: 200px; + text-align: right; + } + } + } + + .factor { + width: 100%; + border: 1px solid #000; + + .factorInfo { + display: flex; + flex-direction: column; + padding: 10px; + + p { + text-align: right; + padding: 10px 0; + color: #000; + } + + .row1 { + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: center; + + p { + flex-basis: 33.33%; + + @media (max-width: 992px) { + flex-basis: 100%; + } + } + } + } + + table { + width: 100%; + + thead { + tr { + th { + background: rgba(#000, 0.1); + text-align: center; + border: 1px solid #000; + padding: 5px; + } + } + } + + tbody { + tr { + td, + th { + text-align: center; + border: 1px solid #000; + padding: 5px; + } + } + } + } + } +} diff --git a/sass/app/variables.scss b/sass/app/variables.scss new file mode 100644 index 0000000..9aeb0c7 --- /dev/null +++ b/sass/app/variables.scss @@ -0,0 +1,16 @@ +// colors +$theme: #065495; +$theme_darker: #004279; +$bg: #e0e6ed; +$darkGray: #414344; +$green: green; +$red: red; +$txtColor: #707070; + +$tableHead: rgba(#000, 0.7); +$tableBody: rgba(#e0e6ed, 0.8); +$tableBodyHover: rgba($theme, 0.3); +$tableStrip: rgba(#8a92a9, 0.3); + +// units +$mt: 30px; diff --git a/sass/components/btn.scss b/sass/components/btn.scss new file mode 100644 index 0000000..760997b --- /dev/null +++ b/sass/components/btn.scss @@ -0,0 +1,67 @@ +.btn { + @extend %appearance; + display: inline-block; + border: 1px solid transparent; + padding: 10px 30px; + @include borderRadius(5px); + @extend %defaultTransition; + cursor: pointer; + + span { + font-family: 'iranYekanR'; + } + + &.btn-primary { + border-color: $theme; + background-color: $theme; + color: #fff; + + &:hover { + background-color: $theme_darker; + border-color: $theme_darker; + } + + &:disabled { + border-color: gray; + background-color: gray; + cursor: not-allowed; + } + + span { + color: #fff; + } + } + + &.btn-secondary { + padding: 10px 50px; + @include borderRadius(25px); + background: #fff; + + &.secondary-reverse { + background: $theme; + color: #fff; + } + + &:disabled { + border-color: gray; + background-color: gray; + cursor: not-allowed; + } + } + + &.btn-danger { + border-color: $red; + background-color: $red; + color: #fff; + + &:hover { + background-color: $red; + border-color: $red; + } + + &:disabled { + border-color: gray; + background-color: gray; + } + } +} diff --git a/sass/components/footer.scss b/sass/components/footer.scss new file mode 100644 index 0000000..82050bb --- /dev/null +++ b/sass/components/footer.scss @@ -0,0 +1,324 @@ +.site--footer { + padding-top: 20px; + background: #fff; + + section { + padding-top: 20px; + padding-bottom: 20px; + } + + .apps { + .btns { + text-align: center; + button { + margin: 0 10px; + border: none; + background: transparent; + cursor: pointer; + height: 80px; + + img { + height: 100%; + } + } + } + } + + .r1 { + a { + b { + display: inline-block !important; + direction: ltr !important; + color: rgba(#000, 0.5); + @extend %defaultTransition; + } + + &:hover { + b { + color: $theme; + } + } + } + i { + margin-left: 10px; + margin-right: 10px; + } + } + + .r2 { + ul { + display: flex; + justify-content: space-between; + + @media (max-width: 575px) { + flex-wrap: wrap; + + li { + flex-basis: 50%; + margin-left: 0 !important; + margin-right: 0 !important; + margin-bottom: 30px !important; + + img { + width: 90% !important; + max-width: 90px; + } + } + } + + li { + display: flex; + justify-content: flex-start; + align-items: center; + flex-direction: column; + text-align: center; + margin: 0 15px; + + img { + display: block; + width: 60px; + + @media (max-width: 768px) { + width: 40px; + } + } + p { + margin-top: 10px; + font-family: 'iranYekanB'; + font-size: 14px; + color: rgba(#000, 0.6); + + @media (max-width: 768px) { + font-size: 12px; + } + } + } + } + } + + .r3 { + h3 { + margin-bottom: 20px; + + @media (min-width: 575px) and (max-width: 768px) { + font-size: 16px; + } + } + + ul { + li { + margin-bottom: 10px; + + a { + padding: 10px 0; + @extend %defaultTransition; + @media (min-width: 575px) and (max-width: 768px) { + font-size: 14px; + } + + &:hover { + color: $theme; + } + } + } + } + + .r3-3 { + ul { + display: flex; + justify-content: flex-start; + align-items: center; + + li { + display: block; + margin-left: 30px; + + img { + width: 25px; + } + } + } + + .newsletter { + margin-top: 30px; + + .inputBox { + display: flex; + align-items: center; + flex-wrap: wrap; + + input { + border: none; + background: #f5f5f5; + @include borderRadius(5px); + padding: 10px; + flex-grow: 1; + margin-bottom: 5px; + + @media (min-width: 575px) and (max-width: 768px) { + width: 50%; + font-size: 10px; + padding: 11px 10px; + + &::placeholder { + font-size: 10px; + } + } + } + + button { + cursor: pointer; + border: none; + margin-right: 4px; + background: $theme; + @include borderRadius(5px); + padding: 9px; + color: #fff; + margin-bottom: 5px; + + @media (min-width: 575px) and (max-width: 768px) { + font-size: 12px; + } + + &:disabled { + background: #8a92a9; + } + } + } + } + } + } + + .r4 { + .bg { + padding-top: 10px; + padding-bottom: 10px; + @include borderRadius(10px); + background: $theme; + } + + .logo { + display: flex; + justify-content: flex-start; + align-items: center; + + @media (max-width: 768px) { + margin-bottom: 20px; + justify-content: center; + } + + a { + display: inline-block; + overflow: hidden; + height: 52px; + + svg { + width: 200px; + + @media (max-width: 270px) { + max-width: 200px; + width: 100%; + } + + * { + fill: #fff; + } + } + } + } + + .companies { + ul { + height: 100%; + display: flex; + justify-content: flex-end; + align-items: center; + + @media (max-width: 768px) { + justify-content: space-around; + } + + li { + display: block; + margin-right: 10px; + + img { + width: 52px; + + @media (max-width: 768px) { + width: 50px; + } + + @media (max-width: 400px) { + width: 40px; + } + + @media (max-width: 270px) { + width: 30px; + } + } + } + } + } + } + + .r5 { + h3 { + margin-bottom: 20px; + } + + p { + @media (max-width: 1200px) { + text-align: justify; + } + } + + .btns { + margin-top: 10px; + + a { + display: inline-flex; + justify-content: flex-start; + align-items: center; + + &:hover { + span { + color: $theme; + } + i { + color: $theme; + margin-right: 8px; + } + } + + span { + color: rgba(#000, 0.6); + font-family: 'iranYekanB'; + @extend %defaultTransition; + } + + i { + color: rgba(#000, 0.6); + margin-right: 4px; + @extend %defaultTransition; + } + } + } + } + + .r6 { + background: #f5f5f5; + text-align: center; + padding: 8px 0; + + a { + display: inline-block; + font-size: 14px; + direction: ltr !important; + + @media (max-width: 500px) { + font-size: 12px; + } + } + } +} diff --git a/sass/components/form.scss b/sass/components/form.scss new file mode 100644 index 0000000..8bf4ecb --- /dev/null +++ b/sass/components/form.scss @@ -0,0 +1,447 @@ +.form { + .formRow { + width: 100%; + display: block; + margin-bottom: 20px; + + &.center-align { + flex-basis: 100%; + text-align: center; + } + + &.err { + input, + textarea, + select { + @include boxShadow(0 0 5px rgba(red, 0.3)); + border: 2px solid rgba(red, 0.2); + + &::placeholder { + color: red; + } + } + + p { + color: red; + padding-right: 1%; + } + } + } + + .btnRow { + text-align: center; + + button { + @extend %appearance; + @extend %defaultTransition; + margin-top: 20px; + } + } + + .msgBox { + margin: 20px 0; + + .inner { + background: gray; + @include borderRadius(15px); + width: 95%; + padding: 20px; + margin: 0 auto; + + &.success { + background: $green; + } + + &.success-link { + background: $theme; + @extend %defaultTransition; + cursor: pointer; + + &:hover { + opacity: 0.8; + } + } + + &.error { + background: $red; + } + } + + p, + a { + display: block; + color: #fff; + text-align: center; + font-size: 14px; + } + } + + &.form_1 { + width: 100%; + background: #fff; + @include borderRadius(15px); + padding: 40px 20px; + + .formRow { + select { + @extend %appearance; + @extend %defaultTransition; + border: 2px solid transparent; + border-bottom: 2px solid rgba(0, 0, 0, 0.1); + outline: none; + padding: 10px 10px 10px 30px; + position: relative; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512' fill='rgba(0,0,0,0.4)'%3E%3Cpath d='M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z'/%3E%3C/svg%3E"); + background-size: 10px; + -webkit-background-size: 10px; + background-repeat: no-repeat; + background-position: 0 50%; + cursor: pointer; + color: rgba(#000, 0.5); + + option { + padding: 10px; + + &:disabled { + color: rgba(#000, 0.4); + } + } + } + + input, + textarea { + @extend %appearance; + @extend %defaultTransition; + width: 95%; + display: block; + margin: 0 auto; + border: 2px solid transparent; + border-bottom: 2px solid rgba(0, 0, 0, 0.1); + outline: none; + padding: 10px; + background: transparent; + + &:focus { + @include boxShadow(0 0 3px rgba($theme, 0.2)); + border: 2px solid rgba($theme, 0.1); + } + + &::placeholder { + color: rgba(#000, 1); + } + } + + textarea { + max-width: 95%; + min-width: 95%; + } + } + } + + &.form_2 { + width: 100%; + background: #fff; + padding: 40px 20px; + + @media (max-width: 575px) { + padding: 40px 0; + } + + .title { + padding-right: 15px; + } + + .formRow { + width: 100%; + display: block; + margin-bottom: 20px; + + select { + @extend %appearance; + @extend %defaultTransition; + border: 2px solid transparent; + border-bottom: 2px solid rgba(0, 0, 0, 0.1); + outline: none; + padding: 10px 10px 10px 30px; + position: relative; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512' fill='rgba(0,0,0,0.4)'%3E%3Cpath d='M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z'/%3E%3C/svg%3E"); + background-size: 10px; + -webkit-background-size: 10px; + background-repeat: no-repeat; + background-position: 0 50%; + cursor: pointer; + color: rgba(#000, 0.5); + + option { + padding: 10px; + + &:disabled { + color: rgba(#000, 0.4); + } + } + } + + input, + textarea { + @extend %appearance; + @extend %defaultTransition; + width: 95%; + display: block; + margin: 0 auto; + border: 1px solid transparent; + outline: none; + padding: 10px; + background: rgba(0, 0, 0, 0.05); + @include borderRadius(25px); + @include boxSizing(border-box); + + &:focus { + @include boxShadow(0 0 3px rgba($theme, 0.2)); + border: 1px solid rgba($theme, 0.1); + } + + &::placeholder { + color: rgba(#000, 0.5); + } + + &[type='checkbox'] { + display: inline-block; + width: 15px; + height: 15px; + padding: 0 !important; + margin: 0 !important; + @include borderRadius(0); + @include transform(translateY(3px)); + border: 1px solid transparent; + + &:checked { + background: $theme; + border: 1px solid #000; + } + } + } + + label { + display: block; + margin-bottom: 8px; + } + + label { + cursor: pointer; + padding-right: 2.5%; + } + } + } + + &.form_3 { + width: 100%; + background: #fff; + padding: 40px 20px; + border: 1px solid rgba(#000, 0.2); + + .formRow { + &:last-child { + margin-bottom: 0; + } + select { + width: 100%; + display: block; + margin: 0 auto; + @extend %appearance; + @extend %defaultTransition; + border: 1px solid transparent; + outline: none; + padding: 10px 10px 10px 30px; + position: relative; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512' fill='rgba(0,0,0,0.4)'%3E%3Cpath d='M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z'/%3E%3C/svg%3E"); + background-size: 10px; + -webkit-background-size: 10px; + background-repeat: no-repeat; + background-position: 5px 50%; + background-color: #e0e6ed; + cursor: pointer; + color: rgba(#000, 0.5); + + option { + padding: 10px; + + &:disabled { + color: rgba(#000, 0.4); + } + } + } + + input, + textarea { + @extend %appearance; + @extend %defaultTransition; + width: 100%; + display: block; + margin: 0 auto; + border: 1px solid transparent; + outline: none; + padding: 10px; + background-color: #e0e6ed; + @include boxSizing(border-box); + + &:focus { + @include boxShadow(0 0 3px rgba($theme, 0.2)); + border: 1px solid rgba($theme, 0.1); + } + + &::placeholder { + color: rgba(#000, 0.5); + } + + &[type='checkbox'] { + display: inline-block; + width: 15px; + height: 15px; + padding: 0 !important; + margin: 0 !important; + @include transform(translateY(3px)); + border: 1px solid transparent; + + &:checked { + background: $theme; + border: 1px solid #000; + } + } + } + + textarea { + max-width: 100%; + min-width: 100%; + } + + label { + display: block; + margin-bottom: 8px; + } + + label { + cursor: pointer; + } + } + } + + &.form_4 { + display: flex; + flex-wrap: wrap; + .formRow { + border-top: 1px solid #000; + border-bottom: 1px solid #000; + padding: 5px 10px; + margin-bottom: 0; + flex-basis: 50%; + flex-wrap: wrap; + + @media (max-width: 768px) { + flex-basis: 100%; + } + + &:nth-child(odd) { + border-left: 1px solid #000; + + @media (max-width: 768px) { + border-left: none; + } + } + + &.full { + flex-basis: 100%; + border-left: none; + } + + &.textarea { + label { + flex-wrap: wrap; + span { + flex-basis: 100%; + } + + textarea { + display: block; + flex-basis: 100%; + border: none; + background: transparent; + } + } + } + + &.selectable { + display: flex; + + span { + display: block; + font-weight: bold; + color: #000; + flex-grow: 0; + } + + .options { + flex-grow: 1; + display: flex; + flex-wrap: wrap; + padding-right: 10px; + + label { + flex-direction: row-reverse; + align-items: center; + margin-left: 20px; + direction: rtl; + cursor: pointer; + + input { + margin-left: 5px; + } + } + } + } + + label { + display: flex; + + span { + display: block; + font-weight: bold; + color: #000; + flex-grow: 0; + } + + input { + display: block; + flex-grow: 1; + padding-right: 10px; + border: none; + background-color: transparent; + + &:disabled { + color: green; + font-weight: bold; + cursor: not-allowed; + } + } + } + + &.err { + input { + @include boxShadow(none); + border-bottom: 1px solid rgba(red, 0.2); + } + + label { + span { + color: red; + } + } + + p { + font-size: 12px; + flex-basis: 100%; + text-align: center; + } + } + } + } +} diff --git a/sass/components/header.scss b/sass/components/header.scss new file mode 100644 index 0000000..31499e1 --- /dev/null +++ b/sass/components/header.scss @@ -0,0 +1,146 @@ +.site--header { + background: $theme; + width: 100%; + position: fixed; + top: 0; + left: 0; + z-index: 10; + + a { + color: #fff; + display: inline-block; + @extend %defaultTransition; + + span { + color: #fff; + } + } + + .logo { + display: flex; + justify-content: flex-start; + align-items: center; + + a { + display: block; + width: 100%; + max-width: 150px; + + svg { + display: block; + width: 100%; + } + } + } + + .links { + display: flex; + justify-content: center; + + li { + margin: 0 10px; + border-bottom: 2px solid transparent; + @extend %defaultTransition; + + a { + padding: 20px; + + @media (max-width: 1420px) { + font-size: 14px; + padding: 21px 8px; + } + + @media (max-width: 1120px) { + font-size: 14px; + padding: 21px 4px; + } + } + + &.active { + border-bottom: 2px solid #fff; + } + } + } + + .account { + // display: flex; + justify-content: flex-end; + align-items: center; + + a { + padding: 20px 0; + display: flex; + justify-content: flex-end; + align-items: center; + + span { + margin-left: 5px; + } + } + } + + .menu { + i { + display: inline-block; + padding: 20px 0; + font-size: 20px; + color: #fff; + cursor: pointer; + @extend %userSelect; + } + } + + .dropDown-container { + position: relative; + cursor: pointer; + + i { + display: inline-block; + @extend %defaultTransition; + } + + &.d-active { + i { + @include transform(rotate(180deg)); + } + + .drop-down { + height: 113px; + border-top: 1px solid rgba(#fff, 0.1); + } + + &.agents { + .drop-down { + height: 169px; + } + } + } + + .drop-down { + position: absolute; + top: 65px; + right: -5px; + background: $theme; + min-width: 160px; + border-bottom-left-radius: 15px; + border-bottom-right-radius: 15px; + border-top: 1px solid transparent; + overflow: hidden; + height: 0; + @extend %defaultTransition; + + a { + display: block; + padding: 15px 20px; + + &:hover { + background: rgba(#fff, 0.05); + } + + &.active { + background: rgba(#fff, 0.1); + } + } + } + } +} diff --git a/sass/components/hero.scss b/sass/components/hero.scss new file mode 100644 index 0000000..631eb78 --- /dev/null +++ b/sass/components/hero.scss @@ -0,0 +1,29 @@ +.hero { + margin-bottom: 100px; + + .bg { + width: 100%; + height: 60vh; + display: flex; + justify-content: flex-start; + align-items: center; + background-size: cover; + -webkit-background-size: cover; + background-repeat: no-repeat; + + h2 { + color: #fff; + font-size: 48px; + + @media (max-width: 992px) { + font-size: 38px; + } + @media (max-width: 768px) { + font-size: 28px; + } + @media (max-width: 575px) { + font-size: 24px; + } + } + } +} diff --git a/sass/components/lottery.scss b/sass/components/lottery.scss new file mode 100644 index 0000000..6ad0ec6 --- /dev/null +++ b/sass/components/lottery.scss @@ -0,0 +1,77 @@ +.lottery { + .lottery-popup-button { + position: fixed; + z-index: 12; + cursor: pointer; + background-position: center; + background-size: 100% 100%; + @extend %defaultTransition; + + &:hover { + @include transform(scale(1.1)); + } + } + + .lottery-popup { + position: fixed; + top: 0; + left: 0; + z-index: 13; + width: 100vw; + height: 100vh; + overflow: hidden; + visibility: hidden; + opacity: 1; + + .relativePos { + width: 100%; + height: 100%; + } + + .bg { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 13; + background: rgba(#000, 0.5); + } + + .content { + position: absolute; + top: 50%; + left: 50%; + z-index: 14; + max-width: calc(100% - 30px); + @include transform(translate(-50%, -50%) scale(0)); + background-position: center; + background-size: cover; + background-repeat: no-repeat; + @include borderRadius(10px); + @include boxShadow(0 4px 8px rgba(#000, 0.5)); + + .closeBtn { + position: absolute; + top: 0; + right: 0; + font-size: 22px; + padding: 10px; + cursor: pointer; + color: rgba(#000, 0.4); + @extend %defaultTransition; + + &:hover { + color: rgba(red, 0.4); + } + } + + .btnBox { + position: absolute; + bottom: 20px; + left: 50%; + @include transform(translateX(-50%)); + } + } + } +} diff --git a/sass/components/messenger.scss b/sass/components/messenger.scss new file mode 100644 index 0000000..f283ec0 --- /dev/null +++ b/sass/components/messenger.scss @@ -0,0 +1,194 @@ +.messenger { + margin-top: 50px; + + .messenger-title { + margin-bottom: 20px; + } + + .messenger-body { + height: 100%; + $newMsg-height: 70px; + $min-height: 400px; + background-color: rgba(#e0e6ed, 0.75); + min-height: $min-height; + border-top-left-radius: 15px; + border-top-right-radius: 15px; + position: relative; + overflow: hidden; + + .messages { + min-height: calc(#{$min-height} - #{$newMsg-height}); + margin-bottom: $newMsg-height; + padding: 20px 10px; + + &.no-msg { + display: flex; + justify-content: center; + align-items: center; + + p { + color: #000; + } + } + + .message { + width: 100%; + margin-bottom: 30px; + --avatar-width: 50px; + + .txt { + width: 60%; + background: #fff; + @include borderRadius(15px); + padding: 15px; + padding-bottom: 35px; + margin-bottom: 10px; + position: relative; + + @media (max-width: 768px) { + width: calc(100% - 60px); + } + + img { + width: 100%; + margin-bottom: 15px; + } + + p:not(.date) { + color: #000; + } + + .date { + position: absolute; + bottom: 0; + font-size: 12px; + } + } + + svg { + width: var(--avatar-width); + display: block; + } + + &.user { + .txt { + margin-right: calc(var(--avatar-width) - 5px); + + .date { + left: 5px; + } + } + } + + &.asan-admin { + .txt { + margin-right: auto; + margin-left: calc(var(--avatar-width) - 5px); + + .date { + right: 5px; + } + } + + svg { + margin-right: auto; + } + } + + &.unread { + .txt { + background: rgba(orange, 0.2); + } + } + } + } + + .newMsg { + background-color: rgba(#8a92a9, 0.16); + width: 100%; + height: $newMsg-height; + position: absolute; + bottom: 0; + left: 0; + + .relativePos { + display: flex; + justify-content: flex-start; + align-items: center; + } + + input[type='text'] { + border: none; + background-color: #fff; + padding: 20px; + padding-left: 150px; + width: calc(100% - 70px); + margin-right: 5px; + @include borderRadius(50px); + @include boxSizing(border-box); + } + + input[type='file'] { + width: 0; + height: 0; + visibility: hidden; + } + + label { + background-image: url("data:image/svg+xml,%3Csvg fill='rgba(6,84,149,0.5)' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 605.942 605.942' style='enable-background:new 0 0 605.942 605.942;' xml:space='preserve'%3E%3Cg%3E%3Cpath d='M435.099,0c-45.632,0-88.544,17.777-120.822,50.055L50.036,314.276c-66.603,66.622-66.603,175.018,0,241.64 c32.269,32.259,75.171,50.026,120.808,50.026s88.544-17.768,120.812-50.026l19.757-19.751l-12.321,0.588 c-0.062,0.005-0.728,0.033-1.889,0.033c-5.709,0-25.776-0.746-44.309-10.312l-2.815-1.454l-2.43,2.027 c-21.425,17.915-48.706,27.779-76.806,27.779c-32.034,0-62.118-12.432-84.714-35.009c-22.592-22.591-35.037-52.68-35.037-84.724 s12.445-62.127,35.037-84.724L350.37,86.149c22.592-22.591,52.685-35.037,84.729-35.037c32.04,0,62.128,12.446,84.724,35.037 c46.666,46.703,46.666,122.696,0.005,169.399L354.798,420.19c-8.291,8.306-19.771,12.881-32.331,12.881 c-13.641,0-26.847-5.394-36.242-14.808c-9.018-9.008-14.181-21.563-14.176-34.463c0-12.604,4.776-24.304,13.431-32.938 L432.541,204.36l-36.099-36.094L249.366,314.75c-18.479,18.479-28.539,43.284-28.334,69.84 c0.206,26.444,10.538,51.222,29.09,69.772c18.871,18.867,45.226,29.687,72.321,29.687c26.244,0,50.566-9.863,68.486-27.765 l164.986-164.628c66.589-66.631,66.589-175.018,0-241.601C523.643,17.777,480.731,0,435.099,0z'/%3E%3C/g%3E%3C/svg%3E%0A"); + background-size: 100%; + -webkit-background-size: 100%; + background-repeat: no-repeat; + display: block; + width: 35px; + height: 35px; + cursor: pointer; + position: absolute; + top: 50%; + left: 10px; + @include transform(translateY(-50%)); + } + + img { + width: 50px; + height: 50px; + object-fit: cover; + @include borderRadius(50%); + @extend %defaultBoxShadow; + border: 2px solid $theme; + position: absolute; + top: 50%; + left: 5px; + @include transform(translateY(-50%)); + } + + #clearFile { + display: inline-block; + color: red; + font-size: 25px; + position: absolute; + top: 0; + left: 40px; + cursor: pointer; + } + + button { + position: absolute; + top: 50%; + left: 80px; + @include transform(translateY(-50%)); + @include borderRadius(25px); + } + + .validationMsg { + position: absolute; + right: 15px; + bottom: 65px; + + p { + color: red; + } + } + } + } +} diff --git a/sass/components/mobile-menu.scss b/sass/components/mobile-menu.scss new file mode 100644 index 0000000..05e7bd7 --- /dev/null +++ b/sass/components/mobile-menu.scss @@ -0,0 +1,47 @@ +.mobile-menu { + display: none; + + .body { + background: $theme; + padding: 20px 25px; + overflow: auto; + position: fixed; + top: 55px; + left: 0; + z-index: 15; + height: 100vh; + @include boxShadow(10px 10px 10px rgba(#000, 0.4)); + + ul { + margin-top: 20px; + + li { + margin-bottom: 20px; + + a { + color: #fff; + padding: 15px 0; + + span, + i { + color: #fff; + } + } + } + } + + .title { + border-bottom: 1px solid rgba(#fff, 0.2); + } + } + + .bg { + background: rgba(#000, 0.4); + width: 100vw; + height: 100vh; + position: fixed; + top: 60px; + left: 0; + z-index: 14; + } +} diff --git a/sass/components/pwa-dialog.scss b/sass/components/pwa-dialog.scss new file mode 100644 index 0000000..1565067 --- /dev/null +++ b/sass/components/pwa-dialog.scss @@ -0,0 +1,44 @@ +.pwa_dialog { + display: none; + position: fixed; + z-index: 50; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + background: rgba(#000, 0.5); + + .dialog-wrapper { + position: fixed; + z-index: 51; + bottom: 50px; + left: 50%; + @include transform(translateX(-50%)); + background: #fff; + padding: 20px; + @extend %defaultBorderRadius; + @extend %defaultBoxShadow; + text-align: center; + + @media (max-width: 768px) { + width: 95%; + } + + .btns { + margin-top: 30px; + + button { + margin: 5px 10px; + } + + .cancel { + border-color: $theme; + color: $theme; + } + } + } + + &.active { + display: block !important; + } +} diff --git a/sass/components/representation-form.scss b/sass/components/representation-form.scss new file mode 100644 index 0000000..0b74517 --- /dev/null +++ b/sass/components/representation-form.scss @@ -0,0 +1,121 @@ +.representation-form { + h1 { + text-align: center; + margin-bottom: 50px; + font-weight: bold; + } + + .notic { + border: 2px dashed $theme; + padding: 20px; + background: rgba($theme, 0.1); + @include boxSizing(border-box); + + p { + font-weight: bold; + color: $theme; + line-height: 1.8em; + } + } + + .notic2 { + margin-top: 80px; + margin-bottom: -30px; + + &::before { + content: ''; + $radius: 10px; + display: inline-block; + width: $radius; + height: $radius; + @include borderRadius(100%); + background: #000; + margin-left: 10px; + } + + span { + font-weight: bold; + color: #000; + } + } + + .box { + border: 2px solid #000; + margin-top: 50px; + + .box-title { + background: $theme; + padding: 10px; + + p { + color: #fff; + font-size: 20px; + font-weight: bold; + text-align: center; + } + } + + table { + width: 100%; + + th { + font-weight: bold; + background: $theme; + color: #fff; + } + + td, + th { + border: 1px solid #000; + padding: 10px; + } + + tbody { + tr { + position: relative; + + i { + display: block; + position: absolute; + top: 50%; + left: 10px; + @include transform(translateY(-50%)); + color: rgba(#000, 0.3); + cursor: pointer; + padding: 5px; + font-size: 15px; + @extend %defaultTransition; + + &:hover { + color: red; + } + } + } + } + .add-btn { + padding: 0; + + button { + width: 100%; + height: 100%; + padding: 10px; + border: none; + background: rgba(#000, 0.1); + color: #000; + cursor: pointer; + @extend %defaultTransition; + + &:hover { + background: rgba(#000, 0.5); + color: #fff; + } + } + } + } + } + + .post-form { + margin: 50px 0; + text-align: center; + } +} diff --git a/sass/components/table-box.scss b/sass/components/table-box.scss new file mode 100644 index 0000000..b579d21 --- /dev/null +++ b/sass/components/table-box.scss @@ -0,0 +1,525 @@ +.tableBox { + width: 100%; + overflow: auto; + + table { + display: block; + width: 100%; + min-width: 1000px; + + thead, + tbody { + display: block; + + tr { + display: flex; + justify-content: space-between; + width: 100%; + @include borderRadius(5px); + + th, + td { + display: block; + width: 100%; + text-align: right; + + &.index { + width: 80px; + } + } + } + } + + thead { + tr { + background: $tableHead; + color: #fff; + padding: 15px 10px; + + th { + &:last-child { + padding-left: 10px; + text-align: left; + } + } + } + } + + tbody { + margin-top: 20px; + tr { + margin-bottom: 5px; + background: $tableBody; + padding: 5px 10px; + @extend %defaultTransition; + + &:hover { + background: $tableBodyHover !important; + } + + &:nth-child(even) { + background-color: $tableStrip; + } + + .trashIcon-btn { + // border: 1px solid gray; + border: none; + background: transparent; + padding: 4px 8px; + cursor: pointer; + @include borderRadius(4px); + + &:hover { + i { + color: red; + } + } + + i { + color: gray; + @extend %defaultTransition; + } + } + + td { + &:last-child { + text-align: left; + } + + &.noItem { + text-align: center !important; + } + + span { + display: inline-block; + padding: 4px 0; + color: #000; + } + + .btn { + padding: 4px 8px; + } + } + } + } + + &.qaurantee { + &.atl{ + min-width: 1300px; + .index-atl{ + min-width: 75px; + max-width: 75px; + } + } + .brand { + width: 120px; + display: flex; + justify-content: center; + align-items: center; + + img { + display: block; + width: 100%; + } + } + + tbody { + tr { + &.unread { + background: rgba(orange, 0.2); + } + } + } + } + + &.history { + min-width: 1200px; + tr { + th { + font-size: 12px; + } + + td, + th { + &:last-child { + text-align: right; + } + + &.index { + width: 50px; + } + + &.date { + width: 100px; + } + + &.transID { + width: 110px; + } + + &.itemID { + width: 80px; + } + + &.itemCode { + width: 80px; + } + + &.itemName { + width: 400px; + } + + &.quantity { + width: 90px; + } + + &.repairCount { + width: 90px; + } + + &.remainCount { + width: 60px; + } + } + } + } + + &.tickets { + tr { + .title { + width: 50%; + } + + .transactionId { + width: 130px; + } + + .date { + width: 150px; + } + + .details { + width: 100px; + } + } + } + + &.drafts { + tr { + .description { + width: 100%; + } + + .brand { + width: 120px; + display: flex; + justify-content: center; + align-items: center; + + img { + display: block; + width: 100%; + } + } + + .quantity { + width: 120px; + text-align: center; + } + + .details { + width: 200px; + } + } + } + + &.agent-requests { + tr { + th, + td { + font-size: 14px; + } + + .description { + width: 50%; + margin-left: 20px; + } + + .createDate { + width: 250px; + } + + .quantity { + width: 120px; + } + + .details { + width: 200px; + } + } + + &.extended { + .description { + width: 400px; + } + .createDate { + width: 100px; + margin-left: 20px; + } + .sendDate { + width: 100px; + margin-left: 20px; + } + .trackingCode { + width: 100px; + margin-left: 20px; + } + .status { + width: 120px; + margin-left: 20px; + } + .deliveryCode { + width: 140px; + margin-left: 20px; + } + .quantity { + width: 100px; + } + .details { + width: 80px; + } + } + } + + &.pieces-items { + td { + span { + font-size: 14px; + } + } + .index { + width: 50px; + } + + .recieptDate { + width: 110px; + } + + .itemName { + width: 300px; + } + + .itemSerial { + width: 120px; + } + + .guaranteeStatus { + width: 120px; + } + + .pieceName { + width: 200px; + } + + .pieceCode { + width: 100px; + } + + .quantity { + width: 60px; + } + .removeBtn { + width: 60px; + } + } + + &.report-items { + th { + text-align: center; + font-size: 14px; + line-height: 1.6em; + } + td { + text-align: center; + padding: 0 10px; + span { + font-size: 14px; + line-height: 1.6em; + } + } + .index { + width: 60px; + } + + .customerName { + width: 100px; + } + + .customerTel { + width: 100px; + } + + .itemName { + width: 130px; + } + .itemSerial { + width: 100px; + } + .productIssue { + width: 300px; + } + .usedPieces { + width: 300px; + } + .recieveDate { + width: 100px; + } + .deliverDate { + width: 100px; + } + .removeBtn { + width: 50px; + } + } + + &.drafts-modal { + min-width: 100%; + + tr { + .description { + width: 100%; + } + + .brand { + width: 120px; + display: flex; + justify-content: center; + align-items: center; + + img { + display: block; + width: 100%; + } + } + + .quantity { + width: 120px; + text-align: center; + } + + .details { + padding: 0; + width: 100px; + } + + .name { + width: 70%; + } + + .addStatus { + padding: 0; + width: 80px; + display: flex; + justify-content: flex-end; + align-items: center; + + i { + font-size: 20px; + cursor: pointer; + } + } + } + } + + &.formItems { + thead { + tr { + background: $tableHead; + + th { + font-size: 13px; + font-family: 'iranYekanB'; + color: #fff; + } + } + } + + tbody { + margin-top: 5px; + } + + tr { + td, + th { + text-align: center; + + &.index { + text-align: right; + } + + &.itemName { + text-align: right; + width: 600px; + } + + &.quantity { + width: 70px; + } + + &.itemSerial { + width: 130px; + } + + &.date { + width: 140px; + } + + &.selector { + width: 50px; + display: flex; + justify-content: flex-end; + align-items: center; + + .el-checkbox { + margin-top: 2px; + } + } + + &.removeBtn { + width: 60px; + } + + .itemsDeleteBtn { + padding: 4px; + @extend %defaultTransition; + cursor: pointer; + + &:hover { + color: $red; + } + } + } + + th { + &:last-child { + padding-left: 0; + } + } + } + } + + &.lotteryWinners { + min-width: 300px; + + .name { + width: 50%; + } + + .mobile { + span { + direction: ltr; + } + } + } + } +} diff --git a/sass/components/upload-assets.scss b/sass/components/upload-assets.scss new file mode 100644 index 0000000..9cf0805 --- /dev/null +++ b/sass/components/upload-assets.scss @@ -0,0 +1,50 @@ +.upload-assets { + .title { + text-align: center; + background: rgba($theme, 0.03); + padding: 15px; + @extend %defaultBorderRadius; + border: 1px dashed $theme; + + h3 { + b { + color: $theme; + } + } + } + + .level-description { + margin-top: 50px; + + h3 { + margin-bottom: 20px; + } + } + + .upload-description { + margin-top: 50px; + + ul { + margin-top: 20px; + + li { + list-style: disc; + list-style-position: inside; + margin-bottom: 10px; + + span { + color: #000; + } + } + } + } + + .upload { + margin-top: 50px; + + p { + margin-top: 20px; + margin-bottom: 40px; + } + } +} diff --git a/sass/main.scss b/sass/main.scss new file mode 100644 index 0000000..129b970 --- /dev/null +++ b/sass/main.scss @@ -0,0 +1,61 @@ +// app modules +@import './app/variables.scss'; +@import './app/mixins.scss'; +@import './app/extentions.scss'; +@import './app/fonts.scss'; +@import './app/global.scss'; +@import './app/CKEditorStyle.scss'; +@import './app/el_ui_rtl.scss'; +@import './app/el-ui-custom.scss'; +@import './app/printStyles.scss'; + +// components +@import './components/lottery.scss'; +@import './components/footer.scss'; +@import './components/header.scss'; +@import './components/hero.scss'; +@import './components/messenger.scss'; +@import './components/pwa-dialog.scss'; +@import './components/mobile-menu.scss'; +@import './components/table-box.scss'; +@import './components/form.scss'; +@import './components/btn.scss'; +@import './components/representation-form.scss'; +@import './components/upload-assets.scss'; + +// pages +@import './pages/error.scss'; +@import './pages/home.scss'; +@import './pages/faq.scss'; +@import './pages/learning.scss'; +@import './pages/learning-post.scss'; +@import './pages/warranty-terms.scss'; +@import './pages/downloads.scss'; +@import './pages/downloads-details.scss'; +@import './pages/about.scss'; +@import './pages/contact.scss'; +@import './pages/user-auth.scss'; +@import './pages/activation.scss'; +@import './pages/agents.scss'; +@import './pages/representation.scss'; +@import './pages/lottery.scss'; +@import './pages/agent-benefits.scss'; + +// user dashboard pages +@import './pages/user-dashboard/index.scss'; +@import './pages/user-dashboard/layout.scss'; +@import './pages/user-dashboard/agent-guarantee-details.scss'; +@import './pages/user-dashboard/agent-reports.scss'; +@import './pages/user-dashboard/agent-request-details.scss'; +@import './pages/user-dashboard/agent-requests.scss'; +@import './pages/user-dashboard/announcements.scss'; +@import './pages/user-dashboard/factor.scss'; +@import './pages/user-dashboard/guarantee-details.scss'; +@import './pages/user-dashboard/guarantee.scss'; +@import './pages/user-dashboard/post-address.scss'; +@import './pages/user-dashboard/post-receipt.scss'; +@import './pages/user-dashboard/post.scss'; +@import './pages/user-dashboard/profile.scss'; +@import './pages/user-dashboard/ticket-messenger.scss'; +@import './pages/user-dashboard/tickets.scss'; +@import './pages/user-dashboard/verify.scss'; diff --git a/sass/pages/about.scss b/sass/pages/about.scss new file mode 100644 index 0000000..e9deb2e --- /dev/null +++ b/sass/pages/about.scss @@ -0,0 +1,56 @@ +.about--page { + .txt { + display: flex; + align-items: center; + + h2 { + color: #fff; + + @media (max-width: 575px) { + width: 100%; + text-align: center !important; + } + } + + p { + color: rgba(#fff, 0.7); + } + } + + .s1 { + text-align: center; + padding: 80px 0; + background: #fff; + } + + .s2 { + padding: 100px 0; + background: #142b3e; + } + + .s3 { + padding: 100px 0; + background: url('/assets/img/about/s3.jpg'); + background-size: cover; + -webkit-background-size: cover; + background-repeat: no-repeat; + } + + .s4 { + padding: 100px 0; + background: #fff; + + h2, + p { + color: #000; + } + } + + .s5 { + padding: 100px 0; + background: url('/assets/img/about/s5.jpg'); + background-size: cover; + -webkit-background-size: cover; + background-repeat: no-repeat; + } +} diff --git a/sass/pages/activation.scss b/sass/pages/activation.scss new file mode 100644 index 0000000..beb96f1 --- /dev/null +++ b/sass/pages/activation.scss @@ -0,0 +1,48 @@ +.activation-page { + display: flex; + justify-content: center; + align-items: center; + + .s1 { + flex-basis: 100%; + padding: 150px 0; + + .msgBox, + .content { + width: 100%; + max-width: 600px; + @extend %defaultBorderRadius; + @include boxShadow(0 5px 10px rgba(#000, 0.5)); + margin: 0 auto; + text-align: center; + } + + .msgBox { + padding: 10px 25px; + + &.success { + background: #37d200; + } + + &.err { + background: tomato; + } + + h2 { + color: #fff; + font-size: 20px; + } + } + + .content { + background: #fff; + margin-top: 30px; + padding: 25px; + + .btn { + display: inline-block; + margin-top: 10px; + } + } + } +} diff --git a/sass/pages/agent-benefits.scss b/sass/pages/agent-benefits.scss new file mode 100644 index 0000000..bd4c0f1 --- /dev/null +++ b/sass/pages/agent-benefits.scss @@ -0,0 +1,96 @@ +.agent-benefits--page { + .hero { + .bg { + background-image: url('/assets/img/agents/agents-hero.jpg'); + } + } + + .panel { + width: 100%; + background: #fff; + @extend %defaultBorderRadius; + padding: 20px; + @include boxSizing(border-box); + + &.not-logged-in { + text-align: center; + + a { + color: $theme; + } + } + + &.is-agent { + text-align: center; + + a { + color: $theme; + } + } + } + + .s1 { + .txtBox { + overflow: hidden; + + h3 { + margin-bottom: 20px; + } + + ul { + li { + list-style: disc; + margin-right: 20px; + margin-bottom: 10px; + + p { + a { + color: $theme; + } + } + } + } + } + + .links { + margin-top: 50px; + display: flex; + flex-wrap: wrap; + justify-content: space-around; + + .item { + flex-basis: 32%; + overflow: hidden; + @include boxSizing(border-box); + @extend %defaultBorderRadius; + @extend %defaultBoxShadow; + + @media (max-width: 768px) { + flex-basis: 100%; + margin-bottom: 15px; + } + + button, + a { + display: block; + width: 100%; + height: 100%; + padding: 50px 15px; + border: none; + background: rgba(#000, 0.05); + text-align: center; + color: #000; + font-size: 16px; + font-family: 'iranYekanR'; + cursor: pointer; + @extend %defaultTransition; + + &:hover { + background: $theme; + color: #fff; + } + } + } + } + } +} diff --git a/sass/pages/agents.scss b/sass/pages/agents.scss new file mode 100644 index 0000000..a600a78 --- /dev/null +++ b/sass/pages/agents.scss @@ -0,0 +1,63 @@ +.agents--page { + .hero { + .bg { + background-image: url('/assets/img/agents/agents-hero.jpg'); + } + } + + .panel { + width: 100%; + background: #fff; + @extend %defaultBorderRadius; + padding: 20px; + @include boxSizing(border-box); + + &.not-logged-in { + text-align: center; + + a { + color: $theme; + } + } + + &.is-agent { + text-align: center; + + a { + color: $theme; + } + } + } + + .showDetailsBtn { + background: transparent; + border: 1px solid rgba(#000, 0.2); + @include borderRadius(4px); + padding: 4px 16px; + cursor: pointer; + @extend %defaultTransition; + + i { + @extend %defaultTransition; + color: rgba(#000, 0.5); + } + + &:hover { + background: $theme; + border-color: $theme; + + i { + color: #fff; + } + } + } + + .agentDetailsModal { + input { + &:disabled { + color: rgba(#000, 0.8); + cursor: auto; + } + } + } +} diff --git a/sass/pages/contact.scss b/sass/pages/contact.scss new file mode 100644 index 0000000..318da41 --- /dev/null +++ b/sass/pages/contact.scss @@ -0,0 +1,89 @@ +.contact--page { + background: url('/assets/img/contact/bg.jpg'); + background-size: cover; + -webkit-background-size: cover; + background-repeat: no-repeat; + + .s1 { + min-height: calc(100vh - 85px); + display: flex; + align-items: center; + padding: 150px 0; + + .message { + display: flex; + justify-content: center; + + .form_1 { + max-width: 450px; + @extend %defaultBoxShadow; + + @media (max-width: 992px) { + max-width: 100%; + } + + .title { + text-align: center; + margin-bottom: 30px; + + p { + font-size: 24px; + color: #000; + } + } + + .email { + direction: ltr; + text-align: right; + } + } + } + + .contact { + display: flex; + align-items: center; + + a, + p, + span, + i { + color: #fff; + @extend %defaultTransition; + } + + ul { + li { + margin-bottom: 30px; + + a { + font-size: 20px; + + span { + direction: ltr !important; + display: inline-block; + } + + @media (max-width: 575px) { + font-size: 16px; + } + + &:hover { + span, + i { + color: #00bfff; + } + } + } + + p { + font-size: 20px; + + @media (max-width: 575px) { + font-size: 16px; + } + } + } + } + } + } +} diff --git a/sass/pages/downloads-details.scss b/sass/pages/downloads-details.scss new file mode 100644 index 0000000..84e54d5 --- /dev/null +++ b/sass/pages/downloads-details.scss @@ -0,0 +1,104 @@ +.download-details--page { + .s1 { + margin-top: 80px; + + .item { + background: #fff; + padding: 25px; + @extend %defaultBorderRadius; + + .title { + text-align: center; + + h1 { + display: inline-block; + font-size: 20px; + + &::after { + content: ''; + display: block; + width: 105%; + height: 2px; + background: $theme; + @include transform(translateX(2.5%) translateY(20px)); + } + + @media (max-width: 768px) { + font-size: 18px; + } + } + img { + width: 25px; + } + } + + .description { + display: flex; + flex-wrap: wrap; + margin: 50px 0; + + .imgBox { + flex-basis: 30%; + + @media (max-width: 768px) { + flex-basis: 100%; + order: 0; + } + + img { + width: 100%; + } + } + + .ck-content { + flex-basis: 70%; + + @media (max-width: 768px) { + flex-basis: 100%; + order: 1; + } + } + } + + .download { + .title { + text-align: right; + display: flex; + justify-content: flex-start; + align-items: center; + margin-bottom: 20px; + + h3 { + margin-right: 10px; + color: $theme; + } + } + + ul { + li { + margin-bottom: 5px; + + a { + span, + i { + @extend %defaultTransition; + font-weight: bold; + + &:hover { + color: $theme; + } + } + } + } + } + } + + .zip-pass { + p { + color: $theme; + font-weight: bold; + } + } + } + } +} diff --git a/sass/pages/downloads.scss b/sass/pages/downloads.scss new file mode 100644 index 0000000..910c275 --- /dev/null +++ b/sass/pages/downloads.scss @@ -0,0 +1,244 @@ +.download--page { + .hero { + margin-bottom: 50px; + + .bg { + background-image: url('/assets/img/download/hero.jpg'); + } + } + + .s1 { + padding-bottom: 50px; + + .filters { + background-color: rgba(#000, 0.15); + @extend %defaultBorderRadius; + //@extend %defaultBoxShadow; + overflow: hidden; + + ul { + display: flex; + flex-wrap: wrap; + padding: 5px; + + li { + margin: 5px; + + @media (max-width: 575px) { + margin: 3px; + } + + a { + display: block; + background: rgba(#000, 0.3); + color: #fff; + padding: 3px 15px; + cursor: pointer; + @include borderRadius(10px); + @extend %defaultTransition; + + &:hover { + background: rgba(#000, 0.7); + } + + &.active { + background: rgba(#000, 0.7); + } + } + } + } + } + } + + .s2 { + $imgSize: 180px; + $titleMinHeight: 85px; + $captionMinHeight: 100px; + + .item { + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-items: center; + background: #fff; + @extend %defaultBorderRadius; + @extend %defaultBoxShadow; + overflow: hidden; + padding: 25px 15px; + height: 100%; + + @media (max-width: 992px) { + padding: 25px 15px; + } + + .imgBox { + flex-basis: $imgSize; + height: $imgSize; + display: flex; + justify-content: center; + align-items: center; + background: rgba(0, 0, 0, 0.05); + @include borderRadius(50%); + + @media (max-width: 768px) { + flex-basis: 100%; + background-color: transparent; + @include borderRadius(0); + height: auto; + + img { + @include borderRadius(0); + } + } + + img { + width: 60%; + @include borderRadius(50%); + + @media (max-width: 575px) { + width: 100%; + } + } + } + + .txtBox { + flex-basis: calc(100% - #{$imgSize}); + padding-right: 15px; + height: 100%; + + @media (max-width: 768px) { + flex-basis: 100%; + margin-top: 20px; + height: auto; + } + + h2 { + margin-bottom: 20px; + font-size: 18px; + + @media (min-height: 1400px) { + min-height: $titleMinHeight; + } + + b { + color: $theme; + } + + span { + display: inline-block; + background: rgba(0, 0, 0, 0.3); + padding: 0 5px; + font-size: 13px; + @include borderRadius(10px); + color: #fff; + } + } + + p { + margin-bottom: 15px; + + @media (min-width: 1400px) { + min-height: $captionMinHeight; + } + } + + a { + display: inline-block; + } + } + } + + .untrack { + margin-top: 40px; + margin-bottom: 100px; + + h3 { + font-size: 25px; + margin-bottom: 30px; + } + + .latest { + position: relative; + padding: 35px 20px; + background-image: linear-gradient(#8ca5db, #ba93d6); + @extend %defaultBorderRadius; + @extend %defaultBoxShadow; + overflow: hidden; + height: 100%; + + @media (max-width: 992px) { + padding: 50px 15px; + } + + &:hover { + .normal { + top: -100%; + } + + .hover { + @include transform(translateY(0)); + opacity: 1; + } + } + + .normal { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + @extend %defaultTransition; + position: absolute; + top: 0; + left: 0; + + img { + width: 35%; + margin-bottom: 20px; + } + + h2 { + color: #5c5f61; + padding: 0 15px; + text-align: center; + font-size: 20px; + + @media (max-width: 1200px) { + font-size: 18px; + } + } + } + + .hover { + width: 100%; + height: 100%; + @extend %defaultTransition; + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + @include transform(translateY(100%)); + opacity: 0; + + h2 { + color: #fff; + margin-bottom: 10px; + min-height: $titleMinHeight; + font-size: 22px; + } + + p { + color: #fff; + margin-bottom: 30px; + } + } + } + } + } + + .s3 { + direction: ltr; + text-align: center; + } +} diff --git a/sass/pages/error.scss b/sass/pages/error.scss new file mode 100644 index 0000000..ca0ff44 --- /dev/null +++ b/sass/pages/error.scss @@ -0,0 +1,24 @@ +.error--page { + min-height: 100vh; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + + h1 { + font-family: sans-serif; + font-size: 60px; + } + + p { + text-transform: uppercase; + font-family: sans-serif; + font-size: 14px; + margin-top: -20px; + } + + a { + margin-top: 20px; + font-family: 'sahel', sans-serif; + } +} diff --git a/sass/pages/faq.scss b/sass/pages/faq.scss new file mode 100644 index 0000000..c8ba1f6 --- /dev/null +++ b/sass/pages/faq.scss @@ -0,0 +1,73 @@ +.FAQ--page { + .hero { + .bg { + background-image: url('/assets/img/FAQ/hero.jpg'); + } + + .btn { + margin-top: 20px; + } + } + + .s1 { + .q-a { + background: #fff; + padding: 25px 80px 25px 25px; + @include borderRadius(5px); + @extend %defaultBoxShadow; + overflow: hidden; + position: relative; + cursor: pointer; + + @media (max-width: 575px) { + padding-right: 45px; + } + + &.collapsed { + h3 { + height: 27px; + margin-bottom: 0; + } + + i { + @include transform(rotate(90deg)); + } + } + + i { + display: inline-block; + font-size: 30px; + color: $theme; + position: absolute; + top: 25px; + right: 25px; + @extend %defaultTransition; + + @media (max-width: 575px) { + right: 10px; + } + } + + h3 { + margin-bottom: 40px; + line-height: 1.6em; + overflow: hidden; + @extend %defaultTransition; + } + + .answer { + b { + display: inline-block; + color: $theme; + margin-bottom: 10px; + } + } + } + } + + .submit { + span { + color: #fff; + } + } +} diff --git a/sass/pages/home.scss b/sass/pages/home.scss new file mode 100644 index 0000000..ead62e5 --- /dev/null +++ b/sass/pages/home.scss @@ -0,0 +1,201 @@ +.home--page { + position: relative; + overflow-y: auto; + + .bg { + width: 100%; + height: calc(100vh - 50px); + background-image: url('/assets/img/home/bg.jpg'); + background-size: cover; + -webkit-background-size: cover; + background-repeat: no-repeat; + + @media (max-width: 992px) { + position: fixed; + $topOffset: 50px; + height: calc(100vh - #{$topOffset}); + top: $topOffset; + left: 0; + z-index: 0; + } + } + + .txtBox { + position: absolute; + top: 50%; + left: 50%; + width: 100%; + z-index: 1; + max-width: 1000px; + @include transform(translate(-50%, -50%)); + padding: 28px 15px; + background: rgba(#fff, 0.5); + backdrop-filter: blur(5px); + overflow: hidden; + + @media (max-width: 992px) { + position: relative; + $topOffset: 50px; + height: calc(100vh - #{$topOffset}); + top: 0; + left: 0; + padding-top: $topOffset; + @include transform(translate(0, 0)); + overflow-y: auto; + display: flex; + justify-content: center; + //align-items: center; + + .container-fluid { + margin-top: auto; + margin-bottom: auto; + } + } + + @media (max-width: 575px) { + padding-top: 20px; + padding-bottom: 10px; + + .container-fluid { + padding: 0; + + .row { + & > div { + padding: 0 5px; + } + } + } + } + + .boxBg { + height: 100%; + padding: 15px; + background: #dbd9da; + + h1, + p, + h2 { + color: #000; + } + + p { + @media (max-width: 575px) { + text-align: justify; + } + } + + h1, + h2 { + font-size: 25px; + margin-top: 10px; + margin-bottom: 20px; + } + + &.inquiry { + $c1: #e0e6ed; + $c2: #707070; + + .switchBox { + margin-top: 40px; + text-align: center; + + .switch { + display: flex; + justify-content: space-between; + align-items: center; + + button { + width: 50%; + font-size: 12px; + padding: 2px 8px; + background: transparent; + color: rgba($c2, 0.5); + @extend %defaultTransition; + cursor: pointer; + border: 1px solid rgba($c2, 0.2); + + &:hover { + color: rgba($c2, 0.8); + background: rgba($c1, 0.1); + } + + &.active { + background: rgba($c1, 1) !important; + color: $c2; + border-color: rgba($c2, 0.5); + } + } + } + } + + .checkSerial { + input { + background: $c1; + @extend %appearance; + padding: 10px; + border: none; + margin-top: 5px; + margin-bottom: 5px; + width: 100%; + @include boxSizing(border-box); + + &::placeholder { + color: $c2; + } + } + + button { + display: inline-block; + background: $theme; + color: #fff; + border: 1px solid $theme; + padding: 13px; + cursor: pointer; + @include transition(0.3s); + width: 100%; + @include borderRadius(0); + + span { + line-height: 1.3em; + } + + &:disabled { + background: gray; + border-color: gray; + } + + &:hover { + opacity: 0.8; + } + } + } + } + + &.description { + display: flex; + flex-direction: column; + + p { + margin-bottom: 10px; + } + + .btns { + margin-top: auto; + + a { + @include borderRadius(0); + display: inline-block; + + @media (max-width: 575px) { + width: 100%; + text-align: center; + &:first-child { + margin-bottom: 10px; + } + } + } + } + } + } + } +} diff --git a/sass/pages/learning-post.scss b/sass/pages/learning-post.scss new file mode 100644 index 0000000..14103c2 --- /dev/null +++ b/sass/pages/learning-post.scss @@ -0,0 +1,29 @@ +.learning--post--page { + .s1 { + margin-top: 100px; + + .post { + background: #fff; + @extend %defaultBorderRadius; + @extend %defaultBoxShadow; + + .ck-content { + padding: 25px 15px 35px; + } + + video.media { + width: 100%; + //height: 600px; + background: #000; + border-top-left-radius: 15px; + border-top-right-radius: 15px; + } + + img.media { + width: 100%; + border-top-left-radius: 15px; + border-top-right-radius: 15px; + } + } + } +} diff --git a/sass/pages/learning.scss b/sass/pages/learning.scss new file mode 100644 index 0000000..6c77d43 --- /dev/null +++ b/sass/pages/learning.scss @@ -0,0 +1,111 @@ +.learning--page { + .hero { + .bg { + background-image: url('/assets/img/learning/hero.jpg'); + } + } + + .s1 { + .post { + margin-bottom: 80px; + + .txtBox { + position: relative; + z-index: 1; + background: #fff; + padding: 35px 25px; + @include boxSizing(border-box); + @extend %defaultBorderRadius; + @extend %defaultBoxShadow; + width: 120%; + + @media (max-width: 992px) { + width: 100%; + } + + h2 { + margin-bottom: 30px; + } + + p { + margin-bottom: 25px; + } + + @media (max-width: 992px) { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + + @media (max-width: 575px) { + padding: 35px 15px; + } + } + + .imgBox { + display: block; + position: relative; + z-index: 0; + @extend %defaultBorderRadius; + @extend %defaultBoxShadow; + overflow: hidden; + + &:hover { + .imgMask { + background-color: rgba(#000, 0.4); + } + } + + img { + width: 100%; + height: 100%; + object-fit: cover; + display: block; + min-height: 400px; + + @media (max-width: 1400px) { + //min-height: 400px; + } + } + + i { + display: block; + position: absolute; + top: 50%; + left: 50%; + @include transform(translate(-50%, -50%)); + z-index: 1; + font-size: 55px; + color: #fff; + } + + .imgMask { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + z-index: 0; + @extend %defaultTransition; + } + + @media (max-width: 992px) { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + } + } + + &.reverse { + direction: ltr; + + .txtBox { + direction: rtl; + } + } + } + } + + .s2 { + direction: ltr; + text-align: center; + } +} diff --git a/sass/pages/lottery.scss b/sass/pages/lottery.scss new file mode 100644 index 0000000..25bec05 --- /dev/null +++ b/sass/pages/lottery.scss @@ -0,0 +1,53 @@ +.lottery--page { + background-image: url('/assets/img/lottery/lottery2.png'); + // padding-top: 200px; + + .contentBox { + position: absolute; + top: 50%; + left: 0; + width: 100%; + @include transform(translateY(-50%)); + overflow: hidden; + + @media (max-width: 768px) { + position: static; + @include transform(translateY(0)); + padding-top: 200px; + } + + .content { + direction: rtl; + margin-bottom: 50px; + + .remain-days { + text-align: center; + background: $theme; + margin: -40px -20px 20px; + padding: 20px 15px; + h1 { + margin: 0; + font-family: iranYekanB; + font-weight: bold; + + span { + color: #fff; + } + } + } + + h3 { + margin-bottom: 20px; + } + } + + .winners-list { + .title { + margin-bottom: 30px; + h2 { + text-align: center; + } + } + } + } +} diff --git a/sass/pages/representation.scss b/sass/pages/representation.scss new file mode 100644 index 0000000..13108e3 --- /dev/null +++ b/sass/pages/representation.scss @@ -0,0 +1,212 @@ +.representation--page { + .hero { + .bg { + background-image: url('/assets/img/agents/representations-hero.jpg'); + } + } + + .panel { + width: 100%; + background: #fff; + @extend %defaultBorderRadius; + padding: 20px; + @include boxSizing(border-box); + + &.not-logged-in { + text-align: center; + + a { + color: $theme; + } + } + + &.is-agent { + text-align: center; + + a { + color: $theme; + } + } + } + + .s1 { + .txtBox { + overflow: hidden; + + h3 { + margin-bottom: 20px; + } + + ul { + li { + list-style: disc; + margin-right: 20px; + margin-bottom: 10px; + + p { + a { + color: $theme; + } + } + } + } + } + + .links { + margin-top: 50px; + display: flex; + flex-wrap: wrap; + justify-content: space-around; + + .item { + flex-basis: 32%; + overflow: hidden; + @include boxSizing(border-box); + @extend %defaultBorderRadius; + @extend %defaultBoxShadow; + + @media (max-width: 768px) { + flex-basis: 100%; + margin-bottom: 15px; + } + + button, + a { + display: block; + width: 100%; + height: 100%; + padding: 50px 15px; + border: none; + background: rgba(#000, 0.05); + text-align: center; + color: #000; + font-size: 16px; + font-family: 'iranYekanR'; + cursor: pointer; + @extend %defaultTransition; + + &:hover { + background: $theme; + color: #fff; + } + } + } + } + } + + .enroll { + margin-top: 100px; + } + + .checkUploadModalContent { + overflow: hidden; + position: relative; + + .repCheckBox { + width: 100%; + } + + .resultBox { + width: 100%; + position: absolute; + top: 100%; + left: 0; + border: 1px solid rgba(#000, 0.2); + padding: 15px; + @include boxSizing(border-box); + opacity: 0; + + .repInfo { + padding: 15px; + margin: -10px -10px; + overflow: hidden; + $bgColorOpacity: 0.1; + &.accepted { + background: rgba(green, $bgColorOpacity); + } + &.rejected { + background: rgba(red, $bgColorOpacity); + } + &.registered, + &.ongoing, + &.verification { + background: rgba(orange, $bgColorOpacity); + } + + p { + font-size: 18px; + text-align: right; + + span { + font-family: 'iranYekanR'; + color: #000; + } + b { + font-family: 'iranYekanB', sans-serif; + } + } + } + + .uploadBtn { + margin-bottom: 30px; + + label { + display: inline-block; + font-size: 18px; + font-weight: bold; + cursor: pointer; + padding: 5px; + text-align: center; + border: 1px solid $theme; + @extend %defaultBorderRadius; + @extend %defaultTransition; + margin-bottom: 20px; + + &:hover { + background: $theme; + i, + span { + color: #fff; + } + } + + i, + span { + @extend %defaultTransition; + color: $theme; + } + + i { + font-size: 50px; + } + span { + font-size: 14px; + display: block; + } + } + input { + visibility: hidden; + opacity: 0; + } + + p { + text-align: right; + + b { + display: inline-block; + direction: ltr !important; + } + + &.notice { + color: red; + font-size: 14px; + } + } + } + } + + .el-loading-text { + text-align: center !important; + } + } +} diff --git a/sass/pages/user-auth.scss b/sass/pages/user-auth.scss new file mode 100644 index 0000000..140324c --- /dev/null +++ b/sass/pages/user-auth.scss @@ -0,0 +1,257 @@ +.user-auth { + background: url('/assets/img/auth/bg.jpg'); + background-size: cover; + -webkit-background-size: cover; + background-repeat: no-repeat; + min-height: 100vh; + display: flex; + justify-content: center; + align-items: center; + padding: 150px 15px; + $sideWidth: 250px; + $formBoxWidth: 800px; + + .formBox { + width: 100%; + max-width: $formBoxWidth; + position: relative; + @extend %defaultBorderRadius; + overflow: hidden; + background: #fff; + + .side { + width: $sideWidth; + height: 100%; + background: url('/assets/img/auth/formbg.jpg'); + background-size: cover; + -webkit-background-size: cover; + background-repeat: no-repeat; + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + + p { + text-align: center; + margin-bottom: 20px; + + span { + color: #fff; + font-size: 14px; + } + } + } + + .main { + background: #fff; + margin-right: $sideWidth; + width: calc(#{$formBoxWidth} - #{$sideWidth}); + padding: 50px 0; + + .form_2 { + width: 70%; + margin-left: auto; + margin-right: auto; + + .title { + text-align: center; + margin-bottom: 50px; + + p { + font-size: 20px; + } + } + + .btnRow { + a { + font-size: 14px; + color: $theme; + display: block; + margin-top: 15px; + } + } + + .err { + p { + padding-right: 30px; + } + } + } + } + + @media (max-width: 992px) { + $sideHeight: 150px; + + .side { + width: 100%; + height: $sideHeight; + position: absolute; + top: 0; + right: 0; + } + + .main { + margin: $sideHeight auto 0; + width: 100%; + //height: call(100% - #{$sideHeight}); + + .form_2 { + width: 100%; + max-width: 500px; + margin: 0 auto; + } + } + } + } + + &.login { + .formBox { + .main { + .form_2 { + .formRow { + input { + -webkit-background-size: 16px; + background-size: 16px; + background-position: 95% 10px; + background-repeat: no-repeat; + padding-right: 38px; + + &[name='email'] { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='rgba(0,0,0,0.5)' viewBox='0 0 512 512'%3E%3Cpath d='M464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM48 96h416c8.8 0 16 7.2 16 16v41.4c-21.9 18.5-53.2 44-150.6 121.3-16.9 13.4-50.2 45.7-73.4 45.3-23.2.4-56.6-31.9-73.4-45.3C85.2 197.4 53.9 171.9 32 153.4V112c0-8.8 7.2-16 16-16zm416 320H48c-8.8 0-16-7.2-16-16V195c22.8 18.7 58.8 47.6 130.7 104.7 20.5 16.4 56.7 52.5 93.3 52.3 36.4.3 72.3-35.5 93.3-52.3 71.9-57.1 107.9-86 130.7-104.7v205c0 8.8-7.2 16-16 16z'/%3E%3C/svg%3E"); + background-position: 95% 11px; + direction: ltr; + text-align: right; + } + + &[name='password'] { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='rgba(0,0,0,0.5)' viewBox='0 0 448 512'%3E%3Cpath d='M224 420c-11 0-20-9-20-20v-64c0-11 9-20 20-20s20 9 20 20v64c0 11-9 20-20 20zm224-148v192c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V272c0-26.5 21.5-48 48-48h16v-64C64 71.6 136-.3 224.5 0 312.9.3 384 73.1 384 161.5V224h16c26.5 0 48 21.5 48 48zM96 224h256v-64c0-70.6-57.4-128-128-128S96 89.4 96 160v64zm320 240V272c0-8.8-7.2-16-16-16H48c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h352c8.8 0 16-7.2 16-16z'/%3E%3C/svg%3E"); + -webkit-background-size: 15px; + background-size: 15px; + direction: ltr; + text-align: right; + } + } + + &.err { + input { + &[name='email'] { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='rgba(255,0,0,0.5)' viewBox='0 0 512 512'%3E%3Cpath d='M464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM48 96h416c8.8 0 16 7.2 16 16v41.4c-21.9 18.5-53.2 44-150.6 121.3-16.9 13.4-50.2 45.7-73.4 45.3-23.2.4-56.6-31.9-73.4-45.3C85.2 197.4 53.9 171.9 32 153.4V112c0-8.8 7.2-16 16-16zm416 320H48c-8.8 0-16-7.2-16-16V195c22.8 18.7 58.8 47.6 130.7 104.7 20.5 16.4 56.7 52.5 93.3 52.3 36.4.3 72.3-35.5 93.3-52.3 71.9-57.1 107.9-86 130.7-104.7v205c0 8.8-7.2 16-16 16z'/%3E%3C/svg%3E"); + } + + &[name='password'] { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='rgba(255,0,0,0.5)' viewBox='0 0 448 512'%3E%3Cpath d='M224 420c-11 0-20-9-20-20v-64c0-11 9-20 20-20s20 9 20 20v64c0 11-9 20-20 20zm224-148v192c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V272c0-26.5 21.5-48 48-48h16v-64C64 71.6 136-.3 224.5 0 312.9.3 384 73.1 384 161.5V224h16c26.5 0 48 21.5 48 48zM96 224h256v-64c0-70.6-57.4-128-128-128S96 89.4 96 160v64zm320 240V272c0-8.8-7.2-16-16-16H48c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h352c8.8 0 16-7.2 16-16z'/%3E%3C/svg%3E"); + } + } + } + } + + .btnRow { + a { + font-size: 14px; + color: $theme; + display: block; + margin-top: 15px; + } + } + } + } + } + } + + &.register { + .formBox { + .main { + .form_2 { + .formRow { + input { + padding-right: 20px; + + &[name='email'] { + background-image: none; + } + + &[name='password'] { + background-image: none; + } + + &[name='mobile'], + &[name='password_confirmation'], + &[name='national_code'] { + direction: ltr; + text-align: right; + } + } + + &.err { + input { + &[name='email'] { + background-image: none; + } + + &[name='password'] { + background-image: none; + } + } + } + + &.addressTextArea { + textarea { + display: block; + width: 95%; + max-width: 95%; + height: 70px; + padding-right: 20px; + margin-right: 2.5% !important; + resize: none !important; + } + } + + .el-select { + .el-input__suffix { + right: 0; + left: 20px; + text-align: left; + } + } + } + } + } + } + + .hasValidationError { + height: 1570px !important; + + //@media (max-width: 992px) { + // height: 1100px !important; + //} + } + } + + &.reset-pass { + .formBox { + .main { + padding: 100px 0; + + &.hasMessage { + padding: 50px 0; + } + + .form_2 { + .title { + margin-bottom: 30px; + } + + .btnRow { + button { + margin-top: 0; + } + } + } + } + } + } +} diff --git a/sass/pages/user-dashboard/agent-guarantee-details.scss b/sass/pages/user-dashboard/agent-guarantee-details.scss new file mode 100644 index 0000000..e420390 --- /dev/null +++ b/sass/pages/user-dashboard/agent-guarantee-details.scss @@ -0,0 +1,104 @@ +.user-dashboard { + &.agent-guarantee-details { + .agentActions { + margin-bottom: 50px; + + .statuses { + h3 { + margin-bottom: 20px; + } + + .btns { + @media (max-width: 992px) { + text-align: center; + } + + button { + margin-bottom: 5px; + } + } + } + + .timeLine { + h3 { + margin-bottom: 20px; + } + + ul { + li { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 5px; + padding: 0 4px; + @include borderRadius(3px); + + span { + display: block; + + &:last-child { + font-family: sans-serif; + direction: ltr !important; + } + } + + // define colors opacity + $colorsOpacity: 0.1; + + &.saved { + background: rgba(gray, $colorsOpacity); + } + &.recieved { + background: rgba($theme, $colorsOpacity); + } + &.ongoing { + background: rgba(orange, $colorsOpacity); + } + &.waiting { + background: rgba(orangered, $colorsOpacity); + } + &.delivered { + background: rgba(green, $colorsOpacity); + } + } + } + } + } + + .formDB { + flex-basis: 100%; + text-align: center; + margin-top: -20px; + margin-bottom: 20px; + display: flex; + justify-content: center; + align-items: center; + + img { + width: 100%; + max-width: 200px; + @extend %userSelect; + } + + i, + span { + display: block; + font-size: 20px; + color: $theme; + } + span { + margin-right: 8px; + font-family: 'iranYekanB'; + } + } + + .addToDraftsBtn { + text-align: center; + margin-top: 20px; + + span { + color: #fff; + } + } + } +} diff --git a/sass/pages/user-dashboard/agent-reports.scss b/sass/pages/user-dashboard/agent-reports.scss new file mode 100644 index 0000000..237b383 --- /dev/null +++ b/sass/pages/user-dashboard/agent-reports.scss @@ -0,0 +1,183 @@ +.user-dashboard { + &.agent-reports { + .reportTypes { + text-align: center; + + button { + margin-bottom: 5px; + } + } + + .reportOptions { + .el-form { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + + .datePickerWrapper { + display: inline-block; + width: 100%; + + .vpd-input-group { + @include borderRadius(3px); + overflow: hidden; + + input { + &::placeholder { + color: rgba(#000, 0.4); + } + } + } + .vpd-icon-btn { + padding: 12px 10px !important; + } + } + + .seprator { + flex-basis: 100%; + background: rgba($theme, 0.1); + padding: 2px 8px; + @include borderRadius(10px); + text-align: center; + + p { + color: rgba(#000, 0.3); + @extend %userSelect; + } + } + + .el-form-item { + display: block; + flex-basis: 33%; + + @media (max-width: 768px) { + flex-basis: 100% !important; + } + + .el-form-item__content { + display: block; + width: 100%; + margin-left: 0 !important; + margin-right: 0 !important; + } + + .el-form-item__label { + float: none !important; + padding-right: 0; + } + } + + &.inbox { + .selectedItem { + flex-basis: 100%; + } + } + + &.pr { + .fromItemReceptionTransDate { + flex-basis: 49.75%; + } + .toItemReceptionTransDate { + flex-basis: 49.75%; + } + } + + &.opr { + .selectedItem { + flex-basis: 49.75%; + } + .pieceId { + flex-basis: 49.75%; + } + .fromItemReceptionTransDate { + flex-basis: 49.75%; + } + .toItemReceptionTransDate { + flex-basis: 49.75%; + } + } + + &.br { + .selectedItem { + flex-basis: 100%; + } + } + + &.gr { + .fromDate { + flex-basis: 49.75%; + } + .toDate { + flex-basis: 49.75%; + } + + .selectedItem { + flex-basis: 100%; + } + + .fromRecieveDate { + flex-basis: 49.75%; + } + .toRecieveDate { + flex-basis: 49.75%; + } + .fromDeliverDate { + flex-basis: 49.75%; + } + .toDeliverDate { + flex-basis: 49.75%; + } + } + } + + .btnRow { + margin-top: 30px; + text-align: center; + } + } + + .reportResult { + margin-top: 50px; + + .infoCharts { + text-align: center; + + .c-tooltip-header { + margin-bottom: 2px; + } + .c-tooltip-body-item { + span { + color: #fff; + margin-right: 5px; + margin-left: 5px; + } + } + } + + .resultList { + .showDetailsBtn { + background: transparent; + border: 1px solid rgba(#000, 0.2); + @include borderRadius(4px); + padding: 4px 16px; + cursor: pointer; + @extend %defaultTransition; + + i { + @extend %defaultTransition; + color: rgba(#000, 0.5); + } + + &:hover { + background: $theme; + border-color: $theme; + + i { + color: #fff; + } + } + } + } + } + } +} diff --git a/sass/pages/user-dashboard/agent-request-details.scss b/sass/pages/user-dashboard/agent-request-details.scss new file mode 100644 index 0000000..d36984e --- /dev/null +++ b/sass/pages/user-dashboard/agent-request-details.scss @@ -0,0 +1,72 @@ +.user-dashboard { + &.agent-requests-details { + .notes { + margin-top: 30px; + + h3 { + font-family: 'iranyekanB'; + margin-bottom: 10px; + } + + ul { + li { + list-style: disc; + margin-right: 18px; + margin-bottom: 5px; + + p { + font-family: 'iranYekanB'; + } + } + } + } + + .addPtoPrModal { + .datePickerWrapper { + display: inline-block; + width: 100%; + + .vpd-main { + .vpd-input-group { + @include borderRadius(3px); + overflow: hidden; + + input { + &::placeholder { + color: rgba(#000, 0.4); + } + } + } + + // vue persian dateTime picker styles + .vpd-icon-btn { + padding: 12px 10px !important; + } + } + } + + .btnRow { + text-align: center; + } + + .el-form { + .el-form-item { + &.err { + .el-form-item__label { + color: red; + } + .errMsg { + color: red; + } + } + } + } + + &.reportModal { + .el-form-item__content { + margin-right: 0 !important; + } + } + } + } +} diff --git a/sass/pages/user-dashboard/agent-requests.scss b/sass/pages/user-dashboard/agent-requests.scss new file mode 100644 index 0000000..6ae501d --- /dev/null +++ b/sass/pages/user-dashboard/agent-requests.scss @@ -0,0 +1,48 @@ +.user-dashboard { + &.agent-requests { + .addStuffBtn { + cursor: pointer; + background-color: $theme !important; + + td { + text-align: center !important; + cursor: pointer; + + button { + cursor: pointer; + width: 100%; + display: flex; + justify-content: center; + align-items: center; + border: transparent; + background: transparent; + + span { + margin-left: 5px; + } + + span, + i { + color: #fff; + padding: 0; + } + } + } + } + + .search { + &.success { + input { + border-color: green; + @include boxShadow(0px 4px 6px rgba(green, 0.3)); + } + } + &.error { + input { + border-color: red; + @include boxShadow(0px 4px 6px rgba(red, 0.2)); + } + } + } + } +} diff --git a/sass/pages/user-dashboard/announcements.scss b/sass/pages/user-dashboard/announcements.scss new file mode 100644 index 0000000..3713beb --- /dev/null +++ b/sass/pages/user-dashboard/announcements.scss @@ -0,0 +1,31 @@ +.user-dashboard { + &.announcements { + .item { + @include boxShadow(0 4px 8px rgba(#000, 0.1)); + @extend %defaultBorderRadius; + @extend %defaultTransition; + padding: 10px; + margin-bottom: 10px; + + &.active { + background: rgba(green, 0.1); + } + + &.unread { + background: rgba(orange, 0.1); + } + + div { + border-top: none !important; + background: transparent !important; + border-bottom: none !important; + } + + .el-collapse-item__content { + background: rgba($theme, 0.05) !important; + @extend %defaultBorderRadius; + padding: 10px; + } + } + } +} diff --git a/sass/pages/user-dashboard/factor.scss b/sass/pages/user-dashboard/factor.scss new file mode 100644 index 0000000..cb0abf0 --- /dev/null +++ b/sass/pages/user-dashboard/factor.scss @@ -0,0 +1,13 @@ +.user-dashboard { + &.factor { + .factor { + .table { + table { + min-width: 1000px; + } + + overflow: auto; + } + } + } +} diff --git a/sass/pages/user-dashboard/guarantee-details.scss b/sass/pages/user-dashboard/guarantee-details.scss new file mode 100644 index 0000000..6709938 --- /dev/null +++ b/sass/pages/user-dashboard/guarantee-details.scss @@ -0,0 +1,8 @@ +.user-dashboard { + &.guarantee-details { + hr { + width: 70%; + margin: 50px auto; + } + } +} diff --git a/sass/pages/user-dashboard/guarantee.scss b/sass/pages/user-dashboard/guarantee.scss new file mode 100644 index 0000000..6859c0c --- /dev/null +++ b/sass/pages/user-dashboard/guarantee.scss @@ -0,0 +1,25 @@ +.user-dashboard { + &.guarantee { + .search { + &.success { + input { + border-color: green; + @include boxShadow(0px 4px 6px rgba(green, 0.3)); + } + } + &.error { + input { + border-color: red; + @include boxShadow(0px 4px 6px rgba(red, 0.2)); + } + } + } + + @media (max-width: 768px) { + .switchBtns { + width: 100%; + margin-top: 5px; + } + } + } +} diff --git a/sass/pages/user-dashboard/index.scss b/sass/pages/user-dashboard/index.scss new file mode 100644 index 0000000..a745c99 --- /dev/null +++ b/sass/pages/user-dashboard/index.scss @@ -0,0 +1,89 @@ +.user-dashboard { + overflow: visible; + + .panel { + background: #fff; + min-height: calc(100vh - 300px); + border-top-left-radius: 15px; + border-top-right-radius: 15px; + @include transform(translateY(-110px)); + z-index: 2; + padding: 15px; + margin-bottom: 100px; + + @media (max-width: 992px) { + @include transform(translateY(0)); + margin-top: 50px; + } + + @media (max-width: 575px) { + margin-left: -30px; + margin-right: -30px; + } + + .panel-title { + @include transform(translate(15px, -55px)); + + p { + color: #fff; + font-family: 'iranYekanB'; + font-size: 20px; + font-weight: bold; + + @media (max-width: 992px) { + color: #000; + } + } + } + } + + .notice { + display: none; + color: red; + font-size: 12px; + font-weight: bold; + + @media (max-width: 1400px) { + display: block; + } + } + + .form { + .formRow { + @media (max-width: 768px) { + flex-basis: 100% !important; + } + } + } + + .form_3 { + display: flex; + flex-wrap: wrap; + + .userInfo { + display: flex; + flex-basis: 100%; + flex-wrap: wrap; + justify-content: space-between; + + .formRow { + flex-basis: 33%; + } + } + } + + .buttons { + label { + cursor: pointer; + } + } + + .paymentFactorBtn { + strong { + font-family: 'iranYekanB'; + display: block; + margin-bottom: 30px; + line-height: 1.6em; + } + } +} diff --git a/sass/pages/user-dashboard/layout.scss b/sass/pages/user-dashboard/layout.scss new file mode 100644 index 0000000..ad06fca --- /dev/null +++ b/sass/pages/user-dashboard/layout.scss @@ -0,0 +1,218 @@ +.user-dashboard-layout { + .topBG { + height: 200px; + background: $theme; + position: relative; + + .user-name { + position: absolute; + bottom: 5px; + right: 18px; + + a { + display: inline-block; + max-width: 250px; + position: relative; + padding-right: 35px; + + &:hover { + background: rgba(0, 0, 0, 0); + } + + &.active { + background: rgba(0, 0, 0, 0); + } + + a, + span, + i { + font-size: 18px; + color: #fff; + } + + i { + position: absolute; + top: 50%; + right: 10px; + @include transform(translateY(-50%)); + } + + span { + font-family: 'iranYekanB', sans-serif; + font-weight: bold; + } + } + } + + @media (max-width: 992px) { + height: 60px; + + .user-name { + display: none; + } + } + } + + .page { + min-height: calc(100vh - 235px); + + @media (max-width: 992px) { + min-height: calc(100vh - 150px); + } + } + + .user-aside { + @media (max-width: 992px) { + background: #fff; + } + + ul { + display: inline-block; + min-height: 600px; + padding-right: 5px; + padding-top: 5px; + + li { + @extend %defaultTransition; + border-top-left-radius: 25px; + border-bottom-left-radius: 25px; + cursor: pointer; + margin-bottom: 2px; + + &:hover { + background: rgba(0, 0, 0, 0.1); + } + + &.username { + display: none; + + a { + display: block; + position: relative; + padding-right: 30px; + + i { + position: absolute; + top: 50%; + right: 10px; + @include transform(translateY(-50%)); + } + } + + span { + font-family: 'iranYekanB', sans-serif; + font-weight: bold; + } + } + + &.active { + background: rgba(0, 0, 0, 0.1); + } + + a { + padding: 10px; + width: 100%; + } + + a, + span, + i { + display: inline-block; + color: #000; + font-weight: bold; + font-size: 14px; + } + + span { + margin-right: 3px; + } + + .badge { + display: inline-block; + $size: 20px; + width: $size; + height: $size; + text-align: center; + font-family: 'sans-serif'; + line-height: $size; + font-size: 12px; + color: #fff; + background: red; + @include borderRadius(50%); + } + } + + @media (max-width: 992px) { + min-height: auto; + max-width: 100%; + display: flex; + justify-content: flex-start; + align-items: center; + flex-wrap: wrap; + padding: 3px !important; + + li { + margin: 0 10px !important; + padding: 0 !important; + + a { + span, + i { + color: #000 !important; + font-size: 16px !important; + } + } + + @include borderRadius(5px); + + &.username { + display: block; + } + + &:hover { + background: rgba(0, 0, 0, 0.1) !important; + } + + &.active { + background: rgba(0, 0, 0, 0.1) !important; + } + } + } + } + + .seprator { + display: flex; + justify-content: flex-start; + align-items: center; + @extend %userSelect; + + .line { + flex-grow: 1; + height: 1px; + background: $darkGray; + opacity: 0.3; + margin-right: 5px; + @include borderRadius(4px); + } + + .txt { + span { + font-size: 12px; + } + } + + @media (max-width: 992px) { + display: block; + width: 100%; + margin-top: 5px; + margin-bottom: 10px; + + .line { + margin-right: 0; + margin-top: 2px; + opacity: 0.15; + } + } + } + } +} diff --git a/sass/pages/user-dashboard/post-address.scss b/sass/pages/user-dashboard/post-address.scss new file mode 100644 index 0000000..79b68e3 --- /dev/null +++ b/sass/pages/user-dashboard/post-address.scss @@ -0,0 +1,56 @@ +.user-dashboard { + &.post-address { + h2 { + text-align: center; + margin-top: 50px; + color: $theme; + } + + .el-dialog { + .form_3 { + display: flex; + flex-wrap: wrap; + + .formRow { + flex-basis: 33.33%; + } + + .title { + flex-basis: 100%; + margin-bottom: 30px; + + p { + color: #000; + font-weight: bold; + font-family: 'iranYekanB'; + font-size: 20px; + } + } + + hr { + flex-basis: 100%; + margin-bottom: 30px; + } + + .btnRow { + button { + span { + color: #fff; + } + } + } + } + } + + .buttons { + text-align: center; + margin-top: 50px; + + button { + span { + color: #fff; + } + } + } + } +} diff --git a/sass/pages/user-dashboard/post-receipt.scss b/sass/pages/user-dashboard/post-receipt.scss new file mode 100644 index 0000000..fcefaaa --- /dev/null +++ b/sass/pages/user-dashboard/post-receipt.scss @@ -0,0 +1,119 @@ +.user-dashboard { + &.post-receipt { + .receipt { + border: 1px solid rgba(#000, 0.5); + + .receipt-head { + background-color: rgba(#c0c4d1, 1); + text-align: center; + position: relative; + + svg { + width: 100px; + display: block; + position: absolute; + top: 50%; + right: 15px; + @include transform(translateY(-50%)); + + @media (max-width: 992px) { + display: none; + } + + path, + rect { + fill: #707070; + } + } + + p { + font-size: 16px; + font-family: 'iranYekanB'; + padding: 15px; + color: #000; + } + } + + .receipt-body { + .form_3 { + display: flex; + flex-wrap: wrap; + border: none; + + .formRow { + flex-basis: 50%; + } + + .title { + background: transparent; + padding: 0; + flex-basis: 97.5%; + + p { + font-size: 20px; + } + } + } + } + + .receipt-code { + margin-bottom: 50px; + + hr { + width: 50%; + margin-bottom: 50px; + } + + p { + padding: 20px; + background-color: rgba(#e0e6ed, 1); + width: 100%; + max-width: 500px; + margin: 0 auto; + text-align: center; + + span { + font-size: 20px; + font-family: 'iranYekanB', sans-serif; + font-weight: bold; + color: #000; + } + } + } + } + + .print-btn { + text-align: left; + margin-top: 20px; + } + + .box-face-receipt, + .box-inner-receipt { + margin-top: 100px; + + .title { + width: 95%; + margin-top: 30px; + margin-bottom: 30px; + padding: 10px; + background: #e0e6ed; + margin-left: auto; + margin-right: auto; + + p { + font-family: 'iranYekanB'; + font-weight: bold; + color: #000; + } + } + } + + .box-inner-receipt { + .logo-side { + @media (max-width: 992px) { + text-align: center; + } + } + } + } +} diff --git a/sass/pages/user-dashboard/post.scss b/sass/pages/user-dashboard/post.scss new file mode 100644 index 0000000..a272d1c --- /dev/null +++ b/sass/pages/user-dashboard/post.scss @@ -0,0 +1,313 @@ +.user-dashboard { + &.post { + .form_3 { + .formDB { + flex-basis: 100%; + text-align: center; + margin-top: -20px; + margin-bottom: 20px; + display: flex; + justify-content: center; + align-items: center; + + img { + width: 100%; + max-width: 200px; + @extend %userSelect; + } + + i, + span { + display: block; + font-size: 20px; + color: $theme; + } + span { + margin-right: 8px; + font-family: 'iranYekanB'; + } + } + + .formRow { + .el-select { + width: 100%; + + .el-input__inner { + @include borderRadius(0); + } + + .el-input__suffix { + right: 0; + left: 20px; + text-align: left; + } + } + } + + hr { + flex-basis: 100%; + margin-bottom: 30px; + } + + #quantity:disabled { + cursor: not-allowed; + color: rgba(#000, 0.1) !important; + } + + #addBtn { + &:focus { + outline: 1px solid #000; + } + } + } + + .add-list { + margin-top: 50px; + + h2 { + margin-bottom: 20px; + } + } + + .terms { + margin-top: 50px; + + h2 { + margin-bottom: 20px; + } + + .form { + padding: 0; + margin-top: 30px; + margin-bottom: 30px; + + .formRow { + padding-right: 0; + + label { + padding-right: 0; + } + } + } + + ol { + margin-top: 20px; + list-style: decimal; + list-style-position: inside; + margin-bottom: 15px; + + li { + margin-bottom: 5px; + + p { + display: inline-block; + color: rgba(#000, 1) !important; + } + } + } + + .agents { + .el-select { + width: 100%; + max-width: 300px; + + .el-input__inner { + width: 100%; + @include borderRadius(4px); + border: 1px solid rgba(#000, 0.2); + } + + .el-input__suffix { + right: 0; + left: 20px; + text-align: left; + } + } + + .btn { + padding: 8px 30px; + } + + @media (max-width: 575px) { + button { + width: 100%; + margin-top: 10px; + text-align: center; + } + + .el-select { + max-width: 575px; + } + } + } + } + + .form-address { + margin-top: 50px; + + h2 { + margin-bottom: 20px; + } + + .no-address { + color: $red; + padding: 5px; + } + + button { + margin-top: 20px; + } + } + + .formError { + color: red; + } + + .addStuffBtn { + cursor: pointer; + background-color: $theme !important; + + td { + text-align: center !important; + cursor: pointer; + + button { + cursor: pointer; + width: 100%; + display: flex; + justify-content: center; + align-items: center; + border: transparent; + background: transparent; + + span { + margin-left: 5px; + } + + span, + i { + color: #fff; + padding: 0; + } + } + } + } + + .chooseDataBase { + margin-bottom: 50px; + + h2 { + margin-bottom: 30px; + text-align: center; + } + + .brandsList { + width: 100%; + display: flex; + justify-content: center; + align-items: stretch; + + .brand { + flex-basis: 50%; + max-width: 250px; + padding: 15px; + text-align: center; + + &.selected { + button { + background: $theme; + + img { + opacity: 0; + + &.alt { + opacity: 1; + } + } + + i, + span { + color: #fff; + } + } + } + + button { + width: 100%; + height: 100%; + display: inline-block; + overflow: hidden; + border: 1px solid $theme; + cursor: pointer; + @extend %defaultTransition; + @extend %defaultBorderRadius; + background: transparent; + position: relative; + padding: 5px; + + &:hover { + background: $theme; + + img { + opacity: 0; + + &.alt { + opacity: 1; + } + } + i, + span { + color: #fff; + } + } + + img { + display: block; + width: 100%; + @extend %defaultTransition; + + &.alt { + position: absolute; + top: 0; + left: 0; + z-index: 1; + opacity: 0; + } + } + + i { + display: block; + font-size: 50px; + margin: 10px 0; + color: $theme; + @extend %defaultTransition; + } + span { + color: $theme; + font-family: 'iranYekanB'; + @extend %defaultTransition; + } + } + } + } + } + + .btnRow { + width: 100%; + text-align: right; + + button { + margin-top: 20px; + display: inline-flex; + justify-content: center; + align-items: center; + + span { + color: #fff; + font-family: 'iranYekanR'; + margin-left: 5px; + } + } + } + } +} diff --git a/sass/pages/user-dashboard/profile.scss b/sass/pages/user-dashboard/profile.scss new file mode 100644 index 0000000..73aaee1 --- /dev/null +++ b/sass/pages/user-dashboard/profile.scss @@ -0,0 +1,40 @@ +.user-dashboard { + &.profile { + .form_3 { + width: 100%; + + #arpa_businessCode { + background: $theme; + color: #fff; + } + + .cs { + color: rgba(red, 0.7); + font-size: 12px; + margin-right: 3px; + + &.confirmed { + color: rgba(green, 0.7); + } + } + + .el-select { + width: 100%; + + .el-input__inner { + @include borderRadius(0); + } + + .el-input__suffix { + right: 0; + left: 20px; + text-align: left; + } + } + + @media (max-width: 992px) { + max-width: 100%; + } + } + } +} diff --git a/sass/pages/user-dashboard/ticket-messenger.scss b/sass/pages/user-dashboard/ticket-messenger.scss new file mode 100644 index 0000000..440b569 --- /dev/null +++ b/sass/pages/user-dashboard/ticket-messenger.scss @@ -0,0 +1,13 @@ +.user-dashboard { + &.ticket-messenger { + .messenger { + //height: calc(100vh - 460px) !important; + + .messages { + height: 100%; + overflow: auto; + padding-bottom: 100px; + } + } + } +} diff --git a/sass/pages/user-dashboard/tickets.scss b/sass/pages/user-dashboard/tickets.scss new file mode 100644 index 0000000..2b7da80 --- /dev/null +++ b/sass/pages/user-dashboard/tickets.scss @@ -0,0 +1,32 @@ +.user-dashboard { + &.tickets { + .rowButtons { + a { + position: relative; + + span { + background: transparent !important; + color: #fff !important; + display: inline-block !important; + padding: 0 !important; + } + + i { + $size: 25px; + width: $size; + height: $size; + line-height: $size; + text-align: center; + font-family: sans-serif; + position: absolute; + top: -8px; + right: -10px; + font-size: 12px; + background: red; + color: #fff; + @include borderRadius(50%); + } + } + } + } +} diff --git a/sass/pages/user-dashboard/verify.scss b/sass/pages/user-dashboard/verify.scss new file mode 100644 index 0000000..83b2a90 --- /dev/null +++ b/sass/pages/user-dashboard/verify.scss @@ -0,0 +1,27 @@ +.user-dashboard { + &.verify { + .verify-labels { + cursor: auto !important; + + span { + margin-right: 5px; + cursor: pointer; + @extend %defaultTransition; + color: $theme; + + &:hover { + color: $theme_darker; + } + + &.countdown { + color: gray; + cursor: not-allowed; + + &:hover { + color: gray; + } + } + } + } + } +} diff --git a/sass/pages/warranty-terms.scss b/sass/pages/warranty-terms.scss new file mode 100644 index 0000000..6591336 --- /dev/null +++ b/sass/pages/warranty-terms.scss @@ -0,0 +1,86 @@ +.warranty-terms--page { + .hero { + .bg { + background-image: url('/assets/img/warranty-terms/hero.jpg'); + } + } + + .s1 { + .term { + display: flex; + flex-direction: row; + flex-wrap: wrap; + background: #fff; + height: 100%; + @extend %defaultBorderRadius; + @extend %defaultBoxShadow; + overflow: hidden; + + .imgBox { + flex-basis: 30%; + display: flex; + justify-content: center; + align-items: center; + height: 100%; + + img { + width: 100%; + height: 100%; + object-fit: cover; + } + + @media (min-width: 1200px) and (max-width: 1400px) { + flex-basis: 40%; + } + + @media (min-width: 992px) and (max-width: 1200px) { + flex-basis: 20%; + } + + @media (max-width: 768px) { + flex-basis: 100%; + height: auto; + } + } + + .txtBox { + flex-basis: 70%; + padding: 15px; + + @media (min-width: 1200px) and (max-width: 1400px) { + flex-basis: 60%; + } + + @media (max-width: 768px) { + flex-basis: 100%; + } + + h2 { + margin-bottom: 20px; + color: $theme; + } + + p { + margin-bottom: 15px; + } + } + } + } + + .s2 { + text-align: center; + direction: ltr; + } + + .ck-content { + border: 1px solid rgba(#000, 0.1); + padding: 15px; + @extend %defaultBorderRadius; + } + + .submit { + span { + color: #fff; + } + } +} diff --git a/server/ArpaWebservice.js b/server/ArpaWebservice.js new file mode 100644 index 0000000..a4912ee --- /dev/null +++ b/server/ArpaWebservice.js @@ -0,0 +1,173 @@ +const axios = require('axios') + +/// /////////////////////////////////////////////////////////////////////////////////////////////////// verity WebService +const { + // verity + verityBaseUrl, + verityTokenUrl, + // VerityUserGroupId, + VerityBusinessCategoryId, + // VerityStockAreaId, + verityAccount, + + // panatech + panatechBaseUrl, + panatechTokenUrl, + // PanatechUserGroupId, + PanatechBusinessCategoryId, + // PanatechStockAreaId, + panatechAccount +} = require('./_env') + +// get verity token +let verityToken = '' +module.exports.getVerityToken = async () => { + try { + const getToken = await axios.get(verityTokenUrl, { params: verityAccount }) + verityToken = getToken.data + console.log(verityToken) + } catch (err) { + console.log(err) + } +} + +const verityAxiosConfig = () => { + return { + baseURL: verityBaseUrl, + headers: { + Authorization: verityToken + } + } +} + +// export verity values +module.exports.verityAxiosConfig = verityAxiosConfig + +/// /////////////////////////////////////////////////////////////////////////////////////////////////// panatech WebService + +// get panatech token +let panatechToken = '' +module.exports.getPanatechToken = async () => { + try { + const getToken = await axios.get(panatechTokenUrl, { params: panatechAccount }) + panatechToken = getToken.data + console.log(panatechToken) + } catch (err) { + console.log(err) + } +} + +const panatechAxiosConfig = () => { + return { + baseURL: panatechBaseUrl, + headers: { + Authorization: panatechToken + } + } +} + +// export panatech values +module.exports.panatechAxiosConfig = panatechAxiosConfig + +/// /////////////////////////////////////////////////////////////////////////////////////////////////// methods +function axiosConfig(db) { + if (db === 'verity') return verityAxiosConfig() + else if (db === 'panatech') return panatechAxiosConfig() + else return {} +} + +function BusinessCategoryId(db) { + if (db === 'panatech') return PanatechBusinessCategoryId + else if (db === 'verity') return VerityBusinessCategoryId + else return null +} + +module.exports.saveTransactionToArpa = (data, items, db) => { + // add static values to data + data.TransactionID = 'null' + data.BusinessCode = 'null' + data.DocAliasID = 144 + data.TrMessage = '' + + const ArpaData = { + Data: data, + Items: items + } + + // @example + // const arpaExample = { + // "Data": {"TransactionID": null, "BusinessID": 3, "DocAliasId": 144, "Description": "تست", "cAddress1": "تهران", "cTel1": "0218884455", "TransCCustom1": "آقای موسوی"}, + // "Items": [{"TransLineID": null, "itemId": 5302, "MjQty": 20, "StockAreaId": 1}, {"TransLineID": null, "itemId": 5302, "MjQty": 20, "StockAreaId": 1}] + // } + + return new Promise(async (resolve, reject) => { + try { + const transaction = await axios.post('/api/NewTransaction', ArpaData, axiosConfig(db)) + const ArpaResponse = transaction.data + + if (ArpaResponse.data) resolve(ArpaResponse.data[0].TransNumber) + else reject(ArpaResponse.error || 'ARPA WebService Error') + } catch (e) { + reject(e) + } + }) +} + +module.exports.saveUserToArpa = (userData, db) => { + const data = { + BusName: userData.first_name + ' ' + userData.last_name + ' (گارانتی سایت) ', + Email: userData.email, + PhoneNo: userData.tel_number, + Mobile: userData.mobile_number, + Name: userData.first_name, + Family: userData.last_name, + NationalCode: userData.national_code, + ProvinceId: userData.province_id, + CityId: userData.city_id, + Address: userData.address, + PostalCode: userData.postal_code, + BusinessCategoryId: BusinessCategoryId(db) + } + + return new Promise(async (resolve, reject) => { + try { + const ArpaID = await axios.get('/api/postBusiness', { ...axiosConfig(db), params: { ...data } }) + if (!ArpaID.data.data) return reject(new Error('Cant save new user -- There is a problem in ArpaWebService')) + + resolve({ + businessID: ArpaID.data.data.BusinessId, + businessCode: ArpaID.data.data.BusinessCode + }) + } catch (e) { + reject(e) + } + }) +} + +module.exports.updateUserOnArpa = (userData, arpa_businessID, db) => { + const data = { + BusName: userData.first_name + ' ' + userData.last_name + ' (گارانتی سایت) ', + Email: userData.email, + PhoneNo: userData.tel_number, + Mobile: userData.mobile_number, + Name: userData.first_name, + Family: userData.last_name, + NationalCode: userData.national_code, + ProvinceId: userData.province_id, + CityId: userData.city_id, + Address: userData.address, + PostalCode: userData.postal_code, + BusinessCategoryId: BusinessCategoryId(db), + BusinessID: arpa_businessID + } + + return new Promise(async (resolve, reject) => { + try { + const ArpaUpdate = await axios.post('/api/putBusiness', data, axiosConfig(db)) + if (!ArpaUpdate.data.status) reject(new Error('Cant update user -- There is a problem in ArpaWebService')) + resolve('updated successfully') + } catch (e) { + reject(e) + } + }) +} diff --git a/server/WebSocket/controllers/admin_EventsController.js b/server/WebSocket/controllers/admin_EventsController.js new file mode 100644 index 0000000..f6edf8d --- /dev/null +++ b/server/WebSocket/controllers/admin_EventsController.js @@ -0,0 +1,112 @@ +const User = require('../../models/User') +const ContactPageMessage = require('../../models/ContactPageMessage') +const TicketConversation = require('../../models/TicketConversation') +const Representation = require('../../models/Representation') +const PieceRequest = require('../../models/PieceRequest') +const OldPieceRequest = require('../../models/OldPieceRequest') +const BufferRequest = require('../../models/BufferRequest') +const GuaranteeReport = require('../../models/GuaranteeReport') + +module.exports.getAllNotifs = async socket => { + try { + const allData = await Promise.all([ + // unreadCuMsgs + ContactPageMessage.find({ read: false }), + + // unreadTickets + TicketConversation.find({ messages: { $elemMatch: { isUser: true, read: false } } }), + + // newCustomers + User.find({ scope: ['user'], seenByAdmin: false, confirmed: true }), + + // newRepresentations + Representation.find({ status: 'registered' }), + + // newPieceRequests + PieceRequest.find({ status: 'sent' }), + + // newOldPieceRequests + OldPieceRequest.find({ status: 'sent' }), + + // newBufferRequests + BufferRequest.find({ status: 'sent' }), + + // newGuaranteeReports + GuaranteeReport.find({ status: 'sent', seen: false }) + ]) + + const unreadCuMsgs = allData[0] + const unreadTickets = allData[1] + const newCustomers = allData[2] + const newRepresentations = allData[3] + const newPieceRequests = allData[4] + const newOldPieceRequests = allData[5] + const newBufferRequests = allData[6] + const newGuaranteeReports = allData[7] + + socket.emit(`admin:allNotifs`, { + unreadCuMsgs: unreadCuMsgs.length, + unreadTickets: unreadTickets.length, + newCustomers: newCustomers.length, + newRepresentations: newRepresentations.length, + newPieceRequests: newPieceRequests.length, + newOldPieceRequests: newOldPieceRequests.length, + newBufferRequests: newBufferRequests.length, + newGuaranteeReports: newGuaranteeReports.length + }) + } catch (e) { + console.log(e) + } +} + +module.exports.notifyAdmin = async type => { + try { + const io = global._io + const admin = io.of('/admin') + const data = { type } + + if (type === 'updateNewCustomers') { + const newCustomers = await User.find({ scope: ['user'], seenByAdmin: false }) + data.newCustomers = newCustomers.length + } + + if (type === 'updateUnreadCuMsgs') { + const unreadCuMsgs = await ContactPageMessage.find({ read: false }) + data.unreadCuMsgs = unreadCuMsgs.length + } + + if (type === 'updateUnreadTickets') { + const unreadTickets = await TicketConversation.find({ messages: { $elemMatch: { isUser: true, read: false } } }) + data.unreadTickets = unreadTickets.length + } + + if (type === 'updateNewRepresentations') { + const newRepresentations = await Representation.find({ status: 'registered' }) + data.newRepresentations = newRepresentations.length + } + + if (type === 'updateNewPieceRequests') { + const newPieceRequests = await PieceRequest.find({ status: 'sent' }) + data.newPieceRequests = newPieceRequests.length + } + + if (type === 'updateNewOldPieceRequests') { + const newOldPieceRequests = await OldPieceRequest.find({ status: 'sent' }) + data.newOldPieceRequests = newOldPieceRequests.length + } + + if (type === 'updateNewBufferRequests') { + const newBufferRequests = await BufferRequest.find({ status: 'sent' }) + data.newBufferRequests = newBufferRequests.length + } + + if (type === 'updateNewGuaranteeReports') { + const newGuaranteeReports = await GuaranteeReport.find({ status: 'sent', seen: false }) + data.newGuaranteeReports = newGuaranteeReports.length + } + + admin.emit(`admin:notify`, data) + } catch (e) { + console.log(e) + } +} diff --git a/server/WebSocket/controllers/agent_EventsController.js b/server/WebSocket/controllers/agent_EventsController.js new file mode 100644 index 0000000..58f1f07 --- /dev/null +++ b/server/WebSocket/controllers/agent_EventsController.js @@ -0,0 +1,84 @@ +const Transaction = require('../../models/Transaction') +const Announcement = require('../../models/Announcement') + +module.exports.getAllNotifs = async socket => { + try { + const agentInbox = await Transaction.find({ agent_id: socket.agentId, seen: false }) + + socket.emit(`agent:allNotifs`, { + agentInbox: agentInbox.length + }) + } catch (e) { + console.log(e) + } +} + +module.exports.notifyAgent = async (type, agent_id) => { + try { + const io = global._io + const agent = io.of('/agent') + const data = { type } + + if (type === 'updateAgentInbox') { + const agentInbox = await Transaction.find({ agent_id, seen: false }) + data.agentInbox = agentInbox.length + } + + agent.to(agent_id.toString()).emit(`agent:notify`, data) + } catch (e) { + console.log(e) + } +} + +module.exports.notifyAllAgents = type => { + try { + const io = global._io + const agent = io.of('/agent') + const data = { type } + + agent.emit('agent:notifyAll', data) + } catch (e) { + console.log(e) + } +} + +module.exports.fetchAnnouncements = async socket => { + try { + const announcements = await Announcement.find({ expired: false, isForAgents: true }) + const modifiedAnnouncements = [] + let newAnnouncementsCount = 0 + for await (const announcement of announcements) { + const notif = { ...announcement._doc, seen: true } + if (!notif.seenBy.includes(socket.userId)) { + notif.seen = false + newAnnouncementsCount++ + } + delete notif.seenBy + delete notif.expired + delete notif.isForAgents + delete notif._creator + modifiedAnnouncements.push(notif) + } + + socket.emit('agent:announcements', { + newAgentAnnosCount: newAnnouncementsCount, + agentAnnouncements: modifiedAnnouncements.reverse() + }) + } catch (e) { + console.log(e) + } +} + +module.exports.updateAnnouncement = async (socket, id) => { + try { + if (id) { + const announcment = await Announcement.findById(id) + if (!announcment) throw new Error('invalid announcemnet id') + if (!announcment.seenBy.includes(socket.userId)) announcment.seenBy.push(socket.userId) + await announcment.save() + socket.emit('agent:fetchNewAnnouncements') + } + } catch (e) { + console.log(e) + } +} diff --git a/server/WebSocket/controllers/user_EventsController.js b/server/WebSocket/controllers/user_EventsController.js new file mode 100644 index 0000000..2ebd87f --- /dev/null +++ b/server/WebSocket/controllers/user_EventsController.js @@ -0,0 +1,98 @@ +const TransactionDrafts = require('../../models/TransactionDraft') +const TicketConversation = require('../../models/TicketConversation') +const Announcement = require('../../models/Announcement') + +module.exports.getAllNotifs = async socket => { + try { + const drafts = await TransactionDrafts.find({ user_id: socket.userId }) + const unreadTickets = await TicketConversation.find({ + user_id: socket.userId, + messages: { $elemMatch: { isUser: false, read: false } } + }) + + socket.emit(`user:allNotifs`, { + unreadTickets: unreadTickets.length, + draftsCount: drafts.length + }) + } catch (e) { + console.log(e) + } +} + +module.exports.notifyUser = async (type, user_id) => { + try { + const io = global._io + const user = io.of('/user') + const data = { type } + + if (type === 'updateUnreadTickets') { + const unreadTickets = await TicketConversation.find({ + user_id, + messages: { $elemMatch: { isUser: false, read: false } } + }) + + data.unreadTickets = unreadTickets.length + } + if (type === 'updateDraftsCount') { + const drafts = await TransactionDrafts.find({ user_id }) + data.draftsCount = drafts.length + } + + user.to(user_id.toString()).emit(`user:notify`, data) + } catch (e) { + console.log(e) + } +} + +module.exports.notifyAllUsers = type => { + try { + const io = global._io + const user = io.of('/user') + const data = { type } + + user.emit(`user:notifyAll`, data) + } catch (e) { + console.log(e) + } +} + +module.exports.fetchAnnouncements = async socket => { + try { + const announcements = await Announcement.find({ expired: false, isForAgents: false }) + const modifiedAnnouncements = [] + let newAnnouncementsCount = 0 + for await (const announcement of announcements) { + const notif = { ...announcement._doc, seen: true } + if (!notif.seenBy.includes(socket.userId)) { + notif.seen = false + newAnnouncementsCount++ + } + delete notif.seenBy + delete notif.expired + delete notif.isForAgents + delete notif._creator + modifiedAnnouncements.push(notif) + } + + socket.emit('user:announcements', { + newUserAnnosCount: newAnnouncementsCount, + userAnnouncements: modifiedAnnouncements.reverse() + }) + } catch (e) { + console.log(e) + } +} + +module.exports.updateAnnouncement = async (socket, id) => { + try { + if (id) { + const announcment = await Announcement.findById(id) + if (!announcment) throw new Error('invalid announcemnet id') + if (!announcment.seenBy.includes(socket.userId)) announcment.seenBy.push(socket.userId) + await announcment.save() + socket.emit('user:fetchNewAnnouncements') + } + } catch (e) { + console.log(e) + } +} diff --git a/server/WebSocket/middlewares/ws_authentication.js b/server/WebSocket/middlewares/ws_authentication.js new file mode 100644 index 0000000..dad95ea --- /dev/null +++ b/server/WebSocket/middlewares/ws_authentication.js @@ -0,0 +1,67 @@ +const jwt = require('jsonwebtoken') +const User = require('../../models/User') +const authentication = require('../../authentication') + +module.exports.isAdmin = async (socket, next) => { + try { + const token = socket.handshake?.auth?.token + if (!token) throw new Error('unauthenticated') + + // verifies secret and checks if the token is expired + const decodedToken = await jwt.verify(token.replace(/^Bearer\s/, ''), authentication.secretKey) + if (!decodedToken) throw new Error('unauthorized') + + // find user + const user = await User.findById(decodedToken._id) + if (!user || !user.scope.includes('admin')) throw new Error('unauthorized') + + socket.userId = decodedToken._id.toString() + return next() + } catch (e) { + // console.log('ws user middleware error --- ', e) + next(new Error(e)) + } +} + +module.exports.isUser = async (socket, next) => { + try { + const token = socket.handshake?.auth?.token + if (!token) throw new Error('unauthenticated') + + // verifies secret and checks if the token is expired + const decodedToken = await jwt.verify(token.replace(/^Bearer\s/, ''), authentication.secretKey) + if (!decodedToken) throw new Error('unauthorized') + + // find user + const user = await User.findById(decodedToken._id) + if (!user || !user.scope.includes('user')) throw new Error('unauthorized') + + socket.userId = decodedToken._id.toString() + return next() + } catch (e) { + // console.log('ws user middleware error --- ', e) + next(new Error(e)) + } +} + +module.exports.isAgent = async (socket, next) => { + try { + const token = socket.handshake?.auth?.token + if (!token) throw new Error('unauthenticated') + + // verifies secret and checks if the token is expired + const decodedToken = await jwt.verify(token.replace(/^Bearer\s/, ''), authentication.secretKey) + if (!decodedToken) throw new Error('unauthorized') + + // find user + const user = await User.findById(decodedToken._id) + if (!user || !user.scope.includes('user')) throw new Error('unauthorized') + if (!user.isAgent) throw new Error('شما نماینده نیستید') + + socket.userId = decodedToken._id.toString() + socket.agentId = user.representation_id.toString() + return next() + } catch (e) { + next(new Error(e)) + } +} diff --git a/server/WebSocket/namespaces/admin_NameSpace.js b/server/WebSocket/namespaces/admin_NameSpace.js new file mode 100644 index 0000000..e4e717b --- /dev/null +++ b/server/WebSocket/namespaces/admin_NameSpace.js @@ -0,0 +1,23 @@ +const { isAdmin } = require('../middlewares/ws_authentication') +const adminEventsController = require('../controllers/admin_EventsController') + +module.exports.adminNamespace = () => { + const io = global._io + const admin = io.of('/admin') + + // admins middlewares + admin.use(isAdmin) + + // attach events + admin.on('connection', socket => { + adminEventsController.getAllNotifs(socket) + + /// /////////////////////////////////////////////////////// handle connection error + socket.on('connect_error', err => { + console.log(err.message) + }) + + /// ////////////////////////////////////////////////////// events + // socket.on('admin:getNotifs', () => adminEventsController.getAllNotifs(socket)) + }) +} diff --git a/server/WebSocket/namespaces/agent_NameSpace.js b/server/WebSocket/namespaces/agent_NameSpace.js new file mode 100644 index 0000000..86186a2 --- /dev/null +++ b/server/WebSocket/namespaces/agent_NameSpace.js @@ -0,0 +1,25 @@ +const { isAgent } = require('../middlewares/ws_authentication') +const agentEventsController = require('../controllers/agent_EventsController') + +module.exports.agentNamespace = () => { + const io = global._io + const agent = io.of('/agent') + + // agents middlewares + agent.use(isAgent) + + // attach events + agent.on('connection', socket => { + socket.join(socket.agentId) + agentEventsController.getAllNotifs(socket) + + /// /////////////////////////////////////////////////////// handle connection error + socket.on('connect_error', err => { + console.log(err.message) + }) + + /// ////////////////////////////////////////////////////// events + socket.on('agent:fetchAnnouncements', data => agentEventsController.fetchAnnouncements(socket)) + socket.on('agent:updateAnnouncement', data => agentEventsController.updateAnnouncement(socket, data)) + }) +} diff --git a/server/WebSocket/namespaces/user_NameSpace.js b/server/WebSocket/namespaces/user_NameSpace.js new file mode 100644 index 0000000..c83ca38 --- /dev/null +++ b/server/WebSocket/namespaces/user_NameSpace.js @@ -0,0 +1,25 @@ +const { isUser } = require('../middlewares/ws_authentication') +const userEventsController = require('../controllers/user_EventsController') + +module.exports.userNamespace = () => { + const io = global._io + const user = io.of('/user') + + // users middlewares + user.use(isUser) + + // attach events + user.on('connection', socket => { + socket.join(socket.userId) + userEventsController.getAllNotifs(socket) + + /// /////////////////////////////////////////////////////// handle connection error + socket.on('connect_error', err => { + console.log(err.message) + }) + + /// ////////////////////////////////////////////////////// events + socket.on('user:fetchAnnouncements', data => userEventsController.fetchAnnouncements(socket)) + socket.on('user:updateAnnouncement', data => userEventsController.updateAnnouncement(socket, data)) + }) +} diff --git a/server/WebSocket/wss.js b/server/WebSocket/wss.js new file mode 100644 index 0000000..35aed73 --- /dev/null +++ b/server/WebSocket/wss.js @@ -0,0 +1,23 @@ +function init(server) { + // init params + const { WebSocketPort, NuxtPort, isProduction } = require('../_env') + const { userNamespace } = require('./namespaces/user_NameSpace') + const { agentNamespace } = require('./namespaces/agent_NameSpace') + const { adminNamespace } = require('./namespaces/admin_NameSpace') + const { Server } = require('socket.io') + const socketIO = require('socket.io') + + // init ws + let io + if (isProduction) io = socketIO(server) + else io = new Server(WebSocketPort, { cors: { origin: '*' } }) + console.log(`🟢 ~ WebSocket Server is listening on port ${isProduction ? NuxtPort : WebSocketPort}`) + global._io = io + + // namespaces + userNamespace() + agentNamespace() + adminNamespace() +} + +module.exports = init diff --git a/server/_env.js b/server/_env.js new file mode 100644 index 0000000..32d508a --- /dev/null +++ b/server/_env.js @@ -0,0 +1,39 @@ +const EnvirementVariables = { + // node envirements + isDev: process.env.NODE_ENV === 'devServer', + isProduction: process.env.NODE_ENV === 'production', + + // server ports + DevServerPort: 4000, + WebSocketPort: 5000, + NuxtPort: 7420, + NuxtHost: '0.0.0.0', + WebSocketURL() { + return EnvirementVariables.isProduction ? '' : `ws://localhost:${EnvirementVariables.WebSocketPort}` + }, + + /// ////////////// arpa configurations + // veriry + verityBaseUrl: 'http://80.210.26.100:8080/serv', + verityTokenUrl: 'http://80.210.26.100:8080/serv/token/GetServiceToken', + VerityUserGroupId: 28, + VerityBusinessCategoryId: 28, + VerityStockAreaId: 328, + verityAccount: { + username: 'arpa', + password: 'Arpa159@951' + }, + + // panatech + panatechBaseUrl: 'http://80.210.26.100:8083/serv', + panatechTokenUrl: 'http://80.210.26.100:8083/serv/token/GetServiceToken', + PanatechUserGroupId: 25, + PanatechBusinessCategoryId: 19, + PanatechStockAreaId: 13, + panatechAccount: { + username: 'arpa', + password: 'Arpa159@951' + } +} + +module.exports = EnvirementVariables diff --git a/server/authentication.js b/server/authentication.js new file mode 100644 index 0000000..7bbf587 --- /dev/null +++ b/server/authentication.js @@ -0,0 +1,104 @@ +const jwt = require('jsonwebtoken') +const User = require('./models/User') + +function res401(res, message) { + return res.status(401).json({ message }) +} + +const authentication = { + // secret for generating jwt token + secretKey: + '6fdd08afdb7ec5b7b83ba5d7635a4ad78a5c9545a9ccd90b0b74299b5ab3a69f640cdd1e0c47655daebe099c96e3172da9be76892f14ef2aec34937757c75f27', + // check if just logged in (admin-or-user) (middleware) + isLoggedIn(req, res, next) { + try { + const token = req.headers?.authorization + if (!token) throw new Error('err') + const decoded = jwt.verify(token.replace(/^Bearer\s/, ''), authentication.secretKey) + if (!decoded) throw new Error('err') + else return next() + } catch (err) { + return res401(res, 'unauthenticated') + } + }, + // check if admin logged in (middleware) + async isAdmin(req, res, next) { + try { + const token = req.headers?.authorization + if (!token) throw new Error('err') + + const decoded = jwt.verify(token.replace(/^Bearer\s/, ''), authentication.secretKey) + if (!decoded) throw new Error('err') + + const user = await User.findById(decoded._id) + if (!user || !user.scope.includes('admin')) throw new Error('err') + + req.user_id = decoded._id + return next() + } catch (err) { + return res401(res, 'unauthorized') + } + }, + // check if user logged in (middleware) + async isUser(req, res, next) { + try { + const token = req.headers?.authorization + if (!token) throw new Error('err') + + const decoded = jwt.verify(token.replace(/^Bearer\s/, ''), authentication.secretKey) + if (!decoded) throw new Error('err') + + const user = await User.findById(decoded._id) + if (!user || !user.scope.includes('user')) throw new Error('err') + + req.user_id = decoded._id + return next() + } catch (err) { + return res401(res, 'unauthorized') + } + }, + // check if user is agent and add agent id to body(middleware) + async isAgent(req, res, next) { + try { + const token = req.headers?.authorization + if (!token) throw new Error('err') + + const decoded = jwt.verify(token.replace(/^Bearer\s/, ''), authentication.secretKey) + if (!decoded) throw new Error('err') + + const user = await User.findById(decoded._id) + if (!user || !user.isAgent || !user.scope.includes('user')) throw new Error('err') + + req.user_id = decoded._id + req.agent_id = user.representation_id + return next() + } catch (err) { + return res401(res, 'unauthorized') + } + }, + // get user id from token + getID: req => { + const token = req.headers?.authorization + return jwt.verify(token?.replace(/^Bearer\s/, ''), authentication.secretKey, (err, decoded) => { + if (err) return null + else return decoded._id + }) + }, + // check if admin has permission (middleware - web only) + hasPermission: permission => { + return async (req, res, next) => { + try { + const token = req.headers?.authorization + if (!token) throw new Error('err') + + const user = await User.findOne({ token }) + if (!user || !user.permissions.includes(permission)) throw new Error('err') + else return next() + } catch (err) { + return res401(res, 'unauthorized') + } + } + } +} + +module.exports = authentication diff --git a/server/controllers/announcementController.js b/server/controllers/announcementController.js new file mode 100644 index 0000000..f5d3d56 --- /dev/null +++ b/server/controllers/announcementController.js @@ -0,0 +1,114 @@ +const { body, validationResult } = require('express-validator') +const Announcement = require('../models/Announcement') +const { _sr } = require('../plugins/serverResponses') +const { res404, res500, checkValidations } = require('../plugins/controllersHelperFunctions') +const { notifyAllUsers } = require('../WebSocket/controllers/user_EventsController') +const { notifyAllAgents } = require('../WebSocket/controllers/agent_EventsController') +const _faSr = _sr.fa + +module.exports.create = [ + [ + body('title').notEmpty().withMessage(_faSr.required.title), + + body('caption').notEmpty().withMessage(_faSr.required.caption), + + body('expireDate') + .notEmpty() + .withMessage('تاریخ انقضا را مشخص کنید') + .bail() + .isNumeric() + .withMessage('فرمت تاریخ باید timestamp باشد') + .bail() + .custom((value, { req }) => { + if (Number(value) < Date.now()) return Promise.reject(new Error('نمیتوان تاریخ روز جاری یا قبل تر انتخاب کرد.')) + else return Promise.resolve() + }), + body('isForAgents') + .notEmpty() + .withMessage('this param is required') + .bail() + .isBoolean() + .withMessage(_faSr.format.boolean) + ], + checkValidations(validationResult), + (req, res) => { + const { title, caption, expireDate, isForAgents } = req.body + const { user_id } = req + const data = { title, caption, expireDate, isForAgents, _creator: user_id } + const announcement = new Announcement(data) + announcement.save(err => { + if (err) return res500(res, err) + if (isForAgents) notifyAllAgents('fetchNewAnnouncements') + if (!isForAgents) notifyAllUsers('fetchNewAnnouncements') + return res.json({ message: _faSr.response.success_save }) + }) + } +] + +module.exports.getAllForAdmin = [ + (req, res) => { + Announcement.find({}, (err, notifs) => { + if (err) return res500(res, err) + return res.json(notifs) + }) + } +] + +module.exports.getOneForAdmin = [ + async (req, res) => { + try { + const announcement = await Announcement.findById(req.params.id) + return res.json(announcement) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.getNotifsForUsers = [ + async (req, res) => { + try { + const userID = req.user_id + const announcements = await Announcement.find({ users: { $ne: userID } }) + for await (const item of announcements) { + item.users.push(userID) + await item.save() + } + return res.json(announcements) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.deleteAnnouncement = [ + (req, res) => { + Announcement.findByIdAndRemove(req.params.id, (err, oldData) => { + if (err || !oldData) return res404(res, err) + return res.json({ message: _faSr.response.success_remove }) + }) + } +] + +// module.exports.updateByAdmin = [ +// [ +// body('title') +// .notEmpty().withMessage(_faSr.required.title), +// +// body('caption') +// .notEmpty().withMessage(_faSr.required.caption), +// ], +// checkValidations(validationResult), +// async (req, res) => { +// try { +// const {title, caption} = req.body +// const data = {title, caption, _creator: req.user_id} +// Announcement.findByIdAndUpdate(req.params.id, data, (err, oldData) => { +// if (err || !oldData) return res404(res, err) +// return res.json({message: _faSr.response.success_save}) +// }) +// } catch (e) { +// return res500(res, e) +// } +// } +// ] diff --git a/server/controllers/arpaConnectionController.js b/server/controllers/arpaConnectionController.js new file mode 100644 index 0000000..c639856 --- /dev/null +++ b/server/controllers/arpaConnectionController.js @@ -0,0 +1,70 @@ +/* eslint-disable node/handle-callback-err */ +const axios = require('axios') +const { verityAxiosConfig, panatechAxiosConfig } = require('../ArpaWebservice') +function axiosConfig(db) { + if (db === 'verity') return verityAxiosConfig() + else if (db === 'panatech') return panatechAxiosConfig() + else return {} +} + +/// //// cross server requests +module.exports.getRouteManager = [ + (req, res) => { + const { url, db } = req.body + axios + .get(url, axiosConfig(db)) + .then(arpaRes => { + if (arpaRes.data.error) return res.status(404).json(arpaRes.data.error) + else return res.json(arpaRes.data) + }) + .catch(err => { + // console.log('🚀 ~ file: arpaConnectionController.js ~ getRouteManager ~ err', err) + return res.status(500).json({ message: 'WebService Error' }) + }) + } +] +module.exports.postRouteManager = [ + (req, res) => { + const { url, db, data } = req.body + axios + .post(url, data, axiosConfig(db)) + .then(arpaRes => { + if (arpaRes.data.error) return res.status(404).json(arpaRes.data.error) + else return res.json(arpaRes.data) + }) + .catch(err => { + // console.log('🚀 ~ file: arpaConnectionController.js ~ postRouteManager ~ err', err) + return res.status(500).json({ message: 'WebService Error' }) + }) + } +] +module.exports.putRouteManager = [ + (req, res) => { + const { url, db, data } = req.body + axios + .put(url, data, axiosConfig(db)) + .then(arpaRes => { + if (arpaRes.data.error) return res.status(404).json(arpaRes.data.error) + else return res.json(arpaRes.data) + }) + .catch(err => { + // console.log('🚀 ~ file: arpaConnectionController.js ~ putRouteManager ~ err', err) + return res.status(500).json({ message: 'WebService Error' }) + }) + } +] +module.exports.deleteRouteManager = [ + (req, res) => { + const { url, db, data } = req.body + axios + .delete(url, data, axiosConfig(db)) + .then(arpaRes => { + if (arpaRes.data.error) return res.status(404).json(arpaRes.data.error) + else return res.json(arpaRes.data) + }) + .catch(err => { + // console.log('🚀 ~ file: arpaConnectionController.js ~ deleteRouteManager ~ err', err) + return res.status(500).json({ message: 'WebService Error' }) + }) + } +] diff --git a/server/controllers/bufferRequestController.js b/server/controllers/bufferRequestController.js new file mode 100644 index 0000000..82d4ff2 --- /dev/null +++ b/server/controllers/bufferRequestController.js @@ -0,0 +1,335 @@ +const moment = require('moment-jalaali') +const { body, validationResult } = require('express-validator') +const BufferRequest = require('../models/BufferRequest') +const { _sr } = require('../plugins/serverResponses') +const { + res404, + res406, + res500, + checkValidations, + generateRandomDigits +} = require('../plugins/controllersHelperFunctions') +const { SMS } = require('../plugins/SMS_Module') +// const { phrases } = require('../plugins/SMS_Phrases') +// const { notifyAgent } = require('../WebSocket/controllers/agent_EventsController') +const { notifyAdmin } = require('../WebSocket/controllers/admin_EventsController') +const _faSr = _sr.fa + +// date formaters +function ArpaDateFormat(date) { + return moment(date).format('YYYY-MM-DD HH:mm:ss') +} + +function SmsDateFormat(date) { + return moment(date).format('jYYYY/jMM/jDD') +} + +/// ///////////////// agent +module.exports.add_buffer_request = [ + async (req, res) => { + try { + const { user_id, agent_id } = req + const thisTime = Date.now() + + const data = { + user_id, + agent_id, + createDate: ArpaDateFormat(thisTime), + statusHistory: [{ status: 'temp', date: thisTime }] + } + + const br = BufferRequest(data) + await br.save() + return res.json({ message: _faSr.response.success_save }) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.add_buffer_to_br = [ + [ + body('ItemName').notEmpty().withMessage('نام کالا را مشخص کنید'), + + body('ItemID').notEmpty().withMessage('Include ItemID'), + + body('ItemCode').notEmpty().withMessage('Include ItemCode'), + + body('bufferQuantity') + .notEmpty() + .withMessage('تعداد قطعه را مشخص کنید') + .isNumeric() + .withMessage(_faSr.format.number) + ], + checkValidations(validationResult), + async (req, res) => { + try { + const brId = req.params?.brId + const { ItemName, ItemID, ItemCode, bufferQuantity } = req.body + + const data = { + ItemName, + ItemID, + ItemCode, + bufferQuantity + } + + const br = await BufferRequest.findById(brId) + br.items.push(data) + await br.save() + return res.json({ message: _faSr.response.success_save }) + } catch (e) { + return res404(res, e) + } + } +] + +module.exports.remove_buffer_from_br = [ + async (req, res) => { + try { + const bufferItemId = req.params?.bufferItemId + if (!bufferItemId) throw new Error('invalid id') + const br = await BufferRequest.findOne({ 'items._id': bufferItemId }) + br.items.id(bufferItemId).remove() + await br.save() + return res.json({ message: _faSr.response.success_remove }) + } catch (e) { + console.log(e) + return res500(res, e) + } + } +] + +module.exports.update_br_description = [ + (req, res) => { + const { description } = req.body + const data = { + description + } + BufferRequest.findByIdAndUpdate(req.params?.id, data, (err, oldData) => { + if (err) return res404(res, 'invalid id') + return res.json({ message: _faSr.response.success_save }) + }) + } +] + +module.exports.get_all_br_for_agent = [ + (req, res) => { + const agent_id = req.agent_id + BufferRequest.find({ agent_id }, (err, data) => { + if (err) return res500(res, err) + else return res.json(data) + }) + } +] + +module.exports.get_one_br_for_agent = [ + (req, res) => { + BufferRequest.findById(req.params.id) + .populate( + 'agent_id', + 'full_name province_name city_name address agent_code postal_code tel_number fax_number mobile_number' + ) + .exec((err, data) => { + if (err || !data) return res404(res, err) + else return res.json(data) + }) + } +] + +module.exports.delete_br = [ + async (req, res) => { + try { + const br = await BufferRequest.findById(req.params?.id) + if (br.status !== 'temp') return res406(res, 'نمیتوانید درخواست ارسال شده را حذف کنید') + await br.remove() + return res.json({ message: _faSr.response.success_remove }) + } catch (e) { + return res404(res, 'invalid id') + } + } +] + +module.exports.change_br_status_to_sent_by_agent = [ + async (req, res) => { + try { + const thisTime = Date.now() + + const br = await BufferRequest.findById(req.params?.id).populate('agent_id') + if (!br) throw new Error('invalid br id') + const totalBr = await BufferRequest.find({ status: { $ne: 'temp' } }) + + if (br.status !== 'temp') return res406(res, 'این فرم قبلا برای آسان سرویس ارسال شده') + if (!br.items.length) return res406(res, 'هیچ قطعه ای به فرم اضافه نکرده اید') + + // generate tracking code + const trackingCode = 'BP' + totalBr.length.toString().padStart(4, '0') + generateRandomDigits(2) + + // modify br + br.status = 'sent' + br.statusHistory.push({ status: 'sent', date: thisTime }) + br.trackingCode = trackingCode + br.sendDate = ArpaDateFormat(thisTime) + + // send sms for agent + const smsMsg = [ + ' نماینده گرامی درخواست کالای بافر شما در تاریخ ', + SmsDateFormat(thisTime), + ' با کد پیگیری ', + trackingCode, + ' برای شرکت ارسال شد. ' + ] + + SMS([br.agent_id.mobile_number], smsMsg.join('')) + + await br.save() + notifyAdmin('updateNewBufferRequests') + return res.json({ message: 'درخواست کالای بافر ارسال شد' }) + } catch (e) { + console.log(e) + + return res404(res, e) + } + } +] + +/// ///////////////// admin +module.exports.get_all_br_for_admin = [ + async (req, res) => { + try { + const brList = await BufferRequest.find({ + status: { $ne: 'temp' } + }).populate( + 'agent_id', + 'full_name agent_code mobile_number national_code province_name city_name province_id city_id' + ) + return res.json(brList) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.get_oneAgent_br_for_admin = [ + async (req, res) => { + const agent_id = req.params?.agent_id + try { + const brList = await BufferRequest.find({ + status: { $ne: 'temp' }, + agent_id + }).populate('agent_id', 'full_name agent_code mobile_number national_code province_name city_name') + return res.json(brList) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.get_one_br_for_admin = [ + async (req, res) => { + try { + const { user_id } = req + const thisTime = Date.now() + const br = await BufferRequest.findById(req.params?.id) + .populate( + 'agent_id', + 'agent_code full_name mobile_number fax_number tel_number province_name city_name national_code address postal_code store_name' + ) + .populate('_openedBy', 'username first_name last_name') + .populate('_updatedBy', 'username first_name last_name') + if (!br.seen) { + br.seen = true + br._openedBy = user_id + br.status = 'ongoing' + br.statusHistory.push({ status: 'ongoing', date: thisTime }) + await br.save() + + const smsMsg = [ + ' نماینده گرامی درخواست کالای بافر شما با کد پیگیری ', + br.trackingCode, + ' در تاریخ ', + SmsDateFormat(thisTime), + ' در دست اقدام قرار گرفت. ' + ] + + SMS([br.agent_id.mobile_number], smsMsg.join('')) + notifyAdmin('updateNewBufferRequests') + } + return res.json(br) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.change_br_status_by_admin = [ + [ + body('status') + .notEmpty() + .withMessage('status is required') + .bail() + .custom((value, { req }) => { + const acceptablvalues = ['waiting', 'delivered'] + if (!acceptablvalues.includes(value)) return Promise.reject(new Error('invalid status')) + else return true + }) + ], + checkValidations(validationResult), + async (req, res) => { + const { user_id } = req + const { status, deliveryCode } = req.body + const thisTime = Date.now() + + try { + const br = await BufferRequest.findById(req.params?.id).populate('agent_id') + if (!br) throw new Error('invalid br id') + + // check statuses + const statusErrMsg = 'invalid status for this time' + if (br.status === 'delivered') return res406(res, statusErrMsg) + if (br.status === 'waiting' && status === 'waiting') return res406(res, statusErrMsg) + + // save status + br._updatedBy = user_id + br.status = status + br.statusHistory.push({ status, date: thisTime }) + + let smsMessage + // differenet status methods + if (status === 'waiting') { + smsMessage = [ + ' نماینده گرامی درخواست کالای بافر شما با کد پیگیری ', + br.trackingCode, + ' در تاریخ ', + SmsDateFormat(thisTime), + ' در انتظار قطعه میباشد. ' + ] + } + + if (status === 'delivered') { + if (deliveryCode) br.deliveryCode = deliveryCode + + function deliveryCodePhrase() { + if (deliveryCode.length) return `کد پیگیری مرسوله: ${deliveryCode}` + '\n' + else return '' + } + + smsMessage = [ + ' نماینده گرامی درخواست کالای بافر شما با کد پیگیری ', + br.trackingCode, + ' در تاریخ ', + SmsDateFormat(thisTime), + ' تحویل شد. ', + '\n', + deliveryCodePhrase() + ] + } + + await SMS([br.agent_id.mobile_number], smsMessage.join('')) + await br.save() + return res.json({ message: _faSr.response.success_save }) + } catch (e) { + return res500(res, e) + } + } +] diff --git a/server/controllers/contactPageController.js b/server/controllers/contactPageController.js new file mode 100644 index 0000000..480c53d --- /dev/null +++ b/server/controllers/contactPageController.js @@ -0,0 +1,68 @@ +const { body, validationResult } = require('express-validator') +const ContactPageMessage = require('../models/ContactPageMessage') +const { _sr } = require('../plugins/serverResponses') +const { notifyAdmin } = require('../WebSocket/controllers/admin_EventsController') +const { res404 } = require('../plugins/controllersHelperFunctions') + +const _faSr = _sr.fa + +module.exports.create = [ + [ + body('full_name') + .notEmpty() + .withMessage(_faSr.required.name) + .bail() + .isLength({ min: 2 }) + .withMessage(_faSr.min_char.min2), + + body('email').notEmpty().withMessage(_faSr.required.email).bail().isEmail().withMessage(_faSr.format.email), + + body('message').isLength({ min: 20 }).withMessage(_faSr.min_char.min20) + ], + (req, res) => { + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({ validation: errors.mapped() }) + + const data = { + full_name: req.body.full_name, + email: req.body.email, + message: req.body.message + } + const message = new ContactPageMessage(data) + message.save((err, message) => { + if (err) console.log(err) + notifyAdmin('updateUnreadCuMsgs') + return res.json({ message: _faSr.response.success_save }) + }) + } +] + +module.exports.getAll = [ + (req, res) => { + ContactPageMessage.find({}) + .select('-message') + .then(messages => { + return res.json(messages) + }) + .catch(err => { + return res.status(500).json({ message: err }) + }) + } +] + +module.exports.getOne = [ + async (req, res) => { + try { + const message = await ContactPageMessage.findById(req.params.id).populate('read_by', 'first_name last_name') + if (!message.read) { + message.read_by = req.user_id + message.read = true + await message.save() + notifyAdmin('updateUnreadCuMsgs') + } + return res.json(message) + } catch (e) { + return res404(res, _faSr.not_found.item_id) + } + } +] diff --git a/server/controllers/downloadCategoryController.js b/server/controllers/downloadCategoryController.js new file mode 100644 index 0000000..d01d8f8 --- /dev/null +++ b/server/controllers/downloadCategoryController.js @@ -0,0 +1,96 @@ +const { body, validationResult } = require('express-validator') +const DownloadCategory = require('../models/download/DownloadCategory') +const Download = require('../models/download/Download') +const { _sr } = require('../plugins/serverResponses') +const { res404, res500, checkValidations } = require('../plugins/controllersHelperFunctions') + +const _faSr = _sr.fa + +module.exports.create = [ + [ + body('name') + .notEmpty() + .withMessage(_faSr.required.name) + .bail() + .custom((value, { req }) => { + return DownloadCategory.findOne({ name: value }).then(category => { + if (category) return Promise.reject(_faSr.duplicated.name) + else return true + }) + }) + ], + checkValidations(validationResult), + (req, res) => { + const data = { + _creator: req.user_id, + name: req.body.name + } + + const dCategory = new DownloadCategory(data) + dCategory.save(err => { + if (err) console.log(err) + return res.json({ message: _faSr.response.success_save }) + }) + } +] + +module.exports.getAll = [ + (req, res) => { + DownloadCategory.find({}, (err, categories) => { + if (err) return res500(res, err) + return res.json(categories) + }) + } +] + +module.exports.getOne = [ + (req, res) => { + DownloadCategory.findById(req.params?.id) + .populate('_creator', 'first_name last_name') + .exec((err, category) => { + if (err) return res404(res, err) + return res.json(category) + }) + } +] + +module.exports.update = [ + [ + body('name') + .notEmpty() + .withMessage(_faSr.required.name) + .bail() + .custom((value, { req }) => { + return DownloadCategory.findOne({ name: value }).then(category => { + if (category && category._id.toString() !== req.params.id) return Promise.reject(_faSr.duplicated.name) + else return true + }) + }) + ], + checkValidations(validationResult), + (req, res) => { + const data = { + _creator: req.user_id, + name: req.body.name + } + DownloadCategory.findByIdAndUpdate(req.params.id, data, (err, oldData) => { + if (err) return res404(res, err) + return res.json({ message: _faSr.response.success_save }) + }) + } +] + +module.exports.delete = [ + (req, res) => { + Download.findOne({ category: req.params.id }, (err, item) => { + if (err) return res404(res, err) + if (item) return res.status(403).json({ message: 'این دسته بندی دارای آیتم میباشد.' }) + else { + DownloadCategory.findByIdAndDelete(req.params.id, (err, category) => { + if (err) return res404(res, err) + return res.json({ message: _faSr.response.success_remove }) + }) + } + }) + } +] diff --git a/server/controllers/downloadController.js b/server/controllers/downloadController.js new file mode 100644 index 0000000..ac2a175 --- /dev/null +++ b/server/controllers/downloadController.js @@ -0,0 +1,267 @@ +const fs = require('fs') +const mongoose = require('mongoose') +const { body, validationResult } = require('express-validator') +const jimp = require('jimp') +const Download = require('../models/download/Download') +const DownloadCategory = require('../models/download/DownloadCategory') +const { _sr } = require('../plugins/serverResponses') +const { res404, res500, checkValidations } = require('../plugins/controllersHelperFunctions') +const _faSr = _sr.fa + +const imageWidth = 400 +const imageHeight = 400 +const imageQuality = 100 +const shortDescriptionLength = 200 + +const paginateLimit = 8 + +module.exports.create = [ + [ + body('title') + .notEmpty() + .withMessage(_faSr.required.title) + .bail() + .custom((value, { req }) => { + return Download.findOne({ title: value }).then(item => { + if (item) return Promise.reject(_faSr.duplicated.title) + else return true + }) + }), + + body('short_description').notEmpty().withMessage(_faSr.required.description), + + body('description').notEmpty().withMessage(_faSr.required.description), + + body('category').notEmpty().withMessage(_faSr.required.category) + ], + checkValidations(validationResult), + (req, res) => { + if (!req.files || !req.files.image) + return res.status(422).json({ validation: { image: { msg: _faSr.required.image } } }) + + const data = { + _creator: req.user_id, + title: req.body.title, + short_description: req.body.short_description.slice(0, shortDescriptionLength), + description: req.body.description, + category: req.body.category + } + + const image = req.files.image + // validate image format + const supportedFormats = ['jpg', 'jpeg', 'png', 'webp'] + if (!supportedFormats.includes(image.mimetype.split('/')[1])) { + return res.status(422).json({ validation: { image: { msg: _faSr.format.image } } }) + } + + const imageName = 'download_' + Date.now() + '.' + image.mimetype.split('/')[1] + data.image = imageName + + jimp + .read(image.data) + .then(img => { + img.cover(imageWidth, imageHeight) + img.quality(imageQuality) + img.write(`./static/uploads/images/downloads/${imageName}`, err => { + if (err) console.log(err) + }) + }) + .catch(err => { + console.log(err) + }) + + const download = new Download(data) + download.save((err, data) => { + if (err) console.log(err) + return res.json(data) + }) + } +] + +module.exports.getAll = [ + async (req, res) => { + try { + if (req.params.category === 'all') { + const downloads = await Download.paginate({}, { page: req.params.page, limit: paginateLimit }) + if (!downloads.docs.length && Number(req.params.page) !== 1) + return res.status(404).json({ message: _faSr.not_found.item_id }) + return res.json(downloads) + } else { + let catID + if (mongoose.isValidObjectId(req.params.category)) catID = req.params.category + else { + const category = await DownloadCategory.findOne({ name: req.params.category }) + if (!category) return res.status(404).json({ message: _faSr.not_found.item_id }) + catID = category._id + } + const downloads = await Download.paginate({ category: catID }, { page: req.params.page, limit: paginateLimit }) + if (!downloads.docs.length && Number(req.params.page) !== 1) + return res.status(404).json({ message: _faSr.not_found.item_id }) + return res.json(downloads) + } + } catch (e) { + return res.status(404).json({ message: _faSr.not_found.item_id }) + } + } +] + +module.exports.getNewest = [ + (req, res) => { + Download.find({}) + .sort({ _id: -1 }) + .limit(3) + .exec((err, data) => { + if (err) return res500(res, err) + return res.json(data) + }) + } +] + +module.exports.getOne = [ + (req, res) => { + const query = {} + if (mongoose.isValidObjectId(req.params.id)) query._id = req.params.id + else query.title = req.params.id + Download.findOne(query) + .populate('_creator', 'first_name last_name') + .exec((err, item) => { + if (err) return res.status(404).json({ message: err }) + return res.json(item) + }) + } +] + +module.exports.update = [ + [ + body('title') + .notEmpty() + .withMessage(_faSr.required.title) + .bail() + .custom((value, { req }) => { + return Download.findOne({ title: value }).then(item => { + if (item && item._id.toString() !== req.params.id) return Promise.reject(_faSr.duplicated.title) + else return true + }) + }), + + body('short_description').notEmpty().withMessage(_faSr.required.description), + + body('description').notEmpty().withMessage(_faSr.required.description), + + body('category').notEmpty().withMessage(_faSr.required.category) + ], + checkValidations(validationResult), + (req, res) => { + const data = { + _creator: req.user_id, + title: req.body.title, + short_description: req.body.short_description.slice(0, shortDescriptionLength), + description: req.body.description, + category: req.body.category + } + + if (req.files && req.files.image) { + const image = req.files.image + // validate image format + const supportedFormats = ['jpg', 'jpeg', 'png', 'webp'] + if (!supportedFormats.includes(image.mimetype.split('/')[1])) { + return res.status(422).json({ validation: { image: { msg: _faSr.format.image } } }) + } + + const imageName = 'download_' + Date.now() + '.' + image.mimetype.split('/')[1] + data.image = imageName + + jimp + .read(image.data) + .then(img => { + img.cover(imageWidth, imageHeight) + img.quality(imageQuality) + img.write(`./static/uploads/images/downloads/${imageName}`, err => { + if (err) console.log(err) + }) + }) + .catch(err => { + console.log(err) + }) + } + + Download.findByIdAndUpdate(req.params.id, data, (err, oldData) => { + if (err) return res.status(404).json({ message: _faSr.not_found.item_id }) + if (req.files && req.files.image) { + fs.unlink(`./static/${oldData.image}`, err => { + if (err) console.log(err) + }) + } + Download.findById(oldData._id, (err, result) => { + if (err) return res.status(404).json({ message: _faSr.not_found.item_id }) + return res.json(result) + }) + }) + } +] + +module.exports.delete = [ + (req, res) => { + Download.findByIdAndDelete(req.params.id, (err, data) => { + if (err) return res.status(404).json({ message: _faSr.not_found.item_id }) + data.files.forEach(item => { + fs.unlink(`./static/${item.file}`, err => { + if (err) console.log(err) + }) + }) + return res.json({ message: _faSr.response.success_remove }) + }) + } +] +/// /////////////////////////////////////////////////////////// add files +module.exports.addFile = [ + [ + body('name').notEmpty().withMessage(_faSr.required.name), + + body('os').notEmpty().withMessage(_faSr.required.category) + ], + checkValidations(validationResult), + (req, res) => { + if (!req.files || !req.files.file) + return res.status(422).json({ validation: { file: { msg: _faSr.required.file } } }) + + const file = req.files.file + const fileName = 'AsanService-' + Math.ceil(Math.random() * 1000) + '_' + file.name + file.mv(`./static/uploads/apps/${fileName}`) + + const data = { + _creator: req.user_id, + name: req.body.name, + os: req.body.os, + file: fileName + } + + Download.findById(req.body.page_id, (err, page) => { + if (err || !page) return res404(res, err) + page.files.push(data) + page.save(err => { + if (err) console.log(err) + return res.json(page.files) + }) + }) + } +] + +module.exports.deletFile = [ + (req, res) => { + Download.findOne({ 'files._id': req.params.id }, (err, page) => { + if (err || !page) return res404(res, err) + const app = page.files.id(req.params.id) + app.remove(err => { + if (err) console.log(err) + fs.unlink(`./static/${app.file}`, err => { + if (err) console.log(err) + }) + }) + page.save(err => { + if (err) console.log(err) + return res.json({ message: _faSr.response.success_remove }) + }) + }) + } +] diff --git a/server/controllers/faqController.js b/server/controllers/faqController.js new file mode 100644 index 0000000..c872046 --- /dev/null +++ b/server/controllers/faqController.js @@ -0,0 +1,76 @@ +const { body, validationResult } = require('express-validator') +const FAQ = require('../models/FAQ') +const { _sr } = require('../plugins/serverResponses') +const { res404, res500, checkValidations } = require('../plugins/controllersHelperFunctions') +const _faSr = _sr.fa + +module.exports.create = [ + [ + body('question').notEmpty().withMessage(_faSr.required.question), + + body('answer').notEmpty().withMessage(_faSr.required.answer) + ], + checkValidations(validationResult), + (req, res) => { + const data = { + _creator: req.user_id, + question: req.body.question, + answer: req.body.answer + } + + const faq = new FAQ(data) + faq.save(cb => { + return res.json({ message: _faSr.response.success_save }) + }) + } +] + +module.exports.getAll = [ + (req, res) => { + FAQ.find({}, (err, data) => { + if (err) return res500(res, err) + return res.json(data) + }) + } +] + +module.exports.getOne = [ + (req, res) => { + FAQ.findById(req.params.id) + .populate('_creator', 'first_name last_name') + .exec((err, data) => { + if (err) return res.status(404).json({ message: err }) + return res.json(data) + }) + } +] + +module.exports.update = [ + [ + body('question').notEmpty().withMessage(_faSr.required.question), + + body('answer').notEmpty().withMessage(_faSr.required.answer) + ], + checkValidations(validationResult), + (req, res) => { + const data = { + _creator: req.user_id, + question: req.body.question, + answer: req.body.answer + } + + FAQ.findByIdAndUpdate(req.params.id, data, (err, oldData) => { + if (err) return res404(res, err) + return res.json({ message: _faSr.response.success_save }) + }) + } +] + +module.exports.delete = [ + (req, res) => { + FAQ.findByIdAndDelete(req.params.id, (err, oldData) => { + if (err) return res.status(404).json({ message: err }) + return res.json({ message: _faSr.response.success_remove }) + }) + } +] diff --git a/server/controllers/guaranteeReportController.js b/server/controllers/guaranteeReportController.js new file mode 100644 index 0000000..d2319dd --- /dev/null +++ b/server/controllers/guaranteeReportController.js @@ -0,0 +1,334 @@ +const moment = require('moment-jalaali') +const { body, validationResult } = require('express-validator') +const GuaranteeReport = require('../models/GuaranteeReport') +const { _sr } = require('../plugins/serverResponses') +const { + res404, + res406, + res500, + checkValidations, + generateRandomDigits +} = require('../plugins/controllersHelperFunctions') +const { SMS } = require('../plugins/SMS_Module') +const { notifyAdmin } = require('../WebSocket/controllers/admin_EventsController') +const _faSr = _sr.fa + +// date formaters +function ArpaDateFormat(date) { + return moment(date).format('YYYY-MM-DD HH:mm:ss') +} + +function SmsDateFormat(date) { + return moment(date).format('jYYYY/jMM/jDD') +} + +/// ///////////////// agent +module.exports.add_guaranteeReport = [ + async (req, res) => { + try { + const { user_id, agent_id } = req + const thisTime = Date.now() + + const data = { + user_id, + agent_id, + createDate: ArpaDateFormat(thisTime) + } + + const gr = GuaranteeReport(data) + await gr.save() + return res.json({ message: _faSr.response.success_save }) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.add_report_to_gr = [ + [ + body('customerTel').notEmpty().withMessage('شماره تماس مشتری را وارد کنید'), + + body('ItemName').notEmpty().withMessage('نام کالا را مشخص کنید'), + + body('ItemID').notEmpty().withMessage('Include ItemID'), + + body('ItemCode').notEmpty().withMessage('Include ItemCode'), + + body('productIssue').notEmpty().withMessage('ایراد کالا را وارد کنید'), + + body('usedPieces').notEmpty().withMessage('قطعات مصرفی را وارد کنید'), + + body('recieveDate').notEmpty().withMessage('تاریخ دریافت از مشتری را مشخص کنید'), + + body('deliverDate') + .notEmpty() + .withMessage('تاریخ تحویل به مشتری را مشخص کنید') + .bail() + .custom((value, { req }) => { + function timeStamp(date) { + return Number(moment(date).format('x')) + } + const start = timeStamp(req.body.recieveDate) + const end = timeStamp(value) + if (end < start) + return Promise.reject(new Error('تاریخ تحویل به مشتری نباید از تاریخ دریافت از مشتری کوچکتر باشد')) + else return true + }) + ], + checkValidations(validationResult), + async (req, res) => { + try { + const grId = req.params?.grId + const { + customerName, + customerTel, + ItemName, + SerialNo1, + ItemID, + ItemCode, + productIssue, + usedPieces, + recieveDate, + deliverDate + } = req.body + + const data = { + customerName, + customerTel, + ItemName, + SerialNo1, + ItemID, + ItemCode, + productIssue, + usedPieces, + recieveDate, + deliverDate + } + + const gr = await GuaranteeReport.findById(grId) + gr.items.push(data) + await gr.save() + return res.json({ message: _faSr.response.success_save }) + } catch (e) { + return res404(res, e) + } + } +] + +module.exports.remove_report_from_gr = [ + async (req, res) => { + try { + const reportItemId = req.params?.reportItemId + if (!reportItemId) throw new Error('invalid id') + const gr = await GuaranteeReport.findOne({ 'items._id': reportItemId }) + gr.items.id(reportItemId).remove() + await gr.save() + return res.json({ message: _faSr.response.success_remove }) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.update_gr_description = [ + (req, res) => { + const { description } = req.body + const data = { + description + } + GuaranteeReport.findByIdAndUpdate(req.params?.id, data, (err, oldData) => { + if (err) return res404(res, 'invalid id') + return res.json({ message: _faSr.response.success_save }) + }) + } +] + +module.exports.get_all_gr_for_agent = [ + (req, res) => { + const { agent_id } = req + GuaranteeReport.find({ agent_id }, (err, data) => { + if (err) return res500(res, err) + else return res.json(data) + }) + } +] + +module.exports.get_one_gr_for_agent = [ + (req, res) => { + GuaranteeReport.findById(req.params?.id) + .populate( + 'agent_id', + 'full_name province_name city_name address agent_code postal_code tel_number fax_number mobile_number' + ) + .exec((err, data) => { + if (err || !data) return res404(res, err) + else return res.json(data) + }) + } +] + +module.exports.delete_gr = [ + async (req, res) => { + try { + const gr = await GuaranteeReport.findById(req.params?.id) + if (gr.status !== 'temp') return res406(res, 'نمیتوانید درخواست ارسال شده را حذف کنید') + await gr.remove() + return res.json({ message: _faSr.response.success_remove }) + } catch (e) { + return res404(res, 'invalid id') + } + } +] + +module.exports.change_gr_status_to_sent_by_agent = [ + async (req, res) => { + try { + const thisTime = Date.now() + + const gr = await GuaranteeReport.findById(req.params?.id).populate('agent_id') + if (!gr) throw new Error('invalid gr id') + const totalGr = await GuaranteeReport.find({ status: { $ne: 'temp' } }) + + if (gr.status !== 'temp') return res406(res, 'این فرم قبلا برای آسان سرویس ارسال شده') + if (!gr.items.length) return res406(res, 'هیچ آیتمی ای به فرم اضافه نکرده اید') + + // generate tracking code + const trackingCode = 'GR' + totalGr.length.toString().padStart(4, '0') + generateRandomDigits(2) + + // modify gr + gr.status = 'sent' + gr.trackingCode = trackingCode + gr.sendDate = ArpaDateFormat(thisTime) + + // send sms for agent + const smsMsg = [ + ' نماینده گرامی فرم گزارش عملکرد گارانتی شما در تاریخ ', + SmsDateFormat(thisTime), + ' با کد پیگیری ', + trackingCode, + ' برای شرکت ارسال شد. ' + ] + + SMS([gr.agent_id.mobile_number], smsMsg.join('')) + + await gr.save() + notifyAdmin('updateNewGuaranteeReports') + return res.json({ message: 'فرم گزارش عملکرد گارانتی ارسال شد' }) + } catch (e) { + console.log(e) + + return res404(res, e) + } + } +] + +/// ///////////////// admin +module.exports.get_all_gr_for_admin = [ + async (req, res) => { + try { + const grList = await GuaranteeReport.find({ status: { $ne: 'temp' } }).populate( + 'agent_id', + 'full_name agent_code mobile_number national_code province_name city_name province_id city_id' + ) + return res.json(grList) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.get_one_gr_for_admin = [ + async (req, res) => { + try { + const { user_id } = req + const gr = await GuaranteeReport.findById(req.params?.id) + .populate( + 'agent_id', + 'agent_code full_name mobile_number fax_number tel_number province_name city_name national_code address postal_code store_name' + ) + .populate('_openedBy', 'username first_name last_name') + .populate('_updatedBy', 'username first_name last_name') + if (!gr.seen) { + gr._openedBy = user_id + gr.seen = true + await gr.save() + notifyAdmin('updateNewGuaranteeReports') + } + return res.json(gr) + } catch (e) { + return res500(res, e) + } + } +] + +// module.exports.change_gr_status_by_admin = [ +// [ +// body('status') +// .notEmpty() +// .withMessage('status is required') +// .bail() +// .custom((value, { req }) => { +// acceptablvalues = ['waiting', 'delivered'] +// if (!acceptablvalues.includes(value)) return Promise.reject('invalid status') +// else return true +// }) +// ], +// checkValidations(validationResult), +// async (req, res) => { +// const { user_id } = req +// const { status, deliveryCode } = req.body +// const thisTime = Date.now() + +// try { +// const gr = await GuaranteeReport.findById(req.params?.id).populate('agent_id') +// if (!gr) throw 'invalid gr id' + +// // check statuses +// const statusErrMsg = 'invalid status for this time' +// if (gr.status === 'delivered') return res406(res, statusErrMsg) +// if (gr.status === 'waiting' && status === 'waiting') return res406(res, statusErrMsg) + +// // save status +// gr._updatedBy = user_id +// gr.status = status +// gr.statusHistory.push({ status: status, date: thisTime }) + +// let smsMessage +// // differenet status methods +// if (status === 'waiting') { +// smsMessage = [ +// ' نماینده گرامی درخواست قطعه شما با کد پیگیری ', +// gr.trackingCode, +// ' در تاریخ ', +// SmsDateFormat(thisTime), +// ' در انتظار قطعه میباشد. ' +// ] +// } + +// if (status === 'delivered') { +// if (deliveryCode) gr.deliveryCode = deliveryCode + +// function deliveryCodePhrase() { +// if (deliveryCode.length) return `کد پیگیری مرسوله: ${deliveryCode}` + '\n' +// else return '' +// } + +// smsMessage = [ +// ' نماینده گرامی درخواست قطعه شما با کد پیگیری ', +// gr.trackingCode, +// ' در تاریخ ', +// SmsDateFormat(thisTime), +// ' تحویل شد. ', +// '\n', +// deliveryCodePhrase() +// ] +// } + +// await SMS([gr.agent_id.mobile_number], smsMessage.join('')) +// await gr.save() +// return res.json({ message: _faSr.response.success_save }) +// } catch (e) { +// return res500(res, e) +// } +// } +// ] diff --git a/server/controllers/helpController.js b/server/controllers/helpController.js new file mode 100644 index 0000000..f2fe2a1 --- /dev/null +++ b/server/controllers/helpController.js @@ -0,0 +1,49 @@ +const Help = require('../models/Help') +const { _sr } = require('../plugins/serverResponses') +const { res500 } = require('../plugins/controllersHelperFunctions') +const _faSr = _sr.fa + +module.exports.set = [ + async (req, res) => { + const { helpId } = req.body + try { + const help = await Help.findOne() + if (help) { + help.helpId = helpId + help._creator = req.user_id + await help.save() + return res.json({ message: _faSr.response.success_save }) + } else { + const help = new Help({ + helpId, + _creator: req.user_id + }) + help.save() + return res.json({ message: _faSr.response.success_save }) + } + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.get = [ + (req, res) => { + const front = req.query?.front + if (front) { + Help.findOne({}) + .populate('helpId', '_id title') + .exec((err, data) => { + if (err) return res500(res, err) + else return res.json(data) + }) + } else { + Help.findOne({}) + .populate('_creator', 'first_name last_name') + .exec((err, data) => { + if (err) return res500(res, err) + else return res.json(data) + }) + } + } +] diff --git a/server/controllers/iranCitiesController.js b/server/controllers/iranCitiesController.js new file mode 100644 index 0000000..e69eb9c --- /dev/null +++ b/server/controllers/iranCitiesController.js @@ -0,0 +1,7 @@ +const { iranCities } = require('../plugins/iranCities') + +module.exports.getIranCities = [ + (req, res) => { + return res.json(iranCities) + } +] diff --git a/server/controllers/learningController.js b/server/controllers/learningController.js new file mode 100644 index 0000000..1cf6d24 --- /dev/null +++ b/server/controllers/learningController.js @@ -0,0 +1,247 @@ +const fs = require('fs') +const mongoose = require('mongoose') +const { body, validationResult } = require('express-validator') +const jimp = require('jimp') +const Learning = require('../models/Learning') +const { _sr } = require('../plugins/serverResponses') +const { res404, res500, checkValidations } = require('../plugins/controllersHelperFunctions') +const _faSr = _sr.fa +// +const coverWidth = 1300 +const coverHeight = 620 +const thumbWidth = 636 +const thumbHeight = 400 +const coverQuality = 80 +// const coverThumbQuality = 100 +const shortDescriptionLength = 260 + +const paginateLimit = 5 + +module.exports.create = [ + [ + // title + body('title') + .notEmpty() + .withMessage(_faSr.required.title) + .custom((value, { req }) => { + return Learning.findOne({ title: value }).then(post => { + if (post) return Promise.reject(_faSr.duplicated.title) + return true + }) + }), + + // description + body('description').notEmpty().withMessage(_faSr.required.description), + + // short description + body('short_description').notEmpty().withMessage(_faSr.required.description) + ], + checkValidations(validationResult), + (req, res) => { + if (!req.files || !req.files.cover) + return res.status(422).json({ validation: { cover: { msg: _faSr.required.cover } } }) + + const data = { + _creator: req.user_id, + title: req.body.title, + description: req.body.description, + short_description: req.body.short_description.slice(0, shortDescriptionLength) + ' ... ' + } + + if (req.files && req.files.cover) { + const cover = req.files.cover + + // validate image format + const supportedFormats = ['jpg', 'jpeg', 'png', 'webp'] + if (!supportedFormats.includes(cover.mimetype.split('/')[1])) { + return res.status(422).json({ validation: { cover: { msg: _faSr.format.image } } }) + } + + const coverName = 'blog_' + Date.now() + '.' + cover.mimetype.split('/')[1] + data.cover = data.thumb = coverName + + jimp + .read(cover.data) + .then(img => { + img + .cover(coverWidth, coverHeight) + .quality(coverQuality) + .write(`./static/uploads/images/blog/${coverName}`) + .resize(thumbWidth, jimp.AUTO) + .cover(thumbWidth, thumbHeight) + .write(`./static/uploads/images/blog/thumb/${coverName}`) + }) + .catch(err => { + console.log(err) + }) + } + + if (req.files && req.files.video) { + const video = req.files.video + + // validate video format + const supportedFormats = ['mp4', 'avi', 'wmv'] + if (!supportedFormats.includes(video.mimetype.split('/')[1])) { + return res.status(422).json({ validation: { video: { msg: _faSr.format.video } } }) + } + + const videoName = 'blog_' + Date.now() + '.' + video.mimetype.split('/')[1] + data.video = videoName + video.mv(`./static/uploads/videos/${videoName}`, err => { + if (err) console.log(err) + }) + } + + const post = new Learning(data) + post.save(err => { + if (err) console.log(err) + return res.json({ message: _faSr.response.success_save }) + }) + } +] + +module.exports.getAll = [ + (req, res) => { + const page = req.params?.page + if (page === 'all') { + Learning.find({}, (err, data) => { + if (err) return res500(res, err) + else return res.json(data) + }) + } else { + Learning.paginate({}, { page: page || 1, limit: paginateLimit, sort: { _id: -1 } }, (err, data) => { + if (err) return res500(res, err) + if (!data.docs.length && Number(req.params.page) !== 1) + return res.status(404).json({ message: _faSr.not_found.item_id }) + else return res.json(data) + }) + } + } +] + +module.exports.getOne = [ + (req, res) => { + const query = {} + if (mongoose.isValidObjectId(req.params.id)) query._id = req.params.id + else query.title = req.params.id + Learning.findOne(query) + .populate('_creator', 'first_name last_name') + .exec((err, post) => { + if (err || !post) return res404(res, err) + return res.json(post) + }) + } +] + +module.exports.update = [ + [ + // title + body('title') + .notEmpty() + .withMessage(_faSr.required.title) + .custom((value, { req }) => { + return Learning.findOne({ title: value }).then(post => { + if (post && post._id.toString() !== req.params.id) return Promise.reject(_faSr.duplicated.title) + return true + }) + }), + + // description + body('description').notEmpty().withMessage(_faSr.required.description), + + // short description + body('short_description').notEmpty().withMessage(_faSr.required.description) + ], + checkValidations(validationResult), + (req, res) => { + const data = { + _creator: req.user_id, + title: req.body.title, + description: req.body.description, + short_description: req.body.short_description.slice(0, shortDescriptionLength) + ' ... ' + } + + if (req.files && req.files.cover) { + const cover = req.files.cover + + // validate image format + const supportedFormats = ['jpg', 'jpeg', 'png', 'webp'] + if (!supportedFormats.includes(cover.mimetype.split('/')[1])) { + return res.status(422).json({ validation: { cover: { msg: _faSr.format.image } } }) + } + + const coverName = 'blog_' + Date.now() + '.' + cover.mimetype.split('/')[1] + data.cover = data.thumb = coverName + + jimp + .read(cover.data) + .then(img => { + img + .cover(coverWidth, coverHeight) + .quality(coverQuality) + .write(`./static/uploads/images/blog/${coverName}`) + .resize(thumbWidth, jimp.AUTO) + .cover(thumbWidth, thumbHeight) + .write(`./static/uploads/images/blog/thumb/${coverName}`) + }) + .catch(err => { + console.log(err) + }) + } + + if (req.files && req.files.video) { + const video = req.files.video + + // validate video format + const supportedFormats = ['mp4', 'avi', 'wmv'] + if (!supportedFormats.includes(video.mimetype.split('/')[1])) { + return res.status(422).json({ validation: { video: { msg: _faSr.format.video } } }) + } + + const videoName = 'blog_' + Date.now() + '.' + video.mimetype.split('/')[1] + data.video = videoName + video.mv(`./static/uploads/videos/${videoName}`, err => { + if (err) console.log(err) + }) + } + + Learning.findByIdAndUpdate(req.params.id, data, (err, oldData) => { + if (err) return res404(res, err) + if (req.files && req.files.cover) { + fs.unlink(`./static/${oldData.cover}`, err => { + if (err) console.log(err) + }) + fs.unlink(`./static/${oldData.thumb}`, err => { + if (err) console.log(err) + }) + } + if (req.files && req.files.video && oldData.video) + fs.unlink(`./static/${oldData.video}`, err => { + if (err) console.log(err) + }) + Learning.findById(oldData._id, (err, newData) => { + if (err) return res404(res, err) + return res.json(newData) + }) + }) + } +] + +module.exports.delete = [ + (req, res) => { + Learning.findByIdAndDelete(req.params.id, (err, post) => { + if (err) return res.status(404).json({ message: err }) + fs.unlink(`./static/${post.cover}`, err => { + if (err) console.log(err) + }) + fs.unlink(`./static/${post.thumb}`, err => { + if (err) console.log(err) + }) + if (post.video) + fs.unlink(`./static/${post.video}`, err => { + if (err) console.log(err) + }) + return res.json({ message: _faSr.response.success_remove }) + }) + } +] diff --git a/server/controllers/lotteryController.js b/server/controllers/lotteryController.js new file mode 100644 index 0000000..b29d1ed --- /dev/null +++ b/server/controllers/lotteryController.js @@ -0,0 +1,373 @@ +const fs = require('fs') +const jimp = require('jimp') +const { body, validationResult } = require('express-validator') +const moment = require('moment-jalaali') +const Lottery = require('../models/Lottery') +const { serialChecker } = require('../plugins/asanServiceSerialChecker') +const { _sr } = require('../plugins/serverResponses') +const { + res404, + res406, + res500, + checkValidations, + removeWhiteSpaces, + checkMobileNumber, + normalizeMobileNumber +} = require('../plugins/controllersHelperFunctions') +const { SMS } = require('../plugins/SMS_Module') +const { phrases } = require('../plugins/SMS_Phrases') + +/// +const _faSr = _sr.fa + +// date formaters +function SmsDateFormat(date) { + return moment(date).format('jYYYY/jMM/jDD') +} + +module.exports.addLottery = [ + [ + body('title').notEmpty().withMessage(_faSr.required.title), + + body('winnersCount') + .notEmpty() + .withMessage('تعداد برندگان قرعه کشی را مشخص کنید') + .bail() + .isNumeric() + .withMessage(_faSr.format.number) + .bail() + .custom((value, { req }) => { + if (Number(value) < 1) return Promise.reject(new Error('تعداد برندگان نمیتواند کمتر از 1 باشد')) + else return Promise.resolve() + }), + + body('expireDate') + .notEmpty() + .withMessage('تاریخ پایان قرعه کشی را مشخص کنید') + .bail() + .isNumeric() + .withMessage('فرمت صحیح نیست') + .bail() + .custom((value, { req }) => { + if (Number(value) < Date.now()) return Promise.reject(new Error('نمیتوان تاریخ روز جاری یا قبل تر انتخاب کرد.')) + else return Promise.resolve() + }) + ], + checkValidations(validationResult), + async (req, res) => { + const { title, winnersCount, expireDate } = req.body + const supportedImageFormats = ['png', 'jpg', 'jpeg', 'webp'] + let entryBgImgName, resultBgImgName, entryWidth, entryHeight, resultWidth, resultHeight + + try { + // check for other open lotteries + const openLotteries = await Lottery.find({ expired: false }) + if (openLotteries.length) return res406(res, 'تا بسته شدن قرعه کشی قبلی نمیتوان قرعه کشی جدید ثبت کرد') + + // required image validations + if (!req.files || !req.files.entryBgImg) + return res.status(422).json({ validation: { entryBgImg: { msg: 'عکس صفحه شرکت در قرعه کشی اجباری است' } } }) + + if (!req.files || !req.files.resultBgImg) + return res.status(422).json({ + validation: { + resultBgImg: { + msg: 'عکس صفحه نتایج قرعه کشی اجباری است' + } + } + }) + + // save images + if (req.files) { + // save entry bg image + if (req.files.entryBgImg) { + const image = req.files.entryBgImg + + // validate image format + if (!supportedImageFormats.includes(image.mimetype.split('/')[1])) { + return res.status(422).json({ validation: { entryBgImg: { msg: _faSr.format.image } } }) + } + + entryBgImgName = 'lotteryEntryBg_' + Date.now() + '.' + image.mimetype.split('/')[1] + const jimpImg = await jimp.read(image.data) + jimpImg.quality(100).write(`./static/uploads/images/lottery/${entryBgImgName}`) + entryWidth = jimpImg.bitmap.width + entryHeight = jimpImg.bitmap.height + } + + // save result bg image + if (req.files.resultBgImg) { + const image = req.files.resultBgImg + + // validate image format + if (!supportedImageFormats.includes(image.mimetype.split('/')[1])) { + return res.status(422).json({ validation: { resultBgImg: { msg: _faSr.format.image } } }) + } + + resultBgImgName = 'lotteryResultBg_' + Date.now() + '.' + image.mimetype.split('/')[1] + const jimpImg = await jimp.read(image.data) + jimpImg.quality(100).write(`./static/uploads/images/lottery/${resultBgImgName}`) + resultWidth = jimpImg.bitmap.width + resultHeight = jimpImg.bitmap.height + } + } + + const data = { + title, + winnersCount, + expireDate + } + if (entryBgImgName) { + data.entryWidth = entryWidth + data.entryHeight = entryHeight + data.entryBgImg = entryBgImgName + } + if (resultBgImgName) { + data.resultWidth = resultWidth + data.resultHeight = resultHeight + data.resultBgImg = resultBgImgName + } + data.lotteryCode = 'L'.concat(moment(Date.now()).format('jMMMjDDjYYYY').toUpperCase()) + + const lottery = new Lottery(data) + await lottery.save() + return res.json({ message: _faSr.response.success_save }) + } catch (e) { + return res500(res, `there is an error here --- ${e}`) + } + } +] + +module.exports.updateLottery = [ + [ + body('title').notEmpty().withMessage(_faSr.required.title), + + body('winnersCount') + .notEmpty() + .withMessage('تعداد برندگان قرعه کشی را مشخص کنید') + .bail() + .isNumeric() + .withMessage(_faSr.format.number) + .bail() + .custom((value, { req }) => { + if (Number(value) < 1) return Promise.reject(new Error('تعداد برندگان نمیتواند کمتر از 1 باشد')) + else return Promise.resolve() + }), + + body('expireDate') + .notEmpty() + .withMessage('تاریخ پایان قرعه کشی را مشخص کنید') + .bail() + .isNumeric() + .withMessage('فرمت صحیح نیست') + .bail() + .custom((value, { req }) => { + if (Number(value) < Date.now()) return Promise.reject(new Error('نمیتوان تاریخ روز جاری یا قبل تر انتخاب کرد.')) + else return Promise.resolve() + }) + ], + checkValidations(validationResult), + async (req, res) => { + const { title, winnersCount, expireDate } = req.body + const supportedImageFormats = ['png', 'jpg', 'jpeg', 'webp'] + let entryBgImgName, resultBgImgName, entryWidth, entryHeight, resultWidth, resultHeight + + try { + // check lottery expiration + const lottery = await Lottery.findById(req.params?.lotteryId) + if (lottery.expired) return res406(res, 'نمیتوان قرعه کشی بسته شده را ویرایش کرد') + + // save images + if (req.files) { + // save entry bg image + if (req.files.entryBgImg) { + const image = req.files.entryBgImg + + // validate image format + if (!supportedImageFormats.includes(image.mimetype.split('/')[1])) { + return res.status(422).json({ validation: { entryBgImg: { msg: _faSr.format.image } } }) + } + + entryBgImgName = 'lotteryEntryBg_' + Date.now() + '.' + image.mimetype.split('/')[1] + const jimpImg = await jimp.read(image.data) + jimpImg.quality(100).write(`./static/uploads/images/lottery/${entryBgImgName}`) + entryWidth = jimpImg.bitmap.width + entryHeight = jimpImg.bitmap.height + lottery.entryBgImg && + fs.unlink(`./static/${lottery.entryBgImg}`, err => { + if (err) console.log(err) + }) + } + + // save result bg image + if (req.files.resultBgImg) { + const image = req.files.resultBgImg + + // validate image format + if (!supportedImageFormats.includes(image.mimetype.split('/')[1])) { + return res.status(422).json({ validation: { resultBgImg: { msg: _faSr.format.image } } }) + } + + resultBgImgName = 'lotteryResultBg_' + Date.now() + '.' + image.mimetype.split('/')[1] + const jimpImg = await jimp.read(image.data) + jimpImg.quality(100).write(`./static/uploads/images/lottery/${resultBgImgName}`) + resultWidth = jimpImg.bitmap.width + resultHeight = jimpImg.bitmap.height + lottery.resultBgImg && + fs.unlink(`./static/${lottery.resultBgImg}`, err => { + if (err) console.log(err) + }) + } + } + + lottery.title = title + lottery.winnersCount = winnersCount + lottery.expireDate = expireDate + + if (entryBgImgName) { + lottery.entryWidth = entryWidth + lottery.entryHeight = entryHeight + lottery.entryBgImg = entryBgImgName + } + if (resultBgImgName) { + lottery.resultWidth = resultWidth + lottery.resultHeight = resultHeight + lottery.resultBgImg = resultBgImgName + } + await lottery.save() + return res.json({ message: _faSr.response.success_save }) + } catch (e) { + return res500(res, `there is an error here --- ${e}`) + } + } +] + +module.exports.getAllLotteries = [ + (req, res) => { + Lottery.find({}) + .sort({ _id: -1 }) + .exec((err, data) => { + if (err || !data) return res500(res, err) + else return res.json(data) + }) + } +] + +module.exports.getOneLottery = [ + (req, res) => { + Lottery.findById(req.params?.lotteryId, (err, data) => { + if (err || !data) return res404(err) + else return res.json(data) + }) + } +] + +module.exports.getLastLottery = [ + (req, res) => { + Lottery.find({}) + .sort({ _id: -1 }) + .select('-participants -winnersCount') + .exec((err, data) => { + if (err || !data?.length) return res404(res, 'هیچ قرعه کشی ای در دسترس نیست') + else return res.json(data[0]) + }) + } +] + +module.exports.enrollParticipant = [ + [ + body('fullName') + .notEmpty() + .withMessage(_faSr.required.name) + .bail() + .isLength({ min: 4 }) + .withMessage(_faSr.min_char.min4) + .bail() + .custom((value, { req }) => { + if (removeWhiteSpaces(value).length < 4) return Promise.reject(_faSr.min_char.min4) + if (removeWhiteSpaces(value).match(/^[A-Za-z]+$/g)) + return Promise.reject(new Error('لطفا با حروف فارسی تایپ کنید.')) + else return true + }), + + body('mobile') + .notEmpty() + .withMessage(_faSr.required.phone_number) + .bail() + .custom((value, { req }) => { + const mobileNStatus = checkMobileNumber(value) + if (!mobileNStatus) return Promise.reject(_faSr.format.phone_number) + else return Promise.resolve() + }), + + body('serial') + .notEmpty() + .withMessage('شماره سریال گارانتی را وارد کنید') + .bail() + .custom(async (value, { req }) => { + try { + const serialStatus = await serialChecker(value) + if (!serialStatus) return Promise.reject(new Error('شماره سریال معتبر نمیباشد')) + else return Promise.resolve() + } catch (e) { + console.log('error in check serials for enrollLotteryController ---- error message: ', e) + return Promise.reject(new Error('مشکلی در بررسی شماره سریال پیش آمده')) + } + }) + ], + checkValidations(validationResult), + async (req, res) => { + const { fullName, mobile, serial, lotteryId } = req.body + try { + const lottery = await Lottery.findById(lotteryId) + if (!lottery) throw new Error('incorrect lottery id') + if (lottery.expired) return res404(res, 'مهلت شرکت در قرعه کشی به پایان رسیده') + + for await (const item of lottery.participants) { + if (item.serial === serial) return res404(res, 'این شماره سریال از قبل توسط شخص دیگری ثبت شده است') + } + + const enrollCode = lottery.lotteryCode + .concat(lottery.participants.length) + .concat((Math.random() * 100).toFixed(0)) + + const normalizedMN = normalizeMobileNumber(mobile) + + const data = { fullName, mobile: normalizedMN, serial, enrollCode } + lottery.participants.push(data) + lottery.markModified('participants') + await lottery.save() + + const msg = [ + fullName, + ' عزیز، اطلاعات شما در تاریخ ', + SmsDateFormat(Date.now()), + ' برای شرکت در قرعه کشی آسان سرویس ثبت گردید. ', + '\n', + 'کد پیگیری: ', + enrollCode, + '\n', + phrases.signature + ] + SMS([normalizedMN], msg.join('')) + return res.json({ message: 'اطلاعات شما با موفیقت در سیستم ثبت شد. کد پیگیری به تلفن همراه شما ارسال گردید' }) + } catch (e) { + return res500(res, `there is an error here --- ${e}`) + } + } +] + +module.exports.deleteLottery = [ + (req, res) => { + Lottery.findByIdAndDelete(req.params?.lotteryId, (err, oldData) => { + if (err || !oldData) return res404(res, err) + fs.unlink(`./static/${oldData.entryBgImg}`, err => { + if (err) console.log(err) + }) + fs.unlink(`./static/${oldData.resultBgImg}`, err => { + if (err) console.log(err) + }) + return res.json({ message: _faSr.response.success_remove }) + }) + } +] diff --git a/server/controllers/lotteryPopUpController.js b/server/controllers/lotteryPopUpController.js new file mode 100644 index 0000000..eef8643 --- /dev/null +++ b/server/controllers/lotteryPopUpController.js @@ -0,0 +1,108 @@ +const fs = require('fs') +const jimp = require('jimp') +const { body, validationResult } = require('express-validator') +const LotteryPopUp = require('../models/LotteryPopUp') +const { _sr } = require('../plugins/serverResponses') +const { res500, checkValidations } = require('../plugins/controllersHelperFunctions') + +/// +const _faSr = _sr.fa + +module.exports.modify = [ + [ + body('visible').exists().withMessage(_faSr.required.field).bail().isBoolean().withMessage(_faSr.format.boolean), + + body('x').exists().withMessage(_faSr.required.field).bail().isNumeric().withMessage(_faSr.format.number), + + body('y').exists().withMessage(_faSr.required.field).bail().isNumeric().withMessage(_faSr.format.number) + ], + checkValidations(validationResult), + async (req, res) => { + const { visible, x, y } = req.body + let imageName = null + + // check for background image + if (req.files?.bgImg) { + const image = req.files.bgImg + + // validate image format + if (image.mimetype.split('/')[1] !== 'png') { + return res.status(422).json({ validation: { bgImg: { msg: 'فقط فرمت png قابل قبول است' } } }) + } + + imageName = 'popupBtn_' + Date.now() + '.png' + + jimp + .read(image.data) + .then(img => { + img.quality(100).write(`./static/uploads/images/lottery/${imageName}`) + }) + .catch(err => { + console.log(err) + }) + } + + try { + const lotteryPopUp = await LotteryPopUp.findOne() + + if (!lotteryPopUp) { + const data = { + visible, + x, + y + } + if (imageName) { + data.bgImg = imageName + // get width & height from image + const imageDimensions = await jimp.read(`./static/uploads/images/lottery/${imageName}`) + data.w = imageDimensions.bitmap.width + data.h = imageDimensions.bitmap.height + } + + await LotteryPopUp.create(data) + return res.json({ message: _faSr.response.success_save }) + } else { + if (imageName) { + lotteryPopUp.bgImg && + fs.unlink(`./static/${lotteryPopUp.bgImg}`, err => { + if (err) console.log(err) + }) + + lotteryPopUp.bgImg = imageName + } + lotteryPopUp.visible = visible + lotteryPopUp.x = x + lotteryPopUp.y = y + + // get width & height from image + const imageDimensions = await jimp.read(`./static/${lotteryPopUp.bgImg}`) + lotteryPopUp.w = imageDimensions.bitmap.width + lotteryPopUp.h = imageDimensions.bitmap.height + + await lotteryPopUp.save() + return res.json({ message: _faSr.response.success_save }) + } + } catch (e) { + return res500(res, `there is an error here --- ${e}`) + } + } +] + +module.exports.getPopUpInfo = [ + async (req, res) => { + try { + const lotterPopUp = await LotteryPopUp.findOne() + return res.json( + lotterPopUp || { + visible: false, + x: 15, + y: 15, + w: 40, + h: 40 + } + ) + } catch (e) { + return res500(res, `there is an error here --- ${e}`) + } + } +] diff --git a/server/controllers/oldPieceRequestController.js b/server/controllers/oldPieceRequestController.js new file mode 100644 index 0000000..36bcbe0 --- /dev/null +++ b/server/controllers/oldPieceRequestController.js @@ -0,0 +1,338 @@ +const moment = require('moment-jalaali') +const { body, validationResult } = require('express-validator') +const OldPieceRequest = require('../models/OldPieceRequest') +const { _sr } = require('../plugins/serverResponses') +const { + res404, + res406, + res500, + checkValidations, + generateRandomDigits +} = require('../plugins/controllersHelperFunctions') +const { SMS } = require('../plugins/SMS_Module') +const { notifyAdmin } = require('../WebSocket/controllers/admin_EventsController') +const _faSr = _sr.fa + +// date formaters +function ArpaDateFormat(date) { + return moment(date).format('YYYY-MM-DD HH:mm:ss') +} + +function SmsDateFormat(date) { + return moment(date).format('jYYYY/jMM/jDD') +} + +/// ///////////////// agent +module.exports.add_oldPiece_request = [ + async (req, res) => { + try { + const { user_id, agent_id } = req + const thisTime = Date.now() + + const data = { + user_id, + agent_id, + createDate: ArpaDateFormat(thisTime), + statusHistory: [{ status: 'temp', date: thisTime }] + } + + const opr = OldPieceRequest(data) + await opr.save() + return res.json({ message: _faSr.response.success_save }) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.add_oldPieces_to_opr = [ + [ + body('ItemReceptionTransDate').notEmpty().withMessage('تاریخ پذیرش را مشخص کنید'), + + body('ItemName').notEmpty().withMessage('نام کالا را مشخص کنید'), + + body('ItemID').notEmpty().withMessage('Include ItemID'), + + body('ItemCode').notEmpty().withMessage('Include ItemCode'), + + body('pieceName').notEmpty().withMessage('نام قطعه را مشخص کنید'), + + body('pieceCode').notEmpty().withMessage('Include pieceCode'), + + body('pieceId').notEmpty().withMessage('Include pieceId') + ], + checkValidations(validationResult), + async (req, res) => { + try { + const oprId = req.params?.oprId + const { ItemReceptionTransDate, ItemName, SerialNo1, ItemID, ItemCode, pieceName, pieceCode, pieceId } = req.body + + const data = { + ItemReceptionTransDate, + ItemName, + SerialNo1, + ItemID, + ItemCode, + pieceName, + pieceCode, + pieceId + } + + const opr = await OldPieceRequest.findById(oprId) + opr.items.push(data) + await opr.save() + return res.json({ message: _faSr.response.success_save }) + } catch (e) { + return res404(res, e) + } + } +] + +module.exports.remove_oldPiece_from_opr = [ + async (req, res) => { + try { + const oldPieceItemId = req.params?.oldPieceItemId + if (!oldPieceItemId) throw new Error('invalid id') + const opr = await OldPieceRequest.findOne({ 'items._id': oldPieceItemId }) + opr.items.id(oldPieceItemId).remove() + await opr.save() + return res.json({ message: _faSr.response.success_remove }) + } catch (e) { + console.log(e) + + return res500(res, e) + } + } +] + +module.exports.update_opr_description = [ + (req, res) => { + const { description } = req.body + const data = { + description + } + OldPieceRequest.findByIdAndUpdate(req.params?.id, data, (err, oldData) => { + if (err) return res404(res, 'invalid id') + return res.json({ message: _faSr.response.success_save }) + }) + } +] + +module.exports.get_all_opr_for_agent = [ + (req, res) => { + const agent_id = req.agent_id + OldPieceRequest.find({ agent_id }, (err, data) => { + if (err) return res500(res, err) + else return res.json(data) + }) + } +] + +module.exports.get_one_opr_for_agent = [ + (req, res) => { + OldPieceRequest.findById(req.params.id) + .populate( + 'agent_id', + 'full_name province_name city_name address agent_code postal_code tel_number fax_number mobile_number' + ) + .exec((err, data) => { + if (err || !data) return res404(res, err) + else return res.json(data) + }) + } +] + +module.exports.delete_opr = [ + async (req, res) => { + try { + const opr = await OldPieceRequest.findById(req.params?.id) + if (opr.status !== 'temp') return res406(res, 'نمیتوانید درخواست ارسال شده را حذف کنید') + await opr.remove() + return res.json({ message: _faSr.response.success_remove }) + } catch (e) { + return res404(res, 'invalid id') + } + } +] + +module.exports.change_opr_status_to_sent_by_agent = [ + async (req, res) => { + try { + const thisTime = Date.now() + + const opr = await OldPieceRequest.findById(req.params?.id).populate('agent_id') + if (!opr) throw new Error('invalid opr id') + const totalOpr = await OldPieceRequest.find({ status: { $ne: 'temp' } }) + + if (opr.status !== 'temp') return res406(res, 'این فرم قبلا برای آسان سرویس ارسال شده') + if (!opr.items.length) return res406(res, 'هیچ قطعه ای به فرم اضافه نکرده اید') + + // generate tracking code + const trackingCode = 'OR' + totalOpr.length.toString().padStart(4, '0') + generateRandomDigits(2) + + // modify opr + opr.status = 'sent' + opr.statusHistory.push({ status: 'sent', date: thisTime }) + opr.trackingCode = trackingCode + opr.sendDate = ArpaDateFormat(thisTime) + + // send sms for agent + const smsMsg = [ + ' نماینده گرامی درخواست قطعه داغی شما در تاریخ ', + SmsDateFormat(thisTime), + ' با کد پیگیری ', + trackingCode, + ' برای شرکت ارسال شد. ' + ] + + SMS([opr.agent_id.mobile_number], smsMsg.join('')) + + await opr.save() + notifyAdmin('updateNewOldPieceRequests') + return res.json({ message: 'درخواست قطعه داغی ارسال شد' }) + } catch (e) { + console.log(e) + + return res404(res, e) + } + } +] + +/// ///////////////// admin +module.exports.get_all_opr_for_admin = [ + async (req, res) => { + try { + const oprList = await OldPieceRequest.find({ status: { $ne: 'temp' } }).populate( + 'agent_id', + 'full_name agent_code mobile_number national_code province_name city_name province_id city_id' + ) + return res.json(oprList) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.get_oneAgent_opr_for_admin = [ + async (req, res) => { + const agent_id = req.params?.agent_id + try { + const oprList = await OldPieceRequest.find({ status: { $ne: 'temp' }, agent_id }).populate( + 'agent_id', + 'full_name agent_code mobile_number national_code province_name city_name' + ) + return res.json(oprList) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.get_one_opr_for_admin = [ + async (req, res) => { + try { + const { user_id } = req + const thisTime = Date.now() + const opr = await OldPieceRequest.findById(req.params?.id) + .populate( + 'agent_id', + 'agent_code full_name mobile_number fax_number tel_number province_name city_name national_code address postal_code store_name' + ) + .populate('_openedBy', 'username first_name last_name') + .populate('_updatedBy', 'username first_name last_name') + if (!opr.seen) { + opr.seen = true + opr._openedBy = user_id + opr.status = 'ongoing' + opr.statusHistory.push({ status: 'ongoing', date: thisTime }) + await opr.save() + + const smsMsg = [ + ' نماینده گرامی درخواست قطعه داغی شما با کد پیگیری ', + opr.trackingCode, + ' در تاریخ ', + SmsDateFormat(thisTime), + ' در دست اقدام قرار گرفت. ' + ] + + SMS([opr.agent_id.mobile_number], smsMsg.join('')) + notifyAdmin('updateNewOldPieceRequests') + } + return res.json(opr) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.change_opr_status_by_admin = [ + [ + body('status') + .notEmpty() + .withMessage('status is required') + .bail() + .custom((value, { req }) => { + const acceptablvalues = ['waiting', 'delivered'] + if (!acceptablvalues.includes(value)) return Promise.reject(new Error('invalid status')) + else return true + }) + ], + checkValidations(validationResult), + async (req, res) => { + const { user_id } = req + const { status, deliveryCode } = req.body + const thisTime = Date.now() + + try { + const opr = await OldPieceRequest.findById(req.params?.id).populate('agent_id') + if (!opr) throw new Error('invalid opr id') + + // check statuses + const statusErrMsg = 'invalid status for this time' + if (opr.status === 'delivered') return res406(res, statusErrMsg) + if (opr.status === 'waiting' && status === 'waiting') return res406(res, statusErrMsg) + + // save status + opr._updatedBy = user_id + opr.status = status + opr.statusHistory.push({ status, date: thisTime }) + + let smsMessage + // differenet status methods + if (status === 'waiting') { + smsMessage = [ + ' نماینده گرامی درخواست قطعه داغی شما با کد پیگیری ', + opr.trackingCode, + ' در تاریخ ', + SmsDateFormat(thisTime), + ' در انتظار قطعه میباشد. ' + ] + } + + if (status === 'delivered') { + if (deliveryCode) opr.deliveryCode = deliveryCode + + function deliveryCodePhrase() { + if (deliveryCode.length) return `کد پیگیری مرسوله: ${deliveryCode}` + '\n' + else return '' + } + + smsMessage = [ + ' نماینده گرامی درخواست قطعه داغی شما با کد پیگیری ', + opr.trackingCode, + ' در تاریخ ', + SmsDateFormat(thisTime), + ' تحویل شد. ', + '\n', + deliveryCodePhrase() + ] + } + + await SMS([opr.agent_id.mobile_number], smsMessage.join('')) + await opr.save() + return res.json({ message: _faSr.response.success_save }) + } catch (e) { + return res500(res, e) + } + } +] diff --git a/server/controllers/pieceController.js b/server/controllers/pieceController.js new file mode 100644 index 0000000..e8fd29a --- /dev/null +++ b/server/controllers/pieceController.js @@ -0,0 +1,63 @@ +const { body, validationResult } = require('express-validator') +const Piece = require('../models/Piece') +const { res404, res500, checkValidations } = require('../plugins/controllersHelperFunctions') +const { _sr } = require('../plugins/serverResponses') +const _faSr = _sr.fa + +module.exports.add_piece = [ + [body('name').notEmpty().withMessage(_faSr.required.title)], + checkValidations(validationResult), + (req, res) => { + const { name, code } = req.body + + const data = { name, code } + + const piece = new Piece(data) + piece.save(err => { + if (err) console.log(err) + return res.json({ message: _faSr.response.success_save }) + }) + } +] + +module.exports.update_piece = [ + [body('name').notEmpty().withMessage(_faSr.required.title)], + checkValidations(validationResult), + (req, res) => { + const { name, code } = req.body + + const data = { name, code } + + Piece.findByIdAndUpdate(req.params?.id, data, (err, oldData) => { + if (err) return res404(res, 'invalid id') + return res.json({ message: _faSr.response.success_save }) + }) + } +] + +module.exports.get_one_pieces = [ + (req, res) => { + Piece.findById(req.params?.id, (err, data) => { + if (err) return res404(res, 'invalid id') + return res.json(data) + }) + } +] + +module.exports.get_all_pieces = [ + (req, res) => { + Piece.find({}, (err, data) => { + if (err) return res500(res, err) + return res.json(data) + }) + } +] + +module.exports.remove_piece = [ + (req, res) => { + Piece.findByIdAndRemove(req.params?.id, (err, data) => { + if (err) return res404(res, 'invalid id') + return res.json({ message: _faSr.response.success_remove }) + }) + } +] diff --git a/server/controllers/pieceRequestController.js b/server/controllers/pieceRequestController.js new file mode 100644 index 0000000..9892923 --- /dev/null +++ b/server/controllers/pieceRequestController.js @@ -0,0 +1,359 @@ +const moment = require('moment-jalaali') +const { body, validationResult } = require('express-validator') +const PieceRequest = require('../models/PieceRequest') +const { _sr } = require('../plugins/serverResponses') +const { + res404, + res406, + res500, + checkValidations, + generateRandomDigits +} = require('../plugins/controllersHelperFunctions') +const { SMS } = require('../plugins/SMS_Module') +const { notifyAdmin } = require('../WebSocket/controllers/admin_EventsController') +const _faSr = _sr.fa + +// date formaters +function ArpaDateFormat(date) { + return moment(date).format('YYYY-MM-DD HH:mm:ss') +} + +function SmsDateFormat(date) { + return moment(date).format('jYYYY/jMM/jDD') +} + +/// ///////////////// agent +module.exports.add_piece_request = [ + async (req, res) => { + try { + const { user_id, agent_id } = req + const thisTime = Date.now() + + const data = { + user_id, + agent_id, + createDate: ArpaDateFormat(thisTime), + statusHistory: [{ status: 'temp', date: thisTime }] + } + + const pr = PieceRequest(data) + await pr.save() + return res.json({ message: _faSr.response.success_save }) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.add_pieces_to_pr = [ + [ + body('ItemReceptionTransDate').notEmpty().withMessage('تاریخ پذیرش را مشخص کنید'), + + body('ItemName').notEmpty().withMessage('نام کالا را مشخص کنید'), + + body('ItemID').notEmpty().withMessage('Include ItemID'), + + body('ItemCode').notEmpty().withMessage('Include ItemCode'), + + body('gStatus').notEmpty().withMessage('وضعیت گارانتی را مشخص کنید'), + + body('pieceName').notEmpty().withMessage('نام قطعه را مشخص کنید'), + + body('pieceQuantity') + .notEmpty() + .withMessage('تعداد قطعه را مشخص کنید') + .isNumeric() + .withMessage(_faSr.format.number), + + body('pieceCode').notEmpty().withMessage('Include pieceCode'), + + body('pieceId').notEmpty().withMessage('Include pieceId') + ], + checkValidations(validationResult), + async (req, res) => { + try { + const prId = req.params?.prId + const { + ItemReceptionTransDate, + ItemName, + SerialNo1, + ItemID, + ItemCode, + gStatus, + pieceName, + pieceCode, + pieceQuantity, + pieceId + } = req.body + + const data = { + ItemReceptionTransDate, + ItemName, + SerialNo1, + ItemID, + ItemCode, + gStatus, + pieceName, + pieceCode, + pieceQuantity, + pieceId + } + + const pr = await PieceRequest.findById(prId) + pr.items.push(data) + await pr.save() + return res.json({ message: _faSr.response.success_save }) + } catch (e) { + return res404(res, e) + } + } +] + +module.exports.remove_piece_from_pr = [ + async (req, res) => { + try { + const pieceItemId = req.params?.pieceItemId + if (!pieceItemId) throw new Error('invalid id') + const pr = await PieceRequest.findOne({ 'items._id': pieceItemId }) + pr.items.id(pieceItemId).remove() + await pr.save() + return res.json({ message: _faSr.response.success_remove }) + } catch (e) { + console.log(e) + + return res500(res, e) + } + } +] + +module.exports.update_pr_description = [ + (req, res) => { + const { description } = req.body + const data = { + description + } + PieceRequest.findByIdAndUpdate(req.params?.id, data, (err, oldData) => { + if (err) return res404(res, 'invalid id') + return res.json({ message: _faSr.response.success_save }) + }) + } +] + +module.exports.get_all_pr_for_agent = [ + (req, res) => { + const agent_id = req.agent_id + PieceRequest.find({ agent_id }, (err, data) => { + if (err) return res500(res, err) + else return res.json(data) + }) + } +] + +module.exports.get_one_pr_for_agent = [ + (req, res) => { + PieceRequest.findById(req.params.id) + .populate( + 'agent_id', + 'full_name province_name city_name address agent_code postal_code tel_number fax_number mobile_number' + ) + .exec((err, data) => { + if (err || !data) return res404(res, err) + else return res.json(data) + }) + } +] + +module.exports.delete_pr = [ + async (req, res) => { + try { + const pr = await PieceRequest.findById(req.params?.id) + if (pr.status !== 'temp') return res406(res, 'نمیتوانید درخواست ارسال شده را حذف کنید') + await pr.remove() + return res.json({ message: _faSr.response.success_remove }) + } catch (e) { + return res404(res, 'invalid id') + } + } +] + +module.exports.change_pr_status_to_sent_by_agent = [ + async (req, res) => { + try { + const thisTime = Date.now() + + const pr = await PieceRequest.findById(req.params?.id).populate('agent_id') + if (!pr) throw new Error('invalid pr id') + const totalPr = await PieceRequest.find({ status: { $ne: 'temp' } }) + + if (pr.status !== 'temp') return res406(res, 'این فرم قبلا برای آسان سرویس ارسال شده') + if (!pr.items.length) return res406(res, 'هیچ قطعه ای به فرم اضافه نکرده اید') + + // generate tracking code + const trackingCode = 'PR' + totalPr.length.toString().padStart(4, '0') + generateRandomDigits(2) + + // modify pr + pr.status = 'sent' + pr.statusHistory.push({ status: 'sent', date: thisTime }) + pr.trackingCode = trackingCode + pr.sendDate = ArpaDateFormat(thisTime) + + // send sms for agent + const smsMsg = [ + ' نماینده گرامی درخواست قطعه شما در تاریخ ', + SmsDateFormat(thisTime), + ' با کد پیگیری ', + trackingCode, + ' برای شرکت ارسال شد. ' + ] + + SMS([pr.agent_id.mobile_number], smsMsg.join('')) + + await pr.save() + notifyAdmin('updateNewPieceRequests') + return res.json({ message: 'درخواست قطعه ارسال شد' }) + } catch (e) { + console.log(e) + + return res404(res, e) + } + } +] + +/// ///////////////// admin +module.exports.get_all_pr_for_admin = [ + async (req, res) => { + try { + const prList = await PieceRequest.find({ status: { $ne: 'temp' } }).populate( + 'agent_id', + 'full_name agent_code mobile_number national_code province_name city_name province_id city_id' + ) + return res.json(prList) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.get_oneAgent_pr_for_admin = [ + async (req, res) => { + const agent_id = req.params?.agent_id + try { + const prList = await PieceRequest.find({ status: { $ne: 'temp' }, agent_id }).populate( + 'agent_id', + 'full_name agent_code mobile_number national_code province_name city_name' + ) + return res.json(prList) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.get_one_pr_for_admin = [ + async (req, res) => { + try { + const { user_id } = req + const thisTime = Date.now() + const pr = await PieceRequest.findById(req.params?.id) + .populate( + 'agent_id', + 'agent_code full_name mobile_number fax_number tel_number province_name city_name national_code address postal_code store_name' + ) + .populate('_openedBy', 'username first_name last_name') + .populate('_updatedBy', 'username first_name last_name') + if (!pr.seen) { + pr.seen = true + pr._openedBy = user_id + pr.status = 'ongoing' + pr.statusHistory.push({ status: 'ongoing', date: thisTime }) + await pr.save() + + const smsMsg = [ + ' نماینده گرامی درخواست قطعه شما با کد پیگیری ', + pr.trackingCode, + ' در تاریخ ', + SmsDateFormat(thisTime), + ' در دست اقدام قرار گرفت. ' + ] + + SMS([pr.agent_id.mobile_number], smsMsg.join('')) + notifyAdmin('updateNewPieceRequests') + } + return res.json(pr) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.change_pr_status_by_admin = [ + [ + body('status') + .notEmpty() + .withMessage('status is required') + .bail() + .custom((value, { req }) => { + const acceptablvalues = ['waiting', 'delivered'] + if (!acceptablvalues.includes(value)) return Promise.reject(new Error('invalid status')) + else return true + }) + ], + checkValidations(validationResult), + async (req, res) => { + const { user_id } = req + const { status, deliveryCode } = req.body + const thisTime = Date.now() + + try { + const pr = await PieceRequest.findById(req.params?.id).populate('agent_id') + if (!pr) throw new Error('invalid pr id') + + // check statuses + const statusErrMsg = 'invalid status for this time' + if (pr.status === 'delivered') return res406(res, statusErrMsg) + if (pr.status === 'waiting' && status === 'waiting') return res406(res, statusErrMsg) + + // save status + pr._updatedBy = user_id + pr.status = status + pr.statusHistory.push({ status, date: thisTime }) + + let smsMessage + // differenet status methods + if (status === 'waiting') { + smsMessage = [ + ' نماینده گرامی درخواست قطعه شما با کد پیگیری ', + pr.trackingCode, + ' در تاریخ ', + SmsDateFormat(thisTime), + ' در انتظار قطعه میباشد. ' + ] + } + + if (status === 'delivered') { + if (deliveryCode) pr.deliveryCode = deliveryCode + + function deliveryCodePhrase() { + if (deliveryCode.length) return `کد پیگیری مرسوله: ${deliveryCode}` + '\n' + else return '' + } + + smsMessage = [ + ' نماینده گرامی درخواست قطعه شما با کد پیگیری ', + pr.trackingCode, + ' در تاریخ ', + SmsDateFormat(thisTime), + ' تحویل شد. ', + '\n', + deliveryCodePhrase() + ] + } + + await SMS([pr.agent_id.mobile_number], smsMessage.join('')) + await pr.save() + return res.json({ message: _faSr.response.success_save }) + } catch (e) { + return res500(res, e) + } + } +] diff --git a/server/controllers/representationController.js b/server/controllers/representationController.js new file mode 100644 index 0000000..2e95948 --- /dev/null +++ b/server/controllers/representationController.js @@ -0,0 +1,1232 @@ +const fs = require('fs') +const { body, validationResult } = require('express-validator') +const moment = require('moment-jalaali') +const Mongoose = require('mongoose') +const Representation = require('../models/Representation') +const User = require('../models/User') +const { SMS } = require('../plugins/SMS_Module') +const { phrases } = require('../plugins/SMS_Phrases') +const { _sr } = require('../plugins/serverResponses') +const { notifyAdmin } = require('../WebSocket/controllers/admin_EventsController') +const { + res404, + res406, + res500, + checkValidations, + checkMobileNumber, + checkNationalCode, + isPersian, + isPersianWithDigits +} = require('../plugins/controllersHelperFunctions') + +const _faSr = _sr.fa + +// date formatters +// function ArpaDateFormat(date) { +// return moment(date).format('YYYY-MM-DD HH:mm:ss') +// } + +function SmsDateFormat(date) { + return moment(date).format('jYYYY/jMM/jDD') +} + +module.exports.add_representation = [ + [ + body('representation_type') + .notEmpty() + .withMessage('نوع نمایندگی را مشخص کنید') + .bail() + .custom((value, { req }) => { + const acceptedValues = ['verity', 'panatech', 'both'] + if (!acceptedValues.includes(value)) return Promise.reject(new Error('invalid value')) + else return true + }), + + body('full_name') + .notEmpty() + .withMessage(_faSr.required.name) + .bail() + .custom((value, { req }) => { + if (!isPersian(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید')) + else return Promise.resolve() + }), + + body('birth_date').notEmpty().withMessage(_faSr.required.birthdate), + + body('id_number').notEmpty().withMessage(_faSr.required.field).isNumeric().withMessage(_faSr.format.number), + + body('place_of_issue') + .notEmpty() + .withMessage(_faSr.required.field) + .bail() + .custom((value, { req }) => { + if (!isPersianWithDigits(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید')) + else return Promise.resolve() + }), + + body('national_code') + .notEmpty() + .withMessage(_faSr.required.national_code) + .custom((value, { req }) => { + if (!checkNationalCode(value)) return Promise.reject(_faSr.format.national_code) + else return Promise.resolve() + }), + + body('fathers_name') + .notEmpty() + .withMessage(_faSr.required.field) + .bail() + .custom((value, { req }) => { + if (!isPersian(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید')) + else return Promise.resolve() + }), + + body('education_level').notEmpty().withMessage(_faSr.required.field), + + body('military_status') + .notEmpty() + .withMessage(_faSr.required.field) + .bail() + .custom((value, { req }) => { + if (!isPersianWithDigits(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید')) + else return Promise.resolve() + }), + + body('store_name').notEmpty().withMessage(_faSr.required.field), + + body('province_name').notEmpty().withMessage(_faSr.required.field), + + body('province_id').notEmpty().withMessage(_faSr.required.field), + + body('city_name').notEmpty().withMessage(_faSr.required.field), + + body('city_id').notEmpty().withMessage(_faSr.required.field), + + body('postal_code').notEmpty().withMessage(_faSr.required.field).isNumeric().withMessage(_faSr.format.number), + + body('mobile_number') + .notEmpty() + .withMessage(_faSr.required.field) + .isNumeric() + .withMessage(_faSr.format.number) + .custom((value, { req }) => { + if (!checkMobileNumber(value)) return Promise.reject(new Error('فرمت شماره موبایل درست نمیباشد')) + else return Promise.resolve() + }), + + body('tel_number').notEmpty().withMessage(_faSr.required.field).isNumeric().withMessage(_faSr.format.number), + + body('email').notEmpty().withMessage(_faSr.required.field).bail().isEmail().withMessage(_faSr.format.email), + + body('address') + .notEmpty() + .withMessage(_faSr.required.field) + .bail() + .custom((value, { req }) => { + if (!isPersianWithDigits(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید')) + else return Promise.resolve() + }), + + body('business_license') + .notEmpty() + .withMessage(_faSr.required.field) + .bail() + .isBoolean() + .withMessage(_faSr.format.boolean), + + body('ownership_type').notEmpty().withMessage(_faSr.required.field), + + body('total_area').notEmpty().withMessage(_faSr.required.field), + + body('repair_area').notEmpty().withMessage(_faSr.required.field), + + body('stock_area').notEmpty().withMessage(_faSr.required.field), + + body('customer_reference_floor').notEmpty().withMessage(_faSr.required.field), + + body('place_location').notEmpty().withMessage(_faSr.required.field), + + body('geo_location').notEmpty().withMessage(_faSr.required.field), + + body('banner_info').notEmpty().withMessage(_faSr.required.field), + + body('repair_technicians').notEmpty().withMessage(_faSr.required.field), + + body('repair_masters').notEmpty().withMessage(_faSr.required.field), + + body('office_workers').notEmpty().withMessage(_faSr.required.field), + + body('bike_deliveries').notEmpty().withMessage(_faSr.required.field), + + body('computer_repair_exp').notEmpty().withMessage(_faSr.required.field), + + body('multimedia_repair_exp').notEmpty().withMessage(_faSr.required.field), + + body('business_exp').notEmpty().withMessage(_faSr.required.field), + + body('know_asanServ_from').notEmpty().withMessage(_faSr.required.field), + + body('asanServ_products_knowledge').notEmpty().withMessage(_faSr.required.field), + + body('computer_saling_exp').notEmpty().withMessage(_faSr.required.field) + ], + checkValidations(validationResult), + async (req, res) => { + const { user_id } = req + if (!user_id) throw new Error('invalid user id') + const { + representation_type, + full_name, + birth_date, + id_number, + place_of_issue, + national_code, + fathers_name, + education_level, + military_status, + certificates, + store_name, + province_name, + province_id, + city_name, + city_id, + postal_code, + mobile_number, + tel_number, + fax_number, + economic_code, + email, + address, + business_license, + ownership_type, + total_area, + repair_area, + stock_area, + customer_reference_floor, + place_location, + geo_location, + banner_info, + repair_technicians, + repair_masters, + office_workers, + bike_deliveries, + computer_repair_exp, + multimedia_repair_exp, + business_exp, + know_asanServ_from, + introducer_info, + asanServ_products_knowledge, + computer_saling_exp, + computer_saling_description, + other_representations, + more_descriptions + } = req.body + const data = { + user_id, + representation_type, + full_name, + birth_date, + id_number, + place_of_issue, + national_code, + fathers_name, + education_level, + military_status, + certificates, + store_name, + province_name, + province_id, + city_name, + city_id, + postal_code, + mobile_number, + tel_number, + fax_number, + economic_code, + email, + address, + business_license, + ownership_type, + total_area, + repair_area, + stock_area, + customer_reference_floor, + place_location, + geo_location, + banner_info, + repair_technicians, + repair_masters, + office_workers, + bike_deliveries, + computer_repair_exp, + multimedia_repair_exp, + business_exp, + know_asanServ_from, + introducer_info, + asanServ_products_knowledge, + computer_saling_exp, + computer_saling_description, + other_representations, + more_descriptions + } + + try { + const checkUserRepresentations = await Representation.find({ user_id, archived: false }) + if (checkUserRepresentations.length) + return res406(res, 'تا زمانی که درخواست قبلی توسط کارشناسان تعیین وضعیت نشود نمیتوانید درخواست جدیدی ثبت کنید.') + const allRepresentations = await Representation.find() + const representation_code = + 'ASAREP' + + moment(Date.now()).format('jMMM').toUpperCase() + + allRepresentations.length.toString().padStart(4, '0') + + data.representation_code = representation_code + + const representation = new Representation(data) + await representation.save() + const user = await User.findById(user_id) + user.askedForRepresentation = true + user.representation_code = representation_code + await user.save() + + const smsMessage = [ + ' متقاضی گرامی درخواست شما با کد پیگیری ', + representation_code, + ' در تاریخ ', + SmsDateFormat(Date.now()), + ' در سامانه ثبت شد. ', + '\n', + ' بعد از بررسی مدارک توسط کارشناسان نتیجه از طریق پیامک برای شما ارسال خواهد شد، همچنین میتوانید با کد پیگیری از طریق نشانی زیر وضعیت درخواست خود را بررسی کند. ', + '\n', + 'https://asan-service.com/representation', + '\n', + phrases.signature + ] + + const responseMsg = ['درخواست شما باموفقیت ثبت شد.', '\n', ' کد پیگیری: ', representation_code] + + SMS([mobile_number], smsMessage.join('')) + notifyAdmin('updateNewRepresentations') + return res.json({ message: responseMsg.join('') }) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.edit_representation_by_user = [ + [ + body('representation_type') + .notEmpty() + .withMessage('نوع نمایندگی را مشخص کنید') + .bail() + .custom((value, { req }) => { + const acceptedValues = ['verity', 'panatech', 'both'] + if (!acceptedValues.includes(value)) return Promise.reject(new Error('invalid value')) + else return true + }), + + body('full_name') + .notEmpty() + .withMessage(_faSr.required.name) + .bail() + .custom((value, { req }) => { + if (!isPersian(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید')) + else return Promise.resolve() + }), + + body('birth_date').notEmpty().withMessage(_faSr.required.birthdate), + + body('id_number').notEmpty().withMessage(_faSr.required.field).isNumeric().withMessage(_faSr.format.number), + + body('place_of_issue') + .notEmpty() + .withMessage(_faSr.required.field) + .bail() + .custom((value, { req }) => { + if (!isPersianWithDigits(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید')) + else return Promise.resolve() + }), + + body('national_code') + .notEmpty() + .withMessage(_faSr.required.national_code) + .custom((value, { req }) => { + if (!checkNationalCode(value)) return Promise.reject(_faSr.format.national_code) + else return Promise.resolve() + }), + + body('fathers_name') + .notEmpty() + .withMessage(_faSr.required.field) + .bail() + .custom((value, { req }) => { + if (!isPersian(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید')) + else return Promise.resolve() + }), + + body('education_level').notEmpty().withMessage(_faSr.required.field), + + body('military_status') + .notEmpty() + .withMessage(_faSr.required.field) + .bail() + .custom((value, { req }) => { + if (!isPersianWithDigits(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید')) + else return Promise.resolve() + }), + + body('store_name').notEmpty().withMessage(_faSr.required.field), + + body('province_name').notEmpty().withMessage(_faSr.required.field), + + body('province_id').notEmpty().withMessage(_faSr.required.field), + + body('city_name').notEmpty().withMessage(_faSr.required.field), + + body('city_id').notEmpty().withMessage(_faSr.required.field), + + body('postal_code').notEmpty().withMessage(_faSr.required.field).isNumeric().withMessage(_faSr.format.number), + + body('mobile_number') + .notEmpty() + .withMessage(_faSr.required.field) + .isNumeric() + .withMessage(_faSr.format.number) + .custom((value, { req }) => { + if (!checkMobileNumber(value)) return Promise.reject(new Error('فرمت شماره موبایل درست نمیباشد')) + else return Promise.resolve() + }), + + body('tel_number').notEmpty().withMessage(_faSr.required.field).isNumeric().withMessage(_faSr.format.number), + + body('email').notEmpty().withMessage(_faSr.required.field).bail().isEmail().withMessage(_faSr.format.email), + + body('address') + .notEmpty() + .withMessage(_faSr.required.field) + .bail() + .custom((value, { req }) => { + if (!isPersianWithDigits(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید')) + else return Promise.resolve() + }), + + body('business_license') + .notEmpty() + .withMessage(_faSr.required.field) + .bail() + .isBoolean() + .withMessage(_faSr.format.boolean), + + body('ownership_type').notEmpty().withMessage(_faSr.required.field), + + body('total_area').notEmpty().withMessage(_faSr.required.field), + + body('repair_area').notEmpty().withMessage(_faSr.required.field), + + body('stock_area').notEmpty().withMessage(_faSr.required.field), + + body('customer_reference_floor').notEmpty().withMessage(_faSr.required.field), + + body('place_location').notEmpty().withMessage(_faSr.required.field), + + body('geo_location').notEmpty().withMessage(_faSr.required.field), + + body('banner_info').notEmpty().withMessage(_faSr.required.field), + + body('repair_technicians').notEmpty().withMessage(_faSr.required.field), + + body('repair_masters').notEmpty().withMessage(_faSr.required.field), + + body('office_workers').notEmpty().withMessage(_faSr.required.field), + + body('bike_deliveries').notEmpty().withMessage(_faSr.required.field), + + body('computer_repair_exp').notEmpty().withMessage(_faSr.required.field), + + body('multimedia_repair_exp').notEmpty().withMessage(_faSr.required.field), + + body('business_exp').notEmpty().withMessage(_faSr.required.field), + + body('know_asanServ_from').notEmpty().withMessage(_faSr.required.field), + + body('asanServ_products_knowledge').notEmpty().withMessage(_faSr.required.field), + + body('computer_saling_exp').notEmpty().withMessage(_faSr.required.field) + ], + checkValidations(validationResult), + async (req, res) => { + const { user_id } = req + const representation_id = req.params?.representation_id + if (!user_id || !representation_id) throw new Error('invalid user id') + const { + representation_type, + full_name, + birth_date, + id_number, + place_of_issue, + national_code, + fathers_name, + education_level, + military_status, + certificates, + store_name, + province_name, + province_id, + city_name, + city_id, + postal_code, + mobile_number, + tel_number, + fax_number, + economic_code, + email, + address, + business_license, + ownership_type, + total_area, + repair_area, + stock_area, + customer_reference_floor, + place_location, + geo_location, + banner_info, + repair_technicians, + repair_masters, + office_workers, + bike_deliveries, + computer_repair_exp, + multimedia_repair_exp, + business_exp, + know_asanServ_from, + introducer_info, + asanServ_products_knowledge, + computer_saling_exp, + computer_saling_description, + other_representations, + more_descriptions + } = req.body + const data = { + user_id, + representation_type, + full_name, + birth_date, + id_number, + place_of_issue, + national_code, + fathers_name, + education_level, + military_status, + certificates, + store_name, + province_name, + province_id, + city_name, + city_id, + postal_code, + mobile_number, + tel_number, + fax_number, + economic_code, + email, + address, + business_license, + ownership_type, + total_area, + repair_area, + stock_area, + customer_reference_floor, + place_location, + geo_location, + banner_info, + repair_technicians, + repair_masters, + office_workers, + bike_deliveries, + computer_repair_exp, + multimedia_repair_exp, + business_exp, + know_asanServ_from, + introducer_info, + asanServ_products_knowledge, + computer_saling_exp, + computer_saling_description, + other_representations, + more_descriptions + } + try { + const checkAccess = await Representation.findById(representation_id) + if (!checkAccess.editAccess) throw new Error('شما دسترسی ویرایش اطلاعات ندارید') + await Representation.findByIdAndUpdate(representation_id, data) + return res.json({ message: 'با موفقیت آپدیت شد' }) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.getAll = [ + (req, res) => { + Representation.find({}) + .select( + 'user_id representation_code agent_code full_name national_code mobile_number province_name province_id city_name city_id status created_at representation_type' + ) + .exec((err, data) => { + if (err || !data) return res404(res, err) + else return res.json(data) + }) + } +] + +module.exports.getOne = [ + async (req, res) => { + try { + const representation = await Representation.findById(req.params?.id) + .populate('_updatedBy', 'username first_name last_name') + .populate('_revokedBy', 'username first_name last_name') + if (!representation) return res404(res, 'incorrect id') + if (representation.status === 'registered') { + representation.status = 'ongoing' + await representation.save() + const smsMsg = [ + ' متقاصی گرامی درخواست شما برای اخذ نمایندگی آسان سرویس به کد پیگیری ', + representation.representation_code, + ' مورخ ', + SmsDateFormat(Date.now()), + ' توسط کارشناسان آسان سرویس مشاهده و مورد بررسی قرار گرفت. ', + '\n', + phrases.signature + ] + SMS([representation.mobile_number], smsMsg.join('')) + notifyAdmin('updateNewRepresentations') + return res.json(representation) + } else return res.json(representation) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.getLastUserRep = [ + async (req, res) => { + try { + const repId = req.params?.id + const isId = Mongoose.isValidObjectId(repId) + const representation = await Representation.findOne({ + $or: [{ representation_code: repId }, { _id: isId ? repId : undefined }] + }) + if (!representation) return res404(res, 'incorrect id') + return res.json(representation) + } catch (e) { + console.log('🚀 ~ file: representationController.js:620 ~ e', e) + return res500(res, e) + } + } +] + +module.exports.change_form_status = [ + async (req, res) => { + const status = req.body?.status + // status prop validation check + if (!status) return res500(res, 'status prop required') + const availableStatuses = [ + 'verification', + 'accepted', + 'rejected', + 'uploadOff', + 'uploadOn', + 'editAccessOn', + 'editAccessOff' + ] + if (!availableStatuses.includes(status)) return res500(res, 'invalid status') + + try { + // find representation and user + const representation = await Representation.findById(req.params.id) + if (!representation) return res404(res, 'incorrect id') + if ( + status !== 'uploadOn' && + status !== 'uploadOff' && + status !== 'editAccessOn' && + status !== 'editAccessOff' && + representation.archived + ) { + return res500(res, 'شما نمیتوانید وضعیت این فرم را تغییر دهید') + } + const user = await User.findById(representation.user_id) + if (!user) throw new Error('incorrect user id') + if (status === 'accepted' && user.isAgent) return res500(res, 'حساب این کاربر قبلا به حساب نماینده تبدیل شده') + + // change upload ability + if (status === 'uploadOn') { + representation.upload = true + await representation.save() + const smsMsg = [ + ' متقاصی گرامی دسرسی آپلود مدارک برای درخواست ', + representation.representation_code, + ' ایجاد شد، لطفا هرچه سریع تر نسبت به آپلود مدارک خود اقدام کنید. ', + '\n', + phrases.signature + ] + SMS([representation.mobile_number], smsMsg.join('')) + return res.json({ message: 'وضعیت جدید در سیستم ثبت شد و پیامک اطلاع رسانی برای متقاضی ارسال شد' }) + } + if (status === 'uploadOff') { + representation.upload = false + await representation.save() + return res.json({ message: 'وضعیت جدید در سیستم ثبت شد' }) + } + // change editAccess ability + if (status === 'editAccessOn') { + representation.editAccess = true + await representation.save() + const smsMsg = [ + ' نماینده گرامی دسرسی ویرایش اطلاعات نمایندگی برای شما ایجاد شد، لطفا هرچه سریع تر نسبت به ویرایش اطلاعات خود اقدام کنید.', + '\n', + phrases.signature + ] + SMS([representation.mobile_number], smsMsg.join('')) + return res.json({ message: 'وضعیت جدید در سیستم ثبت شد و پیامک اطلاع رسانی برای متقاضی ارسال شد' }) + } + if (status === 'editAccessOff') { + representation.editAccess = false + await representation.save() + return res.json({ message: 'وضعیت جدید در سیستم ثبت شد' }) + } + // change representation and user data + representation.status = status + user.askedForRepresentation = true + user.isAgent = false + + if (status === 'rejected') { + user.askedForRepresentation = false + representation.archived = true + representation.upload = false + representation.editAccess = false + } + if (status === 'accepted') { + user.askedForRepresentation = false + representation.archived = true + representation.upload = false + representation.editAccess = false + user.isAgent = true + user.representation_id = representation._id + const agentsCount = await Representation.find({ status: 'accepted' }) + representation.agent_code = 'ASG' + agentsCount.length.toString().padStart(2, '0') + } + + // save changes + await representation.save() + await user.save() + + // send sms for user + function statusToPhrase() { + if (status === 'verification') return ' در وضعیت احراز هویت و بررسی مدارک قرار گرفت.' + else if (status === 'rejected') return ' رد شد. ' + else return ' مورد قبول قرار گرفت. برای ادامه ی فرایند از طرف شرکت با شما تماس گرفته خواهد شد. ' + } + + const smsMsg = [ + ' متقاصی گرامی درخواست شما برای اخذ نمایندگی آسان سرویس به کد پیگیری ', + representation.representation_code, + ' مورخ ', + SmsDateFormat(Date.now()), + statusToPhrase(), + '\n', + phrases.signature + ] + SMS([representation.mobile_number], smsMsg.join('')) + return res.json({ message: 'وضعیت جدید در سیستم ثبت شد و پیامک اطلاع رسانی برای متقاضی ارسال شد' }) + } catch (e) { + return res404(res, `there is an error here --- ${e}`) + } + } +] + +module.exports.check_representation = [ + [ + body('representation_code') + .notEmpty() + .withMessage('کد پیگیری را وارد کنید') + .bail() + .isLength({ min: 13 }) + .withMessage('فرمت کدپیگیری صحیح نمیباشد') + ], + checkValidations(validationResult), + (req, res) => { + const { representation_code } = req.body + const { user_id } = req + if (!user_id) return res500(res, 'ابتدا وارد حساب کاربری خود شوید') + Representation.findOne({ user_id, representation_code: representation_code.toUpperCase() }) + .select('_id status upload created_at') + .exec((err, data) => { + if (err || !data) return res404(res, 'درخواستی با این کد پیگیری ثبت نشده') + else return res.json(data) + }) + } +] + +module.exports.upload_image_to_representation = [ + (req, res) => { + const file = req.files?.file + const fieldName = req.query?.name + const userType = req.params?.userType + const representation_code = req.params?.representation_code + + if (!file) return res500(res, 'هیچ فایلی برای آپلود انتخاب نکرده اید') + if (!fieldName) return res500(res, 'هیچ دسته بندی ای انتخاب نکرده اید') + if (file.mimetype !== 'image/jpeg') return res500(res, 'فقط فرمت jpg قابل قبول است') + if (file.size / 1024 / 1024 > 2) return res500(res, 'حداکثر حجم مجاز آپلود 2 مگابایت میباشد') + + Representation.findOne({ representation_code }, (err, data) => { + if (err || !data) return res500(res, 'invalid rep id') + if ((!data.upload || data.status === 'rejected') && userType !== 'admin') { + return res500(res, 'شما دسترسی آپلود ندارید') + } + const fileName = data.representation_code + '_' + Date.now() + Math.random() + fieldName + file.name + data[fieldName].push({ name: fileName }) + data.markModified(fieldName) + file.mv(`./static/uploads/representation_docs/${fileName}`, err => { + if (err) console.log(err) + }) + data.save((err, data) => { + if (err) console.log(err) + return res.json({ message: 'فایل مدارک در سیستم ذخیره شد' }) + }) + }) + } +] + +module.exports.remove_image_from_representation = [ + (req, res) => { + const representation_code = req.params?.representation_code + const imgId = req.params?.imgId + const fieldName = req.query?.name + const userType = req.params?.userType + + if (!representation_code || !imgId || !fieldName) return res500(res, 'please provide all nessesory information') + + Representation.findOne({ representation_code }, (err, data) => { + if (err || !data) return res500(res, 'invalid rep id') + if ((!data.upload || data.status === 'rejected') && userType !== 'admin') { + return res500(res, 'شما دسترسی آپلود ندارید') + } + try { + const img = data[fieldName].id(imgId) + img.remove(err => { + if (err) console.log(err) + fs.unlink(`./static/uploads/representation_docs/${img.name}`, err => { + if (err) console.log(err) + }) + }) + data.save((err, data) => { + if (err) console.log(err) + return res.json({ message: 'file removed successfully' }) + }) + } catch (err) { + res500(res, 'error') + } + }) + } +] + +module.exports.get_agents = [ + (req, res) => { + Representation.find({ status: 'accepted', _revoked: false }) + .select( + 'full_name province_name province_id city_name city_id address postal_code tel_number fax_number mobile_number email store_name agent_code representation_type' + ) + .exec((err, agents) => { + if (err) return res404(res, err) + return res.json(agents) + }) + } +] + +module.exports.get_revoked_agents_for_admin = [ + (req, res) => { + Representation.find({ _revoked: true }) + .select( + 'full_name province_name province_id city_name city_id address postal_code tel_number fax_number mobile_number email store_name agent_code representation_type' + ) + .exec((err, agents) => { + if (err) return res404(res, err) + return res.json(agents) + }) + } +] + +module.exports.update_representation_by_admin = [ + [ + body('representation_type') + .notEmpty() + .withMessage('نوع نمایندگی را مشخص کنید') + .bail() + .custom((value, { req }) => { + const acceptedValues = ['verity', 'panatech', 'both'] + if (!acceptedValues.includes(value)) return Promise.reject(new Error('invalid value')) + else return true + }), + + body('full_name') + .notEmpty() + .withMessage(_faSr.required.name) + .bail() + .custom((value, { req }) => { + if (!isPersian(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید')) + else return Promise.resolve() + }), + + body('birth_date').notEmpty().withMessage(_faSr.required.birthdate), + + body('id_number').notEmpty().withMessage(_faSr.required.field).isNumeric().withMessage(_faSr.format.number), + + body('place_of_issue') + .notEmpty() + .withMessage(_faSr.required.field) + .bail() + .custom((value, { req }) => { + if (!isPersianWithDigits(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید')) + else return Promise.resolve() + }), + + body('national_code') + .notEmpty() + .withMessage(_faSr.required.national_code) + .custom((value, { req }) => { + if (!checkNationalCode(value)) return Promise.reject(_faSr.format.national_code) + else return Promise.resolve() + }), + + body('fathers_name') + .notEmpty() + .withMessage(_faSr.required.field) + .bail() + .custom((value, { req }) => { + if (!isPersian(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید')) + else return Promise.resolve() + }), + + body('education_level').notEmpty().withMessage(_faSr.required.field), + + body('military_status') + .notEmpty() + .withMessage(_faSr.required.field) + .bail() + .custom((value, { req }) => { + if (!isPersianWithDigits(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید')) + else return Promise.resolve() + }), + + body('store_name').notEmpty().withMessage(_faSr.required.field), + + body('province_name').notEmpty().withMessage(_faSr.required.field), + + body('province_id').notEmpty().withMessage(_faSr.required.field), + + body('city_name').notEmpty().withMessage(_faSr.required.field), + + body('city_id').notEmpty().withMessage(_faSr.required.field), + + body('postal_code').notEmpty().withMessage(_faSr.required.field).isNumeric().withMessage(_faSr.format.number), + + body('mobile_number') + .notEmpty() + .withMessage(_faSr.required.field) + .isNumeric() + .withMessage(_faSr.format.number) + .custom((value, { req }) => { + if (!checkMobileNumber(value)) return Promise.reject(new Error('فرمت شماره موبایل درست نمیباشد')) + else return Promise.resolve() + }), + + body('tel_number').notEmpty().withMessage(_faSr.required.field).isNumeric().withMessage(_faSr.format.number), + + body('email').notEmpty().withMessage(_faSr.required.field).bail().isEmail().withMessage(_faSr.format.email), + + body('address') + .notEmpty() + .withMessage(_faSr.required.field) + .bail() + .custom((value, { req }) => { + if (!isPersianWithDigits(value)) return Promise.reject(new Error('با حروف فارسی تایپ کنید')) + else return Promise.resolve() + }), + + body('business_license') + .notEmpty() + .withMessage(_faSr.required.field) + .bail() + .isBoolean() + .withMessage(_faSr.format.boolean), + + body('ownership_type').notEmpty().withMessage(_faSr.required.field), + + body('total_area').notEmpty().withMessage(_faSr.required.field), + + body('repair_area').notEmpty().withMessage(_faSr.required.field), + + body('stock_area').notEmpty().withMessage(_faSr.required.field), + + body('customer_reference_floor').notEmpty().withMessage(_faSr.required.field), + + body('place_location').notEmpty().withMessage(_faSr.required.field), + + body('geo_location').notEmpty().withMessage(_faSr.required.field), + + body('banner_info').notEmpty().withMessage(_faSr.required.field), + + body('repair_technicians').notEmpty().withMessage(_faSr.required.field), + + body('repair_masters').notEmpty().withMessage(_faSr.required.field), + + body('office_workers').notEmpty().withMessage(_faSr.required.field), + + body('bike_deliveries').notEmpty().withMessage(_faSr.required.field), + + body('computer_repair_exp').notEmpty().withMessage(_faSr.required.field), + + body('multimedia_repair_exp').notEmpty().withMessage(_faSr.required.field), + + body('business_exp').notEmpty().withMessage(_faSr.required.field), + + body('know_asanServ_from').notEmpty().withMessage(_faSr.required.field), + + body('asanServ_products_knowledge').notEmpty().withMessage(_faSr.required.field), + + body('computer_saling_exp').notEmpty().withMessage(_faSr.required.field) + ], + checkValidations(validationResult), + async (req, res) => { + const { user_id } = req + const representation_id = req.params?.id + if (!user_id || !representation_id) throw new Error('invalid user id') + const { + representation_type, + full_name, + birth_date, + id_number, + place_of_issue, + national_code, + fathers_name, + education_level, + military_status, + certificates, + store_name, + province_name, + province_id, + city_name, + city_id, + postal_code, + mobile_number, + tel_number, + fax_number, + economic_code, + email, + address, + business_license, + ownership_type, + total_area, + repair_area, + stock_area, + customer_reference_floor, + place_location, + geo_location, + banner_info, + repair_technicians, + repair_masters, + office_workers, + bike_deliveries, + computer_repair_exp, + multimedia_repair_exp, + business_exp, + know_asanServ_from, + introducer_info, + asanServ_products_knowledge, + computer_saling_exp, + computer_saling_description, + other_representations, + more_descriptions + } = req.body + const data = { + _updatedBy: user_id, + representation_type, + full_name, + birth_date, + id_number, + place_of_issue, + national_code, + fathers_name, + education_level, + military_status, + certificates, + store_name, + province_name, + province_id, + city_name, + city_id, + postal_code, + mobile_number, + tel_number, + fax_number, + economic_code, + email, + address, + business_license, + ownership_type, + total_area, + repair_area, + stock_area, + customer_reference_floor, + place_location, + geo_location, + banner_info, + repair_technicians, + repair_masters, + office_workers, + bike_deliveries, + computer_repair_exp, + multimedia_repair_exp, + business_exp, + know_asanServ_from, + introducer_info, + asanServ_products_knowledge, + computer_saling_exp, + computer_saling_description, + other_representations, + more_descriptions + } + try { + await Representation.findByIdAndUpdate(representation_id, data) + return res.json({ message: 'با موفقیت آپدیت شد' }) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.revoke_representation_by_admin = [ + async (req, res) => { + try { + const { user_id } = req + if (!user_id) return res406(res, 'invalid user id') + const representation = await Representation.findByIdAndUpdate(req.params?.id) + const agentAccount = await User.findById(representation.user_id) + + representation._revoked = true + representation._revokedBy = user_id + + agentAccount.isAgent = false + agentAccount.representation_id = undefined + agentAccount.askedForRepresentation = false + + await representation.save() + await agentAccount.save() + + return res.json({ message: 'امتیاز نمایندگی صلب شد' }) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.add_agent_by_admin = [ + async (req, res) => { + const user_id = req.body.user + if (!user_id) throw new Error('invalid user id') + + const data = { + user_id, + representation_type: 'both', + full_name: '', // todo + birth_date: '', + id_number: '', + place_of_issue: '', + national_code: '', // todo + fathers_name: '', + education_level: '', + military_status: '', + certificates: '', + store_name: '', + province_name: '', // todo + province_id: '', // todo + city_name: '', // todo + city_id: '', // todo + postal_code: '', + mobile_number: '', // todo + tel_number: '', + fax_number: '', + economic_code: '', + email: '', // todo + address: '', // todo + business_license: true, + ownership_type: 'owner', + total_area: '', + repair_area: '', + stock_area: '', + customer_reference_floor: '', + place_location: 'other', + geo_location: 'inside_passage', + banner_info: '', + repair_technicians: '', + repair_masters: '', + office_workers: '', + bike_deliveries: '', + computer_repair_exp: '', + multimedia_repair_exp: '', + business_exp: '', + know_asanServ_from: 'other', + introducer_info: '', + asanServ_products_knowledge: 4, + computer_saling_exp: true, + computer_saling_description: '', + other_representations: [], + more_descriptions: '' + } + + try { + const allRepresentations = await Representation.find() + // generate rep code + const representation_code = + 'ASAREP' + + moment(Date.now()).format('jMMM').toUpperCase() + + allRepresentations.length.toString().padStart(4, '0') + + // generate agent code + const agentsCount = await Representation.find({ status: 'accepted' }) + data.agent_code = 'ASG' + agentsCount.length.toString().padStart(2, '0') + + data.representation_code = representation_code + + // find user and import information + const user = await User.findById(user_id) + if (user.isAgent) return res500(res, 'حساب کاربر از قبل نماینده است') + user.askedForRepresentation = false + user.isAgent = true + user.representation_code = representation_code + + data.full_name = user.first_name + ' ' + user.last_name + data.national_code = user.national_code + data.province_name = user.province_name + data.province_id = user.province_id + data.city_name = user.city_name + data.city_id = user.city_id + data.mobile_number = user.mobile_number + data.email = user.email + data.address = user.address + data.archived = true + data.upload = true + data.editAccess = true + data.status = 'accepted' + + const representation = new Representation(data) + await representation.save() + user.representation_id = representation._id + await user.save() + + return res.json({ representationId: representation.id }) + } catch (e) { + return res500(res, e) + } + } +] diff --git a/server/controllers/serialsExelController.js b/server/controllers/serialsExelController.js new file mode 100644 index 0000000..8126b04 --- /dev/null +++ b/server/controllers/serialsExelController.js @@ -0,0 +1,113 @@ +const fs = require('fs') +const { body, validationResult } = require('express-validator') +const { res404, res500, checkValidations } = require('../plugins/controllersHelperFunctions') +const { _sr } = require('../plugins/serverResponses') +const { serialChecker } = require('../plugins/asanServiceSerialChecker') +const _faSr = _sr.fa + +const guaranteeSerialsPath = './static/uploads/serials' +const productSerialsPath = './static/uploads/serials_products' + +/// // router modules +module.exports.addExel = [ + [ + body('type') + .notEmpty() + .withMessage('choose type') + .bail() + .custom((value, { rew }) => { + const validValues = ['guaranteeSerial', 'orginality'] + if (!validValues.includes(value)) return Promise.reject(new Error('invalid type')) + else return Promise.resolve() + }) + ], + checkValidations(validationResult), + async (req, res) => { + if (!req.files?.file) return res.status(422).json({ validation: { file: { msg: 'فایل را اضافه کنید' } } }) + if (!req.files?.file.name.split('.').some(item => ['xlsx', 'xltx', 'xlsm', 'xlsb'].includes(item))) + return res.status(422).json({ validation: { file: { msg: 'فرمت فایل درست نمیباشد' } } }) + const file = req.files.file + const { type } = req.body + try { + const path = type === 'guaranteeSerial' ? guaranteeSerialsPath : productSerialsPath + const files = await fs.readdirSync(path) + for await (const item of files) { + if (file.name === item) return res.status(422).json({ validation: { file: { msg: 'نام فایل تکراریست' } } }) + } + + await file.mv(`${path}/${file.name}`) + + return res.json({ message: _faSr.response.success_save }) + } catch (err) { + return res500(res, err) + } + } +] + +module.exports.getAllExels = [ + (req, res) => { + const type = req.query?.type + if (!type) return res500(res, 'choose type') + const validValues = ['guaranteeSerial', 'orginality'] + if (!validValues.includes(type)) return res500(res, 'choose type') + const path = type === 'guaranteeSerial' ? guaranteeSerialsPath : productSerialsPath + const downloadAblePath = type === 'guaranteeSerial' ? '/uploads/serials/' : '/uploads/serials_products/' + fs.readdir(path, (err, files) => { + if (err) return res500(res, err) + const filesWithURL = files.map(item => { + return { url: downloadAblePath, name: item } + }) + return res.json(filesWithURL) + }) + } +] + +module.exports.removeExel = [ + (req, res) => { + const type = req.query?.type + if (!type) return res500(res, 'choose type') + const validValues = ['guaranteeSerial', 'orginality'] + if (!validValues.includes(type)) return res500(res, 'choose type') + const path = type === 'guaranteeSerial' ? guaranteeSerialsPath : productSerialsPath + fs.unlink(`${path}/${req.params.name}`, err => { + if (err) return res404(res, _faSr.not_found.item_id) + else return res.json({ message: _faSr.response.success_remove }) + }) + } +] + +module.exports.checkSerial = [ + [ + body('serial').notEmpty().withMessage('شماره سریال را وارد کنید'), + + body('type') + .notEmpty() + .withMessage('choose type') + .bail() + .custom((value, { rew }) => { + const validValues = ['guaranteeSerial', 'orginality'] + if (!validValues.includes(value)) return Promise.reject(new Error('invalid type')) + else return Promise.resolve() + }) + ], + checkValidations(validationResult), + async (req, res) => { + try { + const { serial, type } = req.body + const serialStatus = await serialChecker(serial, type) + + let okMsg + if (type === 'guaranteeSerial') okMsg = 'شماره سریال گارانتی معتبر میباشد.' + else okMsg = 'شماره سریال کالا معتبر میباشد.' + + let errMsg + if (type === 'guaranteeSerial') errMsg = 'شماره سریال گارانتی معتبر نیست.' + else errMsg = 'شماره سریال کالا معتبر نیست.' + + if (serialStatus) return res.json({ message: okMsg }) + else return res404(res, errMsg) + } catch (e) { + return res500(res, `there is an error here --- ${e}`) + } + } +] diff --git a/server/controllers/smsBroadcastController.js b/server/controllers/smsBroadcastController.js new file mode 100644 index 0000000..dbca0f2 --- /dev/null +++ b/server/controllers/smsBroadcastController.js @@ -0,0 +1,52 @@ +const { body, validationResult } = require('express-validator') +const SMSBroadcast = require('../models/SMSBroadcast') +const { _sr } = require('../plugins/serverResponses') +const { res500, checkValidations } = require('../plugins/controllersHelperFunctions') +const { SMS } = require('../plugins/SMS_Module') +const _faSr = _sr.fa + +module.exports.broadcast = [ + [ + body('message').notEmpty().withMessage(_faSr.required.message), + + body('recievers').notEmpty().withMessage('لیست دریافت کنندگان را پر کنید') + ], + checkValidations(validationResult), + async (req, res) => { + try { + const { message, recievers } = req.body + const { user_id } = req + const data = { message, recievers, _creator: user_id } + const smsBroadcast = new SMSBroadcast(data) + await smsBroadcast.save() + for await (const item of recievers) { + await SMS([item.mobile_number], message) + } + return res.json({ message: 'پیامک برای همه مخاطبین ارسال گردید' }) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.getAllForAdmin = [ + (req, res) => { + SMSBroadcast.find({}, (err, data) => { + if (err) return res500(res, err) + return res.json(data) + }) + } +] + +module.exports.getOneForAdmin = [ + async (req, res) => { + try { + const sms = await SMSBroadcast.findById(req.params.id) + .populate('recievers.user_id', 'mobile_number first_name last_name verity_businessCode panatech_businessCode') + .populate('_creator', 'username first_name last_name') + return res.json(sms) + } catch (e) { + return res500(res, e) + } + } +] diff --git a/server/controllers/surveyController.js b/server/controllers/surveyController.js new file mode 100644 index 0000000..98266c1 --- /dev/null +++ b/server/controllers/surveyController.js @@ -0,0 +1,70 @@ +const Survey = require('../models/Survey') +const { _sr } = require('../plugins/serverResponses') +const { res404, res500 } = require('../plugins/controllersHelperFunctions') +const _faSr = _sr.fa + +module.exports.create = [ + (req, res) => { + const { + purchasedProduct, + guaranteeWorkFlow, + employeeResponsibility, + serviceQuality, + serviceTime, + repairQuality, + coast, + description, + code + } = req.body + + const data = { + purchasedProduct, + guaranteeWorkFlow, + employeeResponsibility, + serviceQuality, + serviceTime, + repairQuality, + coast, + description, + code, + user: req.user_id + } + + const survey = new Survey(data) + survey.save(err => { + if (err) return res500(res, err) + return res.json({ message: _faSr.response.success_save }) + }) + } +] + +module.exports.getAllForUser = [ + (req, res) => { + Survey.find({ user: req.user_id }, (err, data) => { + if (err) return res500(res, err) + return res.json(data) + }) + } +] + +module.exports.getAllForAdmin = [ + (req, res) => { + Survey.find({}) + .populate('user', 'first_name last_name') + .exec((err, data) => { + if (err) return res500(res, err) + return res.json(data) + }) + } +] + +module.exports.getOneForAdmin = [ + (req, res) => { + Survey.findById(req.params.id) + .populate('user', 'first_name last_name') + .exec((err, data) => { + if (err) return res404(res, err) + return res.json(data) + }) + } +] diff --git a/server/controllers/thirdPartyController.js b/server/controllers/thirdPartyController.js new file mode 100644 index 0000000..ff7a733 --- /dev/null +++ b/server/controllers/thirdPartyController.js @@ -0,0 +1,130 @@ +const { body, validationResult } = require('express-validator') +const User = require('../models/User') +const SurveyCheck = require('../models/SurveyCheck') +const { res406, res500, checkValidations } = require('../plugins/controllersHelperFunctions') +const { SMS } = require('../plugins/SMS_Module') +const { phrases } = require('../plugins/SMS_Phrases') + +module.exports.reception = [ + [ + body('BusinessID').notEmpty().withMessage('BusinessID is required'), + body('TempReceiptTransNumber').notEmpty().withMessage('TempReceiptTransNumber is required'), + body('ItemReceptionTransNumber').notEmpty().withMessage('ItemReceptionTransNumber is required') + ], + checkValidations(validationResult), + async (req, res) => { + const { BusinessID, TempReceiptTransNumber, ItemReceptionTransNumber } = req.body + try { + // check user id and agent status + const user = await User.findOne({ $or: [{ verity_businessID: BusinessID }, { panatech_businessID: BusinessID }] }) + if (!user) return res406(res, 'Incorrect BusinessID') + + function getMessageTxt() { + const msgArray = [ + 'مشتری گرامی', + user.first_name + ' ' + user.last_name, + '\n', + 'کالاهای شما با شماره پذیرش موقت', + TempReceiptTransNumber, + 'توسط واحد گارانتی آسان سرویس دریافت شد و با شماره پذیرش دائم', + ItemReceptionTransNumber, + 'دردست بررسی می باشد. به محض آماده شدن کالاها به شما اطلاع رسانی خواهد شد.', + '\n', + phrases.signature + ] + return msgArray.join(' ') + } + + SMS([user.mobile_number], getMessageTxt()) + return res.json({ message: 'Message sent successfully' }) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.repair = [ + [ + body('BusinessID').notEmpty().withMessage('BusinessID is required'), + body('TransNumber').notEmpty().withMessage('TransNumber is required'), + body('ItemReceptionTransNumber').notEmpty().withMessage('ItemReceptionTransNumber is required') + ], + checkValidations(validationResult), + async (req, res) => { + const { BusinessID, ItemReceptionTransNumber, TransNumber } = req.body + try { + // check user id and agent status + const user = await User.findOne({ $or: [{ verity_businessID: BusinessID }, { panatech_businessID: BusinessID }] }) + if (!user) return res406(res, 'Incorrect BusinessID') + + function getMessageTxt() { + const msgArray = [ + 'مشتری گرامی', + user.first_name + ' ' + user.last_name, + '\n', + 'مراحل تعمیر و بررسی کالاهای ارسالی شما با شماره پذیرش', + ItemReceptionTransNumber, + 'توسط واحد گارانتی آسان سرویس انجام شد و با شماره فاکتور گارانتی', + TransNumber, + 'ثبت شد. به زودی کالاها به آدرس شما ارسال می گردد. ', + '\n', + phrases.signature + ] + return msgArray.join(' ') + } + + SMS([user.mobile_number], getMessageTxt()) + return res.json({ message: 'Message sent successfully' }) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.sendBack = [ + [ + body('BusinessID').notEmpty().withMessage('BusinessID is required'), + body('DeliveryCode').notEmpty().withMessage('DeliveryCode is required'), + body('ItemReceptionTransNumber').notEmpty().withMessage('ItemReceptionTransNumber is required') + ], + checkValidations(validationResult), + async (req, res) => { + const { BusinessID, ItemReceptionTransNumber, DeliveryCode } = req.body + try { + // check user id and agent status + const user = await User.findOne({ $or: [{ verity_businessID: BusinessID }, { panatech_businessID: BusinessID }] }) + if (!user) return res406(res, 'Incorrect BusinessID') + + function getMessageTxt() { + const msgArray = [ + 'مشتری گرامی', + user.first_name + ' ' + user.last_name, + '\n', + 'کالاهای ارسالی شما با شماره پذیرش', + ItemReceptionTransNumber, + 'پس از انجام مراحل گارانتی توسط واحد گارانتی به آدرس شما ارسال شد. شماره بیجک بسته ارسالی', + DeliveryCode, + 'می باشد. از همراهی و خرید شما سپاس گزاریم. ', + '\n', + phrases.signature + ] + return msgArray.join(' ') + } + + const surveyData = { + code: ItemReceptionTransNumber, + user: user._id, + timeAdded: Date.now() + } + const surveyCheck = new SurveyCheck(surveyData) + surveyCheck.save(err => { + if (err) console.log('surveyCheck save error', err) + }) + + SMS([user.mobile_number], getMessageTxt()) + return res.json({ message: 'Message sent successfully' }) + } catch (e) { + return res500(res, e) + } + } +] diff --git a/server/controllers/ticketsController.js b/server/controllers/ticketsController.js new file mode 100644 index 0000000..e234cbe --- /dev/null +++ b/server/controllers/ticketsController.js @@ -0,0 +1,157 @@ +const { body, validationResult } = require('express-validator') +const TicketConversation = require('../models/TicketConversation') +const User = require('../models/User') +const { notifyUser } = require('../WebSocket/controllers/user_EventsController') +const { notifyAdmin } = require('../WebSocket/controllers/admin_EventsController') +const { res404, res500, checkValidations } = require('../plugins/controllersHelperFunctions') +const { _sr } = require('../plugins/serverResponses') +const _faSr = _sr.fa + +// env variables +const maxAttachmentSize = 2048 +const userIdPopulation = 'first_name last_name verity_businessCode panatech_businessCode' + +/// ////////// user +module.exports.add_ticket = [ + [ + body('title').notEmpty().withMessage(_faSr.required.title), + body('user_id').notEmpty().withMessage('کد مشتری را وارد کنید') + ], + checkValidations(validationResult), + (req, res) => { + const { title, transaction_id, user_id } = req.body + + const data = { title, transaction_id, user_id } + + const ticketConversation = new TicketConversation(data) + ticketConversation.save((err, data) => { + if (err) console.log(err) + return res.json(data) + }) + } +] + +module.exports.add_message_to_ticket = [ + [ + body('message') + .if((value, { req }) => !req.files) + .notEmpty() + .withMessage(_faSr.required.message) + ], + checkValidations(validationResult), + async (req, res) => { + const { message } = req.body + const { user_id } = req + + const data = { message, user_id, isUser: true } + + try { + // check user scope + const user = await User.findById(user_id) + if (user.scope.includes('admin')) data.isUser = false + + // save files + if (req.files?.image) { + const image = req.files.image + const fileName = 'TicketAttachment_' + Date.now() + '.' + image.mimetype.split('/')[1] + const acceptableFormats = ['png', 'jpg', 'jpeg', 'webp'] + if (!acceptableFormats.includes(image.mimetype.split('/')[1])) + return res.status(422).json({ validation: { image: { msg: _faSr.format.image } } }) + if (image.size / 1024 > maxAttachmentSize) + return res + .status(422) + .json({ validation: { image: { msg: `حجم تصویر نباید بیشتر از ${maxAttachmentSize} KB باشد.` } } }) + data.image = fileName + await image.mv(`./static/uploads/images/tickets/${fileName}`) + } + + // find conversation and update messages + const conversation = await TicketConversation.findById(req.params.id) + .populate('user_id', userIdPopulation) + .populate('messages.user_id', userIdPopulation) + conversation.messages.push(data) + await conversation.save() + if (data.isUser) { + notifyAdmin('newTicketMsg') + notifyAdmin('updateUnreadTickets') + } else { + notifyUser('updateUnreadTickets', conversation.user_id._id) + notifyUser('newTicketMsg', conversation.user_id._id) + } + return res.json(conversation) + } catch (e) { + return res404(res, e) + } + } +] + +module.exports.get_all_tickets = [ + (req, res) => { + const { user_id } = req + TicketConversation.find({ user_id }, (err, conversations) => { + if (err) return res500(res, err) + else return res.json(conversations) + }) + } +] + +module.exports.get_one_ticket = [ + (req, res) => { + TicketConversation.findById(req.params.id) + .populate('user_id', userIdPopulation) + .populate('messages.user_id', userIdPopulation) + .exec((err, data) => { + if (err) return res404(res, err) + // after sending messages to user set read status to true + const messages = data.messages + setTimeout(async () => { + try { + const user = await User.findById(req.user_id) + if (messages.length) { + let userNeedsNotify = false + let adminNeedsNotify = false + messages.forEach((item, index) => { + if (item.isUser && user.scope.includes('admin') && !item.read) { + // console.log(index, ' these are user messages') + adminNeedsNotify = true + item.read = true + } + + if (!item.isUser && !user.scope.includes('admin') && !item.read) { + // console.log(index, ' these are admin messages') + userNeedsNotify = true + item.read = true + } + + if (index === messages.length - 1) { + data.save(err => { + if (err) console.log(err) + + if (userNeedsNotify) notifyUser('updateUnreadTickets', data.user_id._id) + + if (adminNeedsNotify) notifyAdmin('updateUnreadTickets') + }) + } + }) + } + } catch (e) { + return res500(res, e) + } + }, 500) + return res.json(data) + }) + } +] + +/// ///////// admin + +module.exports.get_all_tickets_for_admin = [ + (req, res) => { + TicketConversation.find({}) + .populate('user_id', userIdPopulation) + .exec((err, data) => { + if (err) return res500(res, err) + return res.json(data) + }) + } +] diff --git a/server/controllers/transactionController.js b/server/controllers/transactionController.js new file mode 100644 index 0000000..719370e --- /dev/null +++ b/server/controllers/transactionController.js @@ -0,0 +1,333 @@ +const moment = require('moment-jalaali') +const { body, validationResult } = require('express-validator') +const TransactionDraft = require('../models/TransactionDraft') +const Transaction = require('../models/Transaction') +const User = require('../models/User') +const SurveyCheck = require('../models/SurveyCheck') +const { _sr } = require('../plugins/serverResponses') +const { saveTransactionToArpa } = require('../ArpaWebservice.js') +const { + res404, + res406, + res500, + checkValidations, + generateRandomDigits +} = require('../plugins/controllersHelperFunctions') +const { SMS } = require('../plugins/SMS_Module') +const { phrases } = require('../plugins/SMS_Phrases') +const { notifyAgent } = require('../WebSocket/controllers/agent_EventsController') +const { notifyUser } = require('../WebSocket/controllers/user_EventsController') +const _faSr = _sr.fa + +// date formatters +function ArpaDateFormat(date) { + return moment(date).format('YYYY-MM-DD HH:mm:ss') +} + +function SmsDateFormat(date) { + return moment(date).format('jYYYY/jMM/jDD') +} + +/// ///////////////// users +module.exports.add_transaction = [ + [ + body('BusinessID').notEmpty().withMessage('Enter businessID'), + body('cAddress1').notEmpty().withMessage(_faSr.required.address), + body('TransCCustom1').notEmpty().withMessage(_faSr.required.receiver_first_name), + body('cTel1').notEmpty().withMessage(_faSr.required.receiver_mobile) + ], + checkValidations(validationResult), + async (req, res) => { + if (!req.body.termsOfUse) return res406(res, 'با متن تعهدنامه موافقت نکرده اید') + if (!req.body.items?.length) return res406(res, 'هیچ کالایی به فرم اضافه نکرده اید') + + const { BusinessID, Description, cAddress1, TransCCustom1, cTel1, items, draftId, db_name, agent } = req.body + + const data = { + BusinessID, + Description, + cAddress1, + TransCCustom1, + cTel1 + } + + try { + const userId = req.user_id + const thisTime = Date.now() + // check user id and agent status + const user = await User.findById(userId) + if (!user) return res406(res, 'اطلاعات کاربری صحیح نمیباشد') + if (user.isAgent && agent !== 'main') + return res406(res, 'نمایندگان فقط میتوانند به خود شرکت آسان سرویس فرم ارسال نمایند') + + function getMessageTxt(transNumber) { + const msgArray = [ + 'مشتری گرامی', + user.first_name + ' ' + user.last_name, + '\n', + 'کالاهای شما با شماره پذیرش موقت', + transNumber, + 'در سایت آسان سرویس ثبت گردید. کالاهای ارسالی شما پس از دریافت توسط واحد گارانتی، بررسی شده و به شما اطلاع رسانی خواهد شد.', + '\n', + phrases.signature + ] + return msgArray.join(' ') + } + + // save transaction + if (agent === 'main') { + const ArpaResponse = await saveTransactionToArpa(data, items, db_name) + await TransactionDraft.findByIdAndRemove(draftId) + SMS([user.mobile_number], getMessageTxt(ArpaResponse)) + notifyUser('updateDraftsCount', userId) + return res.json({ + host: 'ar', + transNumber: ArpaResponse + }) + } else { + // get transactions count + const transactions = await Transaction.find() + // fill specific fields + data.user_id = userId + data.agent_id = agent + data.db_name = db_name + data.items = items + data.TempReceiptTransDate = ArpaDateFormat(thisTime) + data.TempReceiptTransNumber = 'AG' + transactions.length.toString().padStart(4, '0') + data.statusHistory = [{ status: 'saved', date: thisTime }] + const transaction = new Transaction(data) + await transaction.save() + await TransactionDraft.findByIdAndRemove(draftId) + SMS([user.mobile_number], getMessageTxt(transaction.TempReceiptTransNumber)) + notifyUser('updateDraftsCount', userId) + notifyAgent('newAgentInbox', agent) + notifyAgent('updateAgentInbox', agent) + return res.json({ + host: 'as', + transNumber: transaction.TempReceiptTransNumber + }) + } + } catch (e) { + // console.log('there is an error in (Post Transaction to Arpa)', e) + return res500(res, e) + } + } +] + +module.exports.get_all_transactions_for_user = [ + (req, res) => { + const { user_id } = req + Transaction.find({ user_id }, (err, data) => { + if (err) return res500(res, err) + else return res.json(data) + }) + } +] + +module.exports.get_one_transaction_for_user = [ + (req, res) => { + const { user_id } = req + Transaction.findOne({ user_id, TempReceiptTransNumber: req.params?.ttn }) + .populate('agent_id', 'full_name province_name city_name address postal_code tel_number mobile_number') + .exec((err, data) => { + if (err || !data) return res404(res, err) + else return res.json(data) + }) + } +] + +/// ///////////////// agents +module.exports.get_all_transactions_for_agent = [ + async (req, res) => { + try { + const { agent_id } = req + const transactions = await Transaction.find({ agent_id }) + return res.json(transactions) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.get_one_transaction_for_agent = [ + async (req, res) => { + try { + const { agent_id } = req + const transaction = await Transaction.findOne({ agent_id, _id: req.params?.id }) + if (!transaction) return res404(res, 'invalid transaction id') + if (!transaction.seen) { + transaction.seen = true + await transaction.save() + notifyAgent('updateAgentInbox', agent_id) + } + return res.json(transaction) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.change_transaction_status_by_agent = [ + [ + body('status') + .notEmpty() + .withMessage('status is required') + .bail() + .custom((value, { req }) => { + const acceptablvalues = ['recieved', 'ongoing', 'waiting', 'delivered'] + if (!acceptablvalues.includes(value)) return Promise.reject(new Error('invalid status')) + else return true + }) + ], + checkValidations(validationResult), + async (req, res) => { + const { status, deliveryCode } = req.body + const { agent_id } = req + const thisTime = Date.now() + + try { + const transaction = await Transaction.findOne({ agent_id, _id: req.params?.id }) + if (!transaction) return res404(res, 'invalid transaction id') + + // status order check + const errMsg = 'invalid status for this time' + + if (transaction.status === 'saved' && status !== 'recieved') return res406(res, errMsg) + if (transaction.status === 'recieved' && status !== 'ongoing') return res406(res, errMsg) + + // avoid repeated status + if (transaction.status === 'waiting' && status === 'waiting') return res406(res, errMsg) + if (transaction.status === 'delivered' && status === 'delivered') return res406(res, errMsg) + + // save status + transaction.status = status + transaction.statusHistory.push({ status, date: thisTime }) + + let smsMessage + // different status methods + if (status === 'recieved') { + const receiptTN = transaction.TempReceiptTransNumber + 'R' + generateRandomDigits(2) + transaction.ItemReceptionTransNumber = receiptTN + transaction.ItemReceptionTransDate = ArpaDateFormat(thisTime) + + smsMessage = [ + ' کاربر گرامی فرم گارانتی شما با کد پذیرش موقت ', + transaction.TempReceiptTransNumber, + ' در تاریخ ', + SmsDateFormat(thisTime), + ' تحویل دفتر نمایندگی و پذیرش شد. ', + '\n', + ' کد پذیرش: ', + receiptTN, + '\n', + phrases.signature + ] + } + + if (status === 'ongoing') { + smsMessage = [ + ' کاربر گرامی فرم گارانتی شما با کد پذیرش ', + transaction.ItemReceptionTransNumber, + ' در تاریخ ', + SmsDateFormat(thisTime), + ' در دست اقدام قرار گرفت. ', + '\n', + phrases.signature + ] + } + + if (status === 'waiting') { + smsMessage = [ + ' کاربر گرامی فرم گارانتی شما با کد پذیرش ', + transaction.ItemReceptionTransNumber, + ' در تاریخ ', + SmsDateFormat(thisTime), + ' در انتظار قطعه میباشد. ', + '\n', + phrases.signature + ] + } + + if (status === 'delivered') { + if (deliveryCode) transaction.deliveryCode = deliveryCode + + function deliveryCodePhrase() { + if (deliveryCode.length) return `کد پیگیری مرسوله: ${deliveryCode}` + '\n' + else return '' + } + + smsMessage = [ + ' کاربر گرامی فرم گارانتی شما با کد پذیرش ', + transaction.ItemReceptionTransNumber, + ' در تاریخ ', + SmsDateFormat(thisTime), + ' تحویل شد. ', + '\n', + deliveryCodePhrase(), + phrases.signature + ] + + const surveyData = { + code: transaction.ItemReceptionTransNumber, + user: transaction.user_id, + timeAdded: Date.now() + } + const surveyCheck = new SurveyCheck(surveyData) + surveyCheck.save(err => { + if (err) console.log('surveyCheck save error', err) + }) + } + + await SMS([transaction.cTel1], smsMessage.join('')) + await transaction.save() + + return res.json({ message: _faSr.response.success_save }) + } catch (e) { + return res500(res, e) + } + } +] + +/// ///////////////// admin +module.exports.get_all_agents_inbox_for_admin = [ + async (req, res) => { + try { + const transactions = await Transaction.find() + .populate('agent_id', 'agent_code full_name') + .populate('user_id', 'province_id province_name city_id city_name') + return res.json(transactions) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.get_one_agent_inbox_for_admin = [ + async (req, res) => { + try { + const agent_id = req.params?.agent_id + const transactions = await Transaction.find({ agent_id }) + return res.json(transactions) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.get_one_transaction_for_admin = [ + (req, res) => { + Transaction.findById(req.params?.id) + .populate( + 'agent_id', + 'full_name province_name city_name address postal_code tel_number fax_number mobile_number store_name agent_code' + ) + .populate( + 'user_id', + 'first_name last_name province_name city_name panatech_businessCode verity_businessCode national_code mobile_number address postal_code' + ) + .exec((err, data) => { + if (err || !data) return res404(res, err) + else return res.json(data) + }) + } +] diff --git a/server/controllers/transactionDraftsController.js b/server/controllers/transactionDraftsController.js new file mode 100644 index 0000000..8328435 --- /dev/null +++ b/server/controllers/transactionDraftsController.js @@ -0,0 +1,168 @@ +const { body, validationResult } = require('express-validator') +const TransactionDraft = require('../models/TransactionDraft') +const { VerityStockAreaId, PanatechStockAreaId } = require('../_env') +const { res404, res406, res500, checkValidations } = require('../plugins/controllersHelperFunctions') +const { notifyUser } = require('../WebSocket/controllers/user_EventsController') + +module.exports.add_transaction_draft = [ + [ + body('db_name') + .notEmpty() + .withMessage('db param is required') + .bail() + .custom((value, { req }) => { + if (value === 'verity' || value === 'panatech') return Promise.resolve() + else return Promise.reject(new Error('incorrect db value')) + }) + ], + checkValidations(validationResult), + (req, res) => { + const { user_id } = req + if (!user_id) return res404(res, 'invalid userID') + const { db_name, description } = req.body + const data = { user_id, db_name, description } + + const draft = new TransactionDraft(data) + draft.save((err, data) => { + if (err) return res500(res, err) + notifyUser('updateDraftsCount', user_id) + return res.json({ draftId: data._id }) + }) + } +] + +module.exports.update_draft_description = [ + (req, res) => { + const draftId = req.params?.draftId + const { description } = req.body + TransactionDraft.findByIdAndUpdate(draftId, { description }, (err, oldData) => { + if (err || !oldData) return res404(res, err) + else return res.json({ message: 'توضیحات فرم با موفقیت بروزرسانی شد' }) + }) + } +] + +module.exports.get_user_drafts = [ + async (req, res) => { + try { + const { user_id } = req + const drafts = await TransactionDraft.find({ user_id }) + return res.json(drafts) + } catch (e) { + return res.status(500).json({ message: e }) + } + } +] + +module.exports.get_one_user_draft = [ + (req, res) => { + TransactionDraft.findById(req.params?.draftId, (err, data) => { + if (err || !data) return res404(res, err) + else return res.json(data) + }) + } +] + +module.exports.add_stuff_to_draft = [ + async (req, res) => { + const userId = req.user_id + const draftId = req.params?.draftId + const { ItemID, ItemCode, MjQty, SerialNo1, GStartDate, GEndDate } = req.body + + try { + // custom validations + if (!Number(MjQty) || !Number.isInteger(Number(MjQty))) return res406(res, 'تعداد باید از جنس عدد صحیح باشد') + + if (!ItemID?.length || !ItemCode?.length) return res406(res, 'کالا را انتخاب کنید') + + if (Number(MjQty) < 1) return res406(res, 'تعداد نباید کمتر از 1 باشد') + + if (SerialNo1?.length && Number(MjQty) !== 1) + return res406(res, 'تعداد کالاهایی که شماره سریال اختصاصی دارند نمیتواند بیشتر از یکی باشد') + + const draft = await TransactionDraft.findOne({ user_id: userId, _id: draftId }) + + if (!draft) return res404(res, 'this transaction does not exist or not belongs to you') + + // check if item already exists + for (let i = 0; i < draft.items.length; i++) { + if ((await draft.items[i].SerialNo1) !== '') { + if ((await draft.items[i].SerialNo1) === SerialNo1) return res406(res, 'این شماره سریال قبلا افزوده شده') + } else { + // eslint-disable-next-line no-lonely-if + if ((await draft.items[i].ItemID) === ItemID) { + draft.items[i].MjQty = Number(draft.items[i].MjQty) + Number(MjQty) + draft.markModified('items') + await draft.save() + return res.json({ message: 'این کالا به تعداد کالای مشابه داخل لیست اضافه گردید' }) + } + } + } + + function stockAreaID(db) { + if (db === 'verity') return VerityStockAreaId + else if (db === 'panatech') return PanatechStockAreaId + else return null + } + + const item = { + ItemID, + ItemCode, + MjQty: Number(MjQty), + SerialNo1, + GStartDate, + GEndDate, + StockAreaID: stockAreaID(draft.db_name), + TransLineID: 'null', + Price: 0, + DiscountAmount: 0, + DiscountPercent: 0, + TaxAmount: 0, + TollAmount: 0 + } + + draft.items.push(item) + await draft.save() + return res.json({ message: 'کالا با موفقیت به فرم افزوده شد' }) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.remove_stuff_from_draft = [ + async (req, res) => { + const draftId = req.params?.draftId + const { user_id } = req + const { itemId, itemSerial } = req.body + + try { + const draft = await TransactionDraft.findOne({ user_id, _id: draftId }) + if (!draft) return res404(res, 'this transaction does not exist or not belongs to you') + draft.items = await draft.items.filter(item => { + if (itemSerial === '') { + return item.ItemID !== itemId + } else { + return item.SerialNo1 !== itemSerial + } + }) + draft.markModified('items') + await draft.save() + return res.json({ message: 'آیتم با موفقیت از لیست حذف شد' }) + } catch (e) { + return res500(res, e) + } + } +] + +module.exports.remove_draft = [ + (req, res) => { + const draftId = req.params?.draftId + + TransactionDraft.findByIdAndDelete(draftId, (err, data) => { + if (err || !data) return res404(res, err) + notifyUser('updateDraftsCount', data.user_id) + return res.json({ message: 'پیشنویس با موفقیت حذف شد' }) + }) + } +] diff --git a/server/controllers/userController.js b/server/controllers/userController.js new file mode 100644 index 0000000..c8679dc --- /dev/null +++ b/server/controllers/userController.js @@ -0,0 +1,1219 @@ +const crypto = require('crypto') +const nodemailer = require('nodemailer') +const bcrypt = require('bcryptjs') +const { body, validationResult } = require('express-validator') +const jwt = require('jsonwebtoken') +const User = require('../models/User') +const { secretKey } = require('../authentication') +const permissions = require('../plugins/permissions') +const { _sr } = require('../plugins/serverResponses') +const { SMS } = require('../plugins/SMS_Module') +const { notifyAdmin } = require('../WebSocket/controllers/admin_EventsController') +const { saveUserToArpa, updateUserOnArpa } = require('../ArpaWebservice.js') +const { + res404, + res500, + checkValidations, + removeWhiteSpaces, + checkMobileNumber, + normalizeMobileNumber, + nameOptimizer, + checkNationalCode, + isPersian, + isPersianWithDigits, + generateRandomDigits +} = require('../plugins/controllersHelperFunctions') +const _faSr = _sr.fa + +/// ///////////////////////////////////////////////////////////////// verify account functions +function sendConfirmationEmail(userId) { + return new Promise(async (resolve, reject) => { + try { + const user = await User.findById(userId) + if (!user) throw new Error('invalid id') + + const emailKey = generateRandomDigits(6) + user.emailConfirmationKey = emailKey + await user.save() + + /// //// email configs + // const hostURL = 'www.asan-service.com' + const transporter = nodemailer.createTransport({ + host: 'mail.asan-service.com', + port: 587, + secure: false, // true for 465, false for other ports + auth: { + user: 'confirmation@asan-service.com', + pass: 'N7xNFZp*L_X{' + }, + tls: { + rejectUnauthorized: false + } + }) + + const emailHTMLTemplate = ` +
+
+

+ این ایمیل در وبسایت + آسان سرویس + ثبت شده است. +

+

کد تایید آدرس ایمیل شما:

+
+

+ ${emailKey} +

+
+
+
+ ` + + // send mail with defined transport object + await transporter.sendMail({ + from: '"AsanService" ', // sender address + to: user.email, // list of receivers + subject: 'تایید ایمیل', + text: emailHTMLTemplate, + html: emailHTMLTemplate + }) + + resolve() + } catch (err) { + reject(err) + } + }) +} + +function sendConfirmationSMS(userId) { + return new Promise(async (resolve, reject) => { + try { + const user = await User.findById(userId) + if (!user) throw new Error('invalid id') + + const mobileKey = generateRandomDigits(6) + user.mobileConfirmationKey = mobileKey + await user.save() + + const smsMsg = [ + 'این شماره در وبسایت آسان سرویس جهت ارائه خدمات گارانتی ثبت گردیده.', + ' کد تایید شماره همراه: ', + mobileKey + ] + + await SMS([user.mobile_number], smsMsg.join('')) + + resolve() + } catch (err) { + reject(err) + } + }) +} + +/// //////////////////////////////////////////////////////////////////// admin accounts +module.exports.register_admin = [ + [ + body('first_name') + .notEmpty() + .withMessage(_faSr.required.first_name) + .bail() + .isLength({ min: 2 }) + .withMessage(_faSr.min_char.min2), + + body('last_name') + .notEmpty() + .withMessage(_faSr.required.last_name) + .bail() + .isLength({ min: 2 }) + .withMessage(_faSr.min_char.min2), + + body('username') + .notEmpty() + .withMessage(_faSr.required.username) + .bail() + .isLength({ min: 4 }) + .withMessage(_faSr.min_char.min4) + .custom((value, { req }) => { + return User.findOne({ username: value }).then(admin => { + if (admin && admin.username === value) return Promise.reject(_faSr.duplicated.username) + else return true + }) + }), + + body('password') + .isLength({ min: 4 }) + .withMessage(_faSr.min_char.min4) + .custom((value, { req }) => { + if (value === req.body.password_confirmation) return true + else return Promise.reject(_faSr.response.passwords_not_match) + }) + ], + checkValidations(validationResult), + async (req, res) => { + try { + const { first_name, last_name, username, permissions } = req.body + + const data = { first_name, last_name, username, permissions } + data._creator = req.user_id + data.confirmed = true + data.scope = ['admin'] + + const salt = await bcrypt.genSalt(10) + const hash = await bcrypt.hash(req.body.password, salt) + data.password = hash + + const admin = new User(data) + await admin.save() + return res.json({ message: _faSr.response.success_save }) + } catch (err) { + return res500(res, err) + } + } +] + +module.exports.update_admin = [ + [ + body('first_name') + .notEmpty() + .withMessage(_faSr.required.first_name) + .bail() + .isLength({ min: 2 }) + .withMessage(_faSr.min_char.min2), + + body('last_name') + .notEmpty() + .withMessage(_faSr.required.last_name) + .bail() + .isLength({ min: 2 }) + .withMessage(_faSr.min_char.min2), + + body('username') + .notEmpty() + .withMessage(_faSr.required.username) + .bail() + .isLength({ min: 4 }) + .withMessage(_faSr.min_char.min4) + .custom((value, { req }) => { + return User.findOne({ username: value }).then(admin => { + if (admin && admin.username === value && admin._id.toString() !== req.params.id) + return Promise.reject(_faSr.duplicated.username) + else return true + }) + }) + ], + checkValidations(validationResult), + (req, res) => { + const { username, first_name, last_name, permissions } = req.body + + const data = { username, first_name, last_name, permissions } + data._creator = req.user_id + + User.findByIdAndUpdate(req.params.id, data, (err, oldData) => { + if (err || !oldData) return res.status(404).json({ message: _faSr.not_found.user_id }) + return res.json({ message: _faSr.response.success_activation }) + }) + } +] + +module.exports.get_admins = [ + (req, res) => { + const regex = /admin/ + User.find({ scope: regex, private: false }, (err, admins) => { + if (err) return res500(res, err) + return res.json(admins) + }) + } +] + +module.exports.get_one_admin = [ + (req, res) => { + User.findById(req.params.id) + .select('first_name last_name username permissions _creator') + .populate('_creator', 'first_name last_name') + .exec((err, admin) => { + if (err || !admin) return res.status(404).json({ message: _faSr.not_found.user_id }) + else return res.json(admin) + }) + } +] + +module.exports.delete_admin = [ + (req, res) => { + User.findByIdAndDelete(req.params.id, (err, user) => { + if (err || !user) return res.status(404).json({ message: _faSr.not_found.user_id }) + else return res.json({ message: _faSr.response.success_save }) + }) + } +] + +module.exports.permissions = [ + (req, res) => { + return res.json(permissions) + } +] + +/// //////////////////////////////////////////////////////////////////// user accounts + +module.exports.register_user = [ + [ + body('first_name') + .notEmpty() + .withMessage(_faSr.required.first_name) + .bail() + .isLength({ min: 2 }) + .withMessage(_faSr.min_char.min2) + .bail() + .custom((value, { req }) => { + if (removeWhiteSpaces(value).length < 2) return Promise.reject(_faSr.min_char.min2) + if (!isPersian(value)) return Promise.reject(new Error('لطفا با حروف فارسی تایپ کنید')) + else return true + }), + + body('last_name') + .notEmpty() + .withMessage(_faSr.required.first_name) + .bail() + .isLength({ min: 2 }) + .withMessage(_faSr.min_char.min2) + .bail() + .custom((value, { req }) => { + if (removeWhiteSpaces(value).length < 2) return Promise.reject(_faSr.min_char.min2) + if (!isPersian(value)) return Promise.reject(new Error('لطفا با حروف فارسی تایپ کنید')) + else return true + }), + + body('national_code') + .notEmpty() + .withMessage(_faSr.required.national_code) + .bail() + .custom((value, { req }) => { + if (checkNationalCode(value)) return true + else return Promise.reject(_faSr.format.national_code) + }) + .bail() + .custom((value, { req }) => { + const nationalCode = value.trim() + return User.findOne({ national_code: nationalCode }).then(user => { + if (user && user.national_code === nationalCode) + return Promise.reject(new Error('کاربر با این کد ملی از قبل وجود دارد')) + else return true + }) + }), + + body('province_id').notEmpty().withMessage(_faSr.required.province), + + body('city_id').notEmpty().withMessage(_faSr.required.city), + + body('address') + .notEmpty() + .withMessage(_faSr.required.address) + .bail() + .custom((value, { req }) => { + if (!isPersianWithDigits(value)) return Promise.reject(new Error('لطفا با حروف فارسی تایپ کنید')) + else return true + }), + + body('postal_code') + .notEmpty() + .withMessage(_faSr.required.postal_code) + .bail() + .isNumeric() + .withMessage(_faSr.format.number), + + body('email') + .notEmpty() + .withMessage(_faSr.required.email) + .bail() + .isEmail() + .withMessage(_faSr.format.email) + .bail() + .custom((value, { req }) => { + const email = value.trim().toLowerCase() + return User.findOne({ email }).then(user => { + if (user && user.email === email) return Promise.reject(_faSr.duplicated.email) + else return true + }) + }), + + body('tel_number') + .notEmpty() + .withMessage(_faSr.required.phone_number) + .bail() + .isNumeric() + .withMessage(_faSr.format.phone_number), + + body('mobile_number') + .notEmpty() + .withMessage(_faSr.required.phone_number) + .bail() + .custom((value, { req }) => { + const mobileNStatus = checkMobileNumber(value) + if (!mobileNStatus) return Promise.reject(_faSr.format.phone_number) + else return Promise.resolve() + }) + .bail() + .custom((value, { req }) => { + const mobileNumber = value.trim() + return User.findOne({ mobile_number: mobileNumber }).then(user => { + if (user && user.mobile_number === mobileNumber) + return Promise.reject(new Error('کاربر با این شماره موبایل از قبل وجود دارد')) + else return true + }) + }), + + body('password') + .isLength({ min: 4 }) + .withMessage(_faSr.min_char.min4) + .custom((value, { req }) => { + if (value === req.body.password_confirmation) return true + else return Promise.reject(_faSr.response.passwords_not_match) + }) + ], + checkValidations(validationResult), + async (req, res) => { + try { + const { + first_name, + last_name, + national_code, + province_id, + province_name, + city_id, + city_name, + address, + postal_code, + tel_number, + mobile_number, + email, + store_name, + password + } = req.body + + const data = { + last_name, + province_id, + province_name, + city_id, + city_name, + address, + postal_code, + tel_number, + store_name + } + data.first_name = nameOptimizer(first_name) + data.national_code = national_code.trim() + data.mobile_number = normalizeMobileNumber(mobile_number) + data.email = email.trim().toLowerCase() + + // hash user password and done + const salt = await bcrypt.genSalt(10) + const hash = await bcrypt.hash(password, salt) + data.password = hash + + const user = new User(data) + await user.save() + await sendConfirmationEmail(user._id) + await sendConfirmationSMS(user._id) + return res.json({ message: _faSr.response.success_save }) + } catch (err) { + const registerFailurMsg = 'مشکلی در ثبت نام پیش آمده، لطفا مجددا تلاش کنید' + res500(res, registerFailurMsg) + } + } +] + +module.exports.update_user = [ + [ + body('first_name') + .notEmpty() + .withMessage(_faSr.required.first_name) + .bail() + .isLength({ min: 2 }) + .withMessage(_faSr.min_char.min2) + .bail() + .custom((value, { req }) => { + if (removeWhiteSpaces(value).length < 2) return Promise.reject(_faSr.min_char.min2) + if (!isPersian(value)) return Promise.reject(new Error('لطفا با حروف فارسی تایپ کنید')) + else return true + }), + + body('last_name') + .notEmpty() + .withMessage(_faSr.required.first_name) + .bail() + .isLength({ min: 2 }) + .withMessage(_faSr.min_char.min2) + .bail() + .custom((value, { req }) => { + if (removeWhiteSpaces(value).length < 2) return Promise.reject(_faSr.min_char.min2) + if (!isPersian(value)) return Promise.reject(new Error('لطفا با حروف فارسی تایپ کنید')) + else return true + }), + + body('national_code') + .notEmpty() + .withMessage(_faSr.required.national_code) + .bail() + .custom((value, { req }) => { + if (checkNationalCode(value)) return true + else return Promise.reject(_faSr.format.national_code) + }) + .custom((value, { req }) => { + const nationalCode = value.trim() + return User.findOne({ national_code: nationalCode }).then(user => { + if (user && user.national_code === nationalCode && user._id.toString() !== req.body._id) + return Promise.reject(new Error('کاربر با این کد ملی از قبل وجود دارد')) + else return true + }) + }), + + body('province_id').notEmpty().withMessage(_faSr.required.province), + + body('city_id').notEmpty().withMessage(_faSr.required.city), + + body('address') + .notEmpty() + .withMessage(_faSr.required.address) + .bail() + .custom((value, { req }) => { + if (!isPersianWithDigits(value)) return Promise.reject(new Error('لطفا با حروف فارسی تایپ کنید')) + else return true + }), + + body('postal_code') + .notEmpty() + .withMessage(_faSr.required.postal_code) + .bail() + .isNumeric() + .withMessage(_faSr.format.number), + + body('tel_number') + .notEmpty() + .withMessage(_faSr.required.phone_number) + .bail() + .isNumeric() + .withMessage(_faSr.format.phone_number), + + body('mobile_number') + .notEmpty() + .withMessage(_faSr.required.phone_number) + .bail() + .custom((value, { req }) => { + const mobileNStatus = checkMobileNumber(value) + if (!mobileNStatus) return Promise.reject(_faSr.format.phone_number) + else return Promise.resolve() + }) + .bail() + .custom((value, { req }) => { + const mobileNumber = value.trim() + return User.findOne({ mobile_number: mobileNumber }).then(user => { + if (user && user.mobile_number === mobileNumber && user._id.toString() !== req.body._id) + return Promise.reject(new Error('کاربر با این شماره موبایل از قبل وجود دارد')) + else return true + }) + }), + + body('email') + .notEmpty() + .withMessage(_faSr.required.email) + .bail() + .isEmail() + .withMessage(_faSr.format.email) + .bail() + .custom((value, { req }) => { + const email = value.trim().toLowerCase() + return User.findOne({ email }).then(user => { + if (user && user.email === email && user._id.toString() !== req.body._id) + return Promise.reject(_faSr.duplicated.email) + else return true + }) + }) + ], + checkValidations(validationResult), + async (req, res) => { + const { + first_name, + last_name, + national_code, + province_id, + province_name, + city_id, + city_name, + address, + postal_code, + tel_number, + mobile_number, + email, + store_name + } = req.body + + const MongoData = { + last_name, + province_id, + province_name, + city_id, + city_name, + address, + postal_code, + tel_number, + store_name + } + MongoData.first_name = nameOptimizer(first_name) + MongoData.national_code = national_code.trim() + MongoData.mobile_number = normalizeMobileNumber(mobile_number) + MongoData.email = email.trim().toLowerCase() + + try { + const { user_id } = req + const user = await User.findById(user_id) + if (!user) return res404(res, _faSr.not_found.user_id) + + // check if need to ferify email or mobile + const newEmail = user.email !== MongoData.email + const newMobile = user.mobile_number !== MongoData.mobile_number + if (newEmail) user.email_confirmed = false + if (newMobile) user.mobile_confirmed = false + + // save new info to arpa + await updateUserOnArpa(MongoData, user.verity_businessID, 'verity') + await updateUserOnArpa(MongoData, user.panatech_businessID, 'panatech') + + // save new info to user + user.first_name = MongoData.first_name + user.last_name = MongoData.last_name + user.national_code = MongoData.national_code + user.province_id = MongoData.province_id + user.province_name = MongoData.province_name + user.city_id = MongoData.city_id + user.city_name = MongoData.city_name + user.address = MongoData.address + user.postal_code = MongoData.postal_code + user.tel_number = MongoData.tel_number + user.store_name = MongoData.store_name + user.mobile_number = MongoData.mobile_number + user.email = MongoData.email + + await user.save() + + // send confirmation key after user saved + if (newEmail) await sendConfirmationEmail(user_id) + if (newMobile) await sendConfirmationSMS(user_id) + + return res.json({ message: _faSr.response.success_save }) + } catch (e) { + console.log('Arpa Error during update user --', e) + return res500(res, _faSr.response.problem) + } + } +] + +module.exports.update_user_password = [ + [ + body('password') + .isLength({ min: 4 }) + .withMessage(_faSr.min_char.min4) + .custom((value, { req }) => { + if (value === req.body.password_confirmation) return true + else return Promise.reject(_faSr.response.passwords_not_match) + }) + ], + checkValidations(validationResult), + async (req, res) => { + // hash user password and done + try { + const { _id, password } = req.body + const { user_id } = req + const salt = await bcrypt.genSalt(10) + const hash = await bcrypt.hash(password, salt) + const user = await User.findById(_id) + if (!user) throw new Error(_faSr.not_found.user_id) + user.password = hash + if (user.scope.includes('admin')) user._creator = user_id + await user.save() + return res.json({ message: _faSr.response.success_save }) + } catch (err) { + if (err) return res500(res, err) + } + } +] + +/// // reset user password + +module.exports.generate_reset_user_password_link = [ + [ + body('type') + .notEmpty() + .withMessage('choose type') + .bail() + .custom((value, { req }) => { + if (value === 'email' || value === 'mobile') return Promise.resolve() + else return Promise.reject(new Error('invalid type')) + }), + + body('email') + .if((value, { req }) => req.body.type === 'email') + .notEmpty() + .withMessage(_faSr.required.email) + .bail() + .isEmail() + .withMessage(_faSr.format.email), + + body('mobile') + .if((value, { req }) => req.body.type === 'mobile') + .notEmpty() + .withMessage(_faSr.required.phone_number) + .bail() + .custom((value, { req }) => { + const mobileNStatus = checkMobileNumber(value) + if (!mobileNStatus) return Promise.reject(_faSr.format.phone_number) + else return Promise.resolve() + }) + ], + checkValidations(validationResult), + async (req, res) => { + try { + const { type, email, mobile } = req.body + const query = {} + if (type === 'email') query.email = email.toLowerCase().trim() + if (type === 'mobile') query.mobile_number = normalizeMobileNumber(mobile) + + const user = await User.findOne(query) + if (!user) throw new Error('err') + + const resetPassKey = await crypto.randomBytes(20).toString('hex') + user.resetPassToken = resetPassKey + const hostURL = 'www.asan-service.com' + + if (type === 'email') { + const transporter = nodemailer.createTransport({ + host: 'mail.asan-service.com', + port: 587, + secure: false, // true for 465, false for other ports + auth: { + user: 'resetpassword@asan-service.com', + pass: '3e9atXQV+7a&' + }, + tls: { + rejectUnauthorized: false + } + }) + + const emailHTMLTemplate = ` +
+
+

برای بازیابی کلمه عبور حساب کاربری خود روی لینک زیر کلیک کنید.

+
+ بازیابی کلمه عبور +

+ چنانچه قادر به کلیلک روی لینک بالا نیستید آدرس زیر را در مرورگر خود باز کنید. +

+

https://${hostURL}/auth/resetpass-newpass/${resetPassKey}

+
+
+
+ ` + + // send mail with defined transport object + await transporter.sendMail({ + from: '"AsanService" ', // sender address + to: email, // list of receivers + subject: 'لینک بازیابی کلمه عبور', + text: emailHTMLTemplate, + html: emailHTMLTemplate + }) + } else { + const smsMsg = [ + ' لینک بازیابی کلمه عبور آسان سرویس: ', + `https://${hostURL}/auth/resetpass-newpass/${resetPassKey}` + ] + await SMS([user.mobile_number], smsMsg.join('')) + } + + await user.save() + let responseMsg = 'لینک بازیابی برای شما ارسال شد' + if (type === 'email') + responseMsg = + 'لینک بازیابی برای شما ارسال شد، چنانچه قادر به مشاهده ایمیل در صندوق ورودی خود نیستید پوشه spam را چک کنید.' + return res.json({ message: responseMsg }) + } catch (err) { + let errMsg = _faSr.not_found.user_id + if (err.code === 'EENVELOPE') errMsg = 'مشکلی در ارسال ایمیل پیش آمد لطفا دوباره تلاش کنید' + return res404(res, errMsg) + } + } +] + +module.exports.reset_password_using_token = [ + [ + body('password') + .isLength({ min: 4 }) + .withMessage(_faSr.min_char.min4) + .custom((value, { req }) => { + if (value === req.body.password_confirmation) return true + else return Promise.reject(_faSr.response.passwords_not_match) + }) + ], + checkValidations(validationResult), + async (req, res) => { + try { + const { token, password } = req.body + if (!token) throw new Error('err') + const user = await User.findOne({ resetPassToken: token }) + if (!user) throw new Error('err') + const salt = await bcrypt.genSalt(10) + const hash = await bcrypt.hash(password, salt) + user.password = hash + user.token = null + user.resetPassToken = undefined + await user.save() + return res.json({ message: _faSr.response.success_save }) + } catch (err) { + return res404(res, _faSr.response.expired_reset_link) + } + } +] + +/// // confirm email +module.exports.changeEmail = [ + [ + body('email') + .notEmpty() + .withMessage(_faSr.required.email) + .bail() + .isEmail() + .withMessage(_faSr.format.email) + .bail() + .custom((value, { req }) => { + const email = value.toLowerCase() + return User.findOne({ email }).then(user => { + if (user && user.email === email) return Promise.reject(_faSr.duplicated.email) + else return true + }) + }) + ], + checkValidations(validationResult), + async (req, res) => { + try { + const { user_id } = req + const { email } = req.body + const user = await User.findById(user_id) + if (!user) throw new Error('invalid id') + user.email = email + user.email_confirmed = false + await user.save() + await sendConfirmationEmail(user_id) + return res.json({ message: 'کد تایید برای شما ارسال شد' }) + } catch (err) { + return res500(res, err) + } + } +] + +module.exports.resendEmailConfirmation = [ + async (req, res) => { + try { + const { user_id } = req + await sendConfirmationEmail(user_id) + return res.json({ message: 'کد تایید برای شما ارسال شد' }) + } catch (err) { + return res500(res, err) + } + } +] + +module.exports.confirmEmail = [ + async (req, res) => { + try { + const { user_id } = req + const { verificationKey } = req.body + const user = await User.findById(user_id) + if (!user) throw new Error('err') + + if (verificationKey?.trim() !== user.emailConfirmationKey) throw new Error('404') + + if (!user.confirmed) { + user.confirmed = true + + const verityID = await saveUserToArpa(user, 'verity') + const panatechID = await saveUserToArpa(user, 'panatech') + + user.verity_businessID = verityID.businessID + user.verity_businessCode = verityID.businessCode + + user.panatech_businessID = panatechID.businessID + user.panatech_businessCode = panatechID.businessCode + } + + // save new info to arpa + await updateUserOnArpa(user, user.verity_businessID, 'verity') + await updateUserOnArpa(user, user.panatech_businessID, 'panatech') + + // update user info in mongoDB + user.email_confirmed = true + user.emailConfirmationKey = undefined + await user.save() + + return res.json({ message: 'ایمل شما تایید شد.' }) + } catch (e) { + if (e === '404') return res404(res, 'کد تایید صحیح نمیباشد.') + else return res500(res, 'مشکلی در تایید ایمیل پیش آمده، لطفا دوباره تلاش کنید') + } + } +] + +/// // confirm mobile +module.exports.changeMobile = [ + [ + body('mobile') + .notEmpty() + .withMessage(_faSr.required.phone_number) + .bail() + .custom((value, { req }) => { + const mobileNStatus = checkMobileNumber(value) + if (!mobileNStatus) return Promise.reject(_faSr.format.phone_number) + else return Promise.resolve() + }) + .bail() + .custom((value, { req }) => { + return User.findOne({ mobile_number: value }).then(user => { + if (user && user.mobile_number === value) + return Promise.reject(new Error('کاربر با این شماره موبایل از قبل وجود دارد')) + else return true + }) + }) + ], + checkValidations(validationResult), + async (req, res) => { + try { + const { user_id } = req + const { mobile } = req.body + const user = await User.findById(user_id) + if (!user) throw new Error('invalid id') + user.mobile_number = mobile + user.mobile_confirmed = false + await user.save() + await sendConfirmationSMS(user_id) + return res.json({ message: 'کد تایید برای شما پیامک شد' }) + } catch (err) { + return res500(res, err) + } + } +] + +module.exports.resendMobileConfirmation = [ + async (req, res) => { + try { + const { user_id } = req + await sendConfirmationSMS(user_id) + return res.json({ message: 'کد تایید برای شما پیامک شد' }) + } catch (err) { + return res500(res, err) + } + } +] + +module.exports.confirmMobile = [ + async (req, res) => { + try { + const { user_id } = req + const { verificationKey } = req.body + const user = await User.findById(user_id) + if (!user) throw new Error('err') + + if (verificationKey?.trim() !== user.mobileConfirmationKey) throw new Error('404') + + if (!user.confirmed) { + user.confirmed = true + + const verityID = await saveUserToArpa(user, 'verity') + const panatechID = await saveUserToArpa(user, 'panatech') + + user.verity_businessID = verityID.businessID + user.verity_businessCode = verityID.businessCode + + user.panatech_businessID = panatechID.businessID + user.panatech_businessCode = panatechID.businessCode + } + + // save new info to arpa + await updateUserOnArpa(user, user.verity_businessID, 'verity') + await updateUserOnArpa(user, user.panatech_businessID, 'panatech') + + // update user info in mongoDB + user.mobile_confirmed = true + user.mobileConfirmationKey = undefined + await user.save() + + return res.json({ message: 'شماره شما تایید شد.' }) + } catch (e) { + if (e === '404') return res404(res, 'کد تایید صحیح نمیباشد.') + else return res500(res, 'مشکلی در تایید شماره پیش آمده، لطفا دوباره تلاش کنید') + } + } +] + +/// //////////////////////////////////////////////////////////////////// user managemnet by admin +module.exports.get_all_users_for_admin = [ + (req, res) => { + User.find( + { + scope: ['user'], + confirmed: true, + verity_businessID: { $ne: null }, + verity_businessCode: { $ne: null } + }, + (err, data) => { + if (err) return res500(res, err) + return res.json(data) + } + ) + } +] + +module.exports.get_one_user_for_admin = [ + (req, res) => { + User.findById(req.params.id, (err, user) => { + if (err || !user) return res404(res, err) + if (!user.seenByAdmin) { + user.seenByAdmin = true + user.save(err => { + if (err) console.log('get one user for admin - save seenByAdmin error :', err) + notifyAdmin('updateNewCustomers') + }) + } + return res.json(user) + }) + } +] + +module.exports.change_verity_info_by_admin = [ + [ + body('verity_businessCode').notEmpty().withMessage('کد مشتری نباید خالی باشد'), + + body('verity_businessID').notEmpty().withMessage('آیدی مشتری نباید خالی باشد') + ], + checkValidations(validationResult), + async (req, res) => { + try { + const user = await User.findById(req.params?.id) + if (!user) return res404(res, 'invalid user id') + if (!user.old_verity_businessID && !user.old_verity_businessCode) { + user.old_verity_businessID = user.verity_businessID + user.old_verity_businessCode = user.verity_businessCode + await user.save() + } + user.verity_businessID = req.body.verity_businessID + user.verity_businessCode = req.body.verity_businessCode + await user.save() + return res.json({ message: _faSr.response.success_save }) + } catch (err) { + return res500(res, err) + } + } +] + +module.exports.change_panatech_info_by_admin = [ + [ + body('panatech_businessCode').notEmpty().withMessage('کد مشتری نباید خالی باشد'), + + body('panatech_businessID').notEmpty().withMessage('آیدی مشتری نباید خالی باشد') + ], + checkValidations(validationResult), + async (req, res) => { + try { + const user = await User.findById(req.params?.id) + if (!user) return res404(res, 'invalid user id') + if (!user.old_panatech_businessID && !user.old_panatech_businessCode) { + user.old_panatech_businessID = user.panatech_businessID + user.old_panatech_businessCode = user.panatech_businessCode + await user.save() + } + user.panatech_businessID = req.body.panatech_businessID + user.panatech_businessCode = req.body.panatech_businessCode + await user.save() + return res.json({ message: _faSr.response.success_save }) + } catch (err) { + return res500(res, err) + } + } +] + +/// //////////////////////////////////////////////////////////////////// authentication + +/// //////// Login + +module.exports.webLogin = [ + [ + body('username') + .isLength({ min: 4 }) + .withMessage(_faSr.min_char.min4) + .bail() + .if((value, { req }) => { + return req.body.password && req.body.password.length >= 4 + }) + .custom((value, { req }) => { + return User.findOne({ + $or: [{ email: value.toLowerCase().trim() }, { national_code: value }, { username: value }] + }).then(user => { + if (!user) return Promise.reject(_faSr.not_found.password) + else return true + }) + }), + + body('password') + .notEmpty() + .withMessage(_faSr.required.password) + .bail() + .isLength({ min: 4 }) + .withMessage(_faSr.min_char.min4), + + body('remember_me') + .exists() + .withMessage(_faSr.required.remember_me) + .bail() + .isBoolean() + .withMessage(_faSr.format.boolean) + ], + checkValidations(validationResult), + async (req, res) => { + try { + const { username, password } = req.body + const user = await User.findOne({ + $or: [{ email: username.toLowerCase().trim() }, { national_code: username }, { username }] + }) + if (!user) throw new Error('err') + const passwordMatch = await bcrypt.compare(password, user.password) + if (!passwordMatch) throw new Error('err') + const token = await jwt.sign({ _id: user._id }, secretKey, { + expiresIn: req.body.remember_me ? '30d' : '7d' + }) + user.token = token + await user.save() + return res.json({ token }) + } catch (err) { + return res.status(422).json({ + validation: { username: { msg: _faSr.not_found.password } } + }) + } + } +] + +module.exports.appLogin = [ + [ + body('username') + .isLength({ min: 4 }) + .withMessage(_faSr.min_char.min4) + .bail() + .if((value, { req }) => { + return req.body.password && req.body.password.length >= 4 + }) + .custom((value, { req }) => { + return User.findOne({ + $or: [{ email: value.toLowerCase().trim() }, { national_code: value }] + }).then(user => { + if (!user) return Promise.reject(_faSr.not_found.password) + else return true + }) + }), + + body('password') + .notEmpty() + .withMessage(_faSr.required.password) + .bail() + .isLength({ min: 4 }) + .withMessage(_faSr.min_char.min4) + ], + checkValidations(validationResult), + async (req, res) => { + try { + const { username, password } = req.body + const user = await User.findOne({ + $or: [{ email: username.toLowerCase().trim() }, { national_code: username }] + }) + if (!user) throw new Error('err') + + const passwordMatch = await bcrypt.compare(password, user.password) + if (!passwordMatch) throw new Error('err') + + const token = await jwt.sign({ _id: user._id }, secretKey, { + expiresIn: '60d' + }) + user.appToken = token + await user.save() + return res.json({ token }) + } catch (err) { + return res.status(422).json({ + validation: { username: { msg: _faSr.not_found.password } } + }) + } + } +] + +/// //////// logout +module.exports.webLogout = [ + async (req, res) => { + try { + const token = req.headers?.authorization + if (!token) throw new Error('err') + + const user = await User.findOne({ token }) + if (!user) throw new Error('err') + + user.token = null + await user.save() + + return res.json({ message: _faSr.response.logged_out }) + } catch (err) { + return res.status(401).json({ message: _faSr.response.not_logged_in }) + } + } +] + +module.exports.appLogout = [ + async (req, res) => { + try { + const token = req.headers?.authorization + if (!token) throw new Error('err') + + const user = await User.findOne({ appToken: token }) + if (!user) throw new Error('err') + + user.appToken = null + await user.save() + + return res.json({ message: _faSr.response.logged_out }) + } catch (err) { + return res.status(401).json({ message: _faSr.response.not_logged_in }) + } + } +] + +/// //////// get user +module.exports.getUser = [ + async (req, res) => { + try { + const token = req.headers?.authorization + if (!token) throw new Error('err') + + const decoded = jwt.verify(token, secretKey) + if (!decoded) throw new Error('err') + + const user = await User.findById(decoded?._id).select( + '-token -appToken -emailConfirmationKey -mobileConfirmationKey -password -resetPassToken' + ) + return res.json({ user }) + } catch (err) { + console.log('🚀 ~ file: userController.js ~ line 1070 ~ err', err) + return res.status(401).json({ message: 'unauthenticated' }) + } + } +] diff --git a/server/controllers/warrantyTermsController.js b/server/controllers/warrantyTermsController.js new file mode 100644 index 0000000..cebcba1 --- /dev/null +++ b/server/controllers/warrantyTermsController.js @@ -0,0 +1,144 @@ +const fs = require('fs') +const { body, validationResult } = require('express-validator') +const jimp = require('jimp') +const Warranty = require('../models/WarrantyTerms') +const { _sr } = require('../plugins/serverResponses') +const { res404, checkValidations } = require('../plugins/controllersHelperFunctions') +const _faSr = _sr.fa + +const shortDescriptionLength = 200 +const paginateLimit = 10 + +module.exports.create = [ + [ + body('title').notEmpty().withMessage(_faSr.required.title), + + body('short_description').notEmpty().withMessage(_faSr.required.description), + + body('description').notEmpty().withMessage(_faSr.required.description) + ], + checkValidations(validationResult), + (req, res) => { + if (!req.files || !req.files.image) + return res.status(422).json({ validation: { image: { msg: _faSr.required.image } } }) + + const image = req.files.image + const fileName = 'warranty_' + Date.now() + '.' + image.mimetype.split('/')[1] + + // validate image format + const supportedFormats = ['jpg', 'jpeg', 'png', 'webp'] + if (!supportedFormats.includes(image.mimetype.split('/')[1])) { + return res.status(422).json({ validation: { image: { msg: _faSr.format.image } } }) + } + + const data = { + _creator: req.user_id, + title: req.body.title, + short_description: req.body.short_description.slice(0, shortDescriptionLength), + description: req.body.description, + image: fileName + } + + jimp + .read(image.data) + .then(img => { + img.cover(350, 350).write(`./static/uploads/images/warrantyTerms/${fileName}`, cb => { + const warranty = new Warranty(data) + warranty.save(err => { + if (err) console.log(err) + return res.json({ message: _faSr.response.success_save }) + }) + }) + }) + .catch(err => { + console.log(err) + }) + } +] + +module.exports.getAll = [ + (req, res) => { + Warranty.paginate({}, { page: req.params?.page || 1, limit: paginateLimit }, (err, result) => { + if (err) return res.status(404).json({ message: _faSr.not_found.item_id }) + if (!result.docs.length && Number(req.params.page) !== 1) + return res.status(404).json({ message: _faSr.not_found.item_id }) + else return res.json(result) + }) + } +] + +module.exports.getOne = [ + (req, res) => { + Warranty.findById(req.params.id) + .populate('_creator', 'first_name last_name') + .exec((err, data) => { + if (err) return res.status(404).json({ message: err }) + return res.json(data) + }) + } +] + +module.exports.update = [ + [ + body('title').notEmpty().withMessage(_faSr.required.title), + + body('short_description').notEmpty().withMessage(_faSr.required.description), + + body('description').notEmpty().withMessage(_faSr.required.description) + ], + checkValidations(validationResult), + (req, res) => { + const data = { + _creator: req.user_id, + title: req.body.title, + short_description: req.body.short_description.slice(0, shortDescriptionLength), + description: req.body.description + } + + if (req.files && req.files.image) { + const image = req.files.image + const fileName = 'warranty_' + Date.now() + '.' + image.mimetype.split('/')[1] + + // validate image format + const supportedFormats = ['jpg', 'jpeg', 'png', 'webp'] + if (!supportedFormats.includes(image.mimetype.split('/')[1])) { + return res.status(422).json({ validation: { image: { msg: _faSr.format.image } } }) + } + + data.image = fileName + + jimp + .read(image.data) + .then(img => { + img.cover(350, 350).write(`./static/uploads/images/warrantyTerms/${fileName}`) + }) + .catch(err => { + console.log(err) + }) + } + + Warranty.findByIdAndUpdate(req.params.id, data, (err, oldData) => { + if (err) return res404(res, err) + if (req.files && req.files.image) + fs.unlink(`./static/${oldData.image}`, err => { + if (err) console.log(err) + }) + Warranty.findById(req.params.id, (err, data) => { + if (err) return res404(res, err) + return res.json(data) + }) + }) + } +] + +module.exports.delete = [ + (req, res) => { + Warranty.findByIdAndDelete(req.params.id, (err, data) => { + if (err) return res.status(404).json({ message: _faSr.not_found.item_id }) + fs.unlink(`./static/${data.image}`, err => { + if (err) console.log(err) + }) + return res.json({ message: _faSr.response.success_remove }) + }) + } +] diff --git a/server/database.js b/server/database.js new file mode 100644 index 0000000..be3b527 --- /dev/null +++ b/server/database.js @@ -0,0 +1,31 @@ +/* eslint-disable no-unused-vars */ +const mongoose = require('mongoose') + +mongoose.plugin(schema => { + schema.set('toObject', { getters: true }) + schema.set('toJSON', { getters: true }) + schema.set('timestamps', { + createdAt: 'created_at', + updatedAt: 'updated_at' + }) +}) + +// mongodb database connection string. change it as per your needs. here "mydb" is the name of the database. You don't need to create DB from mongodb terminal. mongoose create the database automatically. +const inHostUrl = 'mongodb://asanserv_admin:admin1234@localhost:27017/asanserv_database' +const outHostUrl = + 'mongodb://asanserv_admin:admin1234@www.asan-service.com:27017/asanserv_database?serverSelectionTimeoutMS=5000&connectTimeoutMS=10000&authSource=asanserv_database' +const locaUrl = 'mongodb://localhost:27017/AsanService' +mongoose.connect(locaUrl, { + useNewUrlParser: true, + useUnifiedTopology: true, + useFindAndModify: false, + useCreateIndex: true +}) + +const database = mongoose.connection +database.on('error', console.error.bind(console, 'connection error:')) +database.once('open', function callback() { + console.log('🟠 ~ MongoDB Connected...') +}) + +module.exports = database diff --git a/server/index.js b/server/index.js new file mode 100644 index 0000000..673e553 --- /dev/null +++ b/server/index.js @@ -0,0 +1,65 @@ +/// / develop environment config +const { isDev, isProduction, DevServerPort } = require('./_env') +const wss = require('./WebSocket/wss') + +/// / init express app (wrapping all functions into init() to prevent running in development mode by nuxt dev mode) +function init() { + // run preConfigured modules + require('./database') + require('body-parser') + + // include modules to configure + const express = require('express') + const fileUpload = require('express-fileupload') + const authentication = require('./authentication') + const { checkThirdPartyAccess } = require('./plugins/checkThirdPartyAccess') + // const { getVerityToken, getPanatechToken } = require('./ArpaWebService') + const cronJobs = require('./plugins/cronJobs') + const router = express.Router() + + // Create express instance + const app = express() + + // Init body-parser options (inbuilt with express) + app.use(express.json()) + app.use(express.urlencoded({ extended: true })) + app.use(fileUpload()) + + // load plugins + // getVerityToken() + // getPanatechToken() + cronJobs() + + // API routes + const Public = require('./routes/public') + const admin = require('./routes/admin') + const user = require('./routes/user') + const agent = require('./routes/agent') + const auth = require('./routes/auth') + const cross = require('./routes/cross') + const thirdParty = require('./routes/thirdParty') + + // Use API Routes + router.use('/public', Public) + router.use('/admin', authentication.isAdmin, admin) + router.use('/user', authentication.isUser, user) + router.use('/agent', authentication.isAgent, agent) + router.use('/auth', auth) + router.use('/cross', cross) + router.use('/thirdParty', checkThirdPartyAccess, thirdParty) + + app.use(isDev ? '/api' : '', router) + + return app +} + +/// / development server +if (isDev) { + init().listen(DevServerPort, () => { + console.log('🟢 ~ Node Server is running in development mode on port:', DevServerPort) + }) + wss() +} + +/// / server middleware (production mode) +module.exports.serverMiddleware = isProduction && { path: '/api', handler: init() } diff --git a/server/models/Announcement.js b/server/models/Announcement.js new file mode 100644 index 0000000..3f31525 --- /dev/null +++ b/server/models/Announcement.js @@ -0,0 +1,13 @@ +const mongoose = require('mongoose') + +const AnnouncementSchema = mongoose.Schema({ + title: String, + caption: String, + seenBy: [mongoose.ObjectId], + expireDate: Number, + expired: { type: Boolean, default: false }, + isForAgents: { type: Boolean, default: false }, + _creator: { type: mongoose.ObjectId, ref: 'User' } +}) + +module.exports = mongoose.model('Announcement', AnnouncementSchema) diff --git a/server/models/BufferRequest.js b/server/models/BufferRequest.js new file mode 100644 index 0000000..404fd52 --- /dev/null +++ b/server/models/BufferRequest.js @@ -0,0 +1,36 @@ +const mongoose = require('mongoose') + +const BufferRequestSchema = mongoose.Schema({ + // system structure + _openedBy: { type: mongoose.ObjectId, ref: 'User' }, + _updatedBy: { type: mongoose.ObjectId, ref: 'User' }, + user_id: { type: mongoose.ObjectId, ref: 'User' }, + agent_id: { type: mongoose.ObjectId, ref: 'Representation' }, + + // form info + description: String, + createDate: String, + sendDate: String, + trackingCode: String, + items: [ + { + ItemName: String, + ItemID: String, + ItemCode: String, + bufferQuantity: Number + } + ], + + // admin operations + seen: { type: Boolean, default: false }, + status: { type: String, enum: ['temp', 'sent', 'ongoing', 'waiting', 'delivered'], default: 'temp' }, + statusHistory: [ + { + status: String, + date: Number + } + ], + deliveryCode: String +}) + +module.exports = mongoose.model('BufferRequest', BufferRequestSchema) diff --git a/server/models/ContactPageMessage.js b/server/models/ContactPageMessage.js new file mode 100644 index 0000000..1a3de12 --- /dev/null +++ b/server/models/ContactPageMessage.js @@ -0,0 +1,11 @@ +const mongoose = require('mongoose') + +const ContactPageMessageSchema = new mongoose.Schema({ + full_name: String, + email: String, + message: String, + read: { type: Boolean, default: false }, + read_by: { type: mongoose.ObjectId, ref: 'User' } +}) + +module.exports = mongoose.model('ContactPageMessage', ContactPageMessageSchema) diff --git a/server/models/FAQ.js b/server/models/FAQ.js new file mode 100644 index 0000000..2ec1761 --- /dev/null +++ b/server/models/FAQ.js @@ -0,0 +1,9 @@ +const mongoose = require('mongoose') + +const FAQSchema = mongoose.Schema({ + _creator: { type: mongoose.ObjectId, ref: 'User' }, + question: String, + answer: String +}) + +module.exports = mongoose.model('FAQ', FAQSchema) diff --git a/server/models/GuaranteeReport.js b/server/models/GuaranteeReport.js new file mode 100644 index 0000000..bf8d18e --- /dev/null +++ b/server/models/GuaranteeReport.js @@ -0,0 +1,42 @@ +const mongoose = require('mongoose') + +const GuaranteeReportSchema = mongoose.Schema({ + // system structure + _openedBy: { type: mongoose.ObjectId, ref: 'User' }, + _updatedBy: { type: mongoose.ObjectId, ref: 'User' }, + user_id: { type: mongoose.ObjectId, ref: 'User' }, + agent_id: { type: mongoose.ObjectId, ref: 'Representation' }, + + // form info + description: String, + createDate: String, + sendDate: String, + trackingCode: String, + items: [ + { + // customer info + customerName: String, + customerTel: String, + // product info + ItemName: String, + SerialNo1: String, + ItemID: String, + ItemCode: String, + + // product issue + productIssue: String, + usedPieces: String, + + // dates + recieveDate: String, + deliverDate: String + } + ], + + // admin operations + seen: { type: Boolean, default: false }, + archived: { type: Boolean, default: false }, + status: { type: String, enum: ['temp', 'sent'], default: 'temp' } +}) + +module.exports = mongoose.model('GuaranteeReport', GuaranteeReportSchema) diff --git a/server/models/Help.js b/server/models/Help.js new file mode 100644 index 0000000..e14d518 --- /dev/null +++ b/server/models/Help.js @@ -0,0 +1,8 @@ +const mongoose = require('mongoose') + +const HelpSchema = mongoose.Schema({ + _creator: { type: mongoose.ObjectId, ref: 'User' }, + helpId: { type: mongoose.ObjectId, ref: 'Learning' } +}) + +module.exports = mongoose.model('Help', HelpSchema) diff --git a/server/models/Learning.js b/server/models/Learning.js new file mode 100644 index 0000000..23a574b --- /dev/null +++ b/server/models/Learning.js @@ -0,0 +1,27 @@ +const mongoose = require('mongoose') +const paginate = require('mongoose-paginate-v2') + +function video(vid) { + if (vid) return '/uploads/videos/' + vid +} + +function image(img) { + return '/uploads/images/blog/' + img +} + +function thumb(img) { + return '/uploads/images/blog/thumb/' + img +} + +const LearningSchema = mongoose.Schema({ + _creator: { type: mongoose.ObjectId, ref: 'User' }, + title: String, + short_description: String, + description: String, + cover: { type: String, get: image }, + video: { type: String, get: video }, + thumb: { type: String, get: thumb } +}) +LearningSchema.plugin(paginate) + +module.exports = mongoose.model('Learning', LearningSchema) diff --git a/server/models/Lottery.js b/server/models/Lottery.js new file mode 100644 index 0000000..b7f6f83 --- /dev/null +++ b/server/models/Lottery.js @@ -0,0 +1,23 @@ +const mongoose = require('mongoose') + +function image(img) { + if (img) return '/uploads/images/lottery/' + img +} + +const LotterySchema = mongoose.Schema({ + entryWidth: Number, + entryHeight: Number, + entryBgImg: { type: String, get: image }, + resultWidth: Number, + resultHeight: Number, + resultBgImg: { type: String, get: image }, + title: String, + lotteryCode: String, + participants: [], + winnersCount: { type: Number, default: 1 }, + winnersList: [], + expireDate: Number, + expired: { type: Boolean, default: false } +}) + +module.exports = mongoose.model('Lottery', LotterySchema) diff --git a/server/models/LotteryPopUp.js b/server/models/LotteryPopUp.js new file mode 100644 index 0000000..88d0b2f --- /dev/null +++ b/server/models/LotteryPopUp.js @@ -0,0 +1,16 @@ +const mongoose = require('mongoose') + +function image(img) { + if (img) return '/uploads/images/lottery/' + img +} + +const LotteryPopUpSchema = mongoose.Schema({ + visible: { type: Boolean, default: true }, + x: { type: Number, default: 15 }, + y: { type: Number, default: 15 }, + w: { type: Number, default: 40 }, + h: { type: Number, default: 40 }, + bgImg: { type: String, get: image } +}) + +module.exports = mongoose.model('LotteryPopUp', LotteryPopUpSchema) diff --git a/server/models/OldPieceRequest.js b/server/models/OldPieceRequest.js new file mode 100644 index 0000000..0182fb7 --- /dev/null +++ b/server/models/OldPieceRequest.js @@ -0,0 +1,45 @@ +const mongoose = require('mongoose') + +const OldPieceRequestSchema = mongoose.Schema({ + // system structure + _openedBy: { type: mongoose.ObjectId, ref: 'User' }, + _updatedBy: { type: mongoose.ObjectId, ref: 'User' }, + user_id: { type: mongoose.ObjectId, ref: 'User' }, + agent_id: { type: mongoose.ObjectId, ref: 'Representation' }, + + // form info + description: String, + createDate: String, + sendDate: String, + trackingCode: String, + items: [ + { + // product info + ItemReceptionTransDate: String, + ItemName: String, + SerialNo1: String, + ItemID: String, + ItemCode: String, + // GStartDate: String, + // GEndDate: String, + + // piece info + pieceName: String, + pieceCode: String, + pieceId: { type: mongoose.ObjectId, ref: 'Piece' } + } + ], + + // admin operations + seen: { type: Boolean, default: false }, + status: { type: String, enum: ['temp', 'sent', 'ongoing', 'waiting', 'delivered'], default: 'temp' }, + statusHistory: [ + { + status: String, + date: Number + } + ], + deliveryCode: String +}) + +module.exports = mongoose.model('OldPieceRequest', OldPieceRequestSchema) diff --git a/server/models/Piece.js b/server/models/Piece.js new file mode 100644 index 0000000..96c1051 --- /dev/null +++ b/server/models/Piece.js @@ -0,0 +1,8 @@ +const mongoose = require('mongoose') + +const PieceSchema = mongoose.Schema({ + name: String, + code: String +}) + +module.exports = mongoose.model('Piece', PieceSchema) diff --git a/server/models/PieceRequest.js b/server/models/PieceRequest.js new file mode 100644 index 0000000..61fddc4 --- /dev/null +++ b/server/models/PieceRequest.js @@ -0,0 +1,47 @@ +const mongoose = require('mongoose') + +const PieceRequestSchema = mongoose.Schema({ + // system structure + _openedBy: { type: mongoose.ObjectId, ref: 'User' }, + _updatedBy: { type: mongoose.ObjectId, ref: 'User' }, + user_id: { type: mongoose.ObjectId, ref: 'User' }, + agent_id: { type: mongoose.ObjectId, ref: 'Representation' }, + + // form info + description: String, + createDate: String, + sendDate: String, + trackingCode: String, + items: [ + { + // product info + ItemReceptionTransDate: String, + ItemName: String, + SerialNo1: String, + ItemID: String, + ItemCode: String, + // GStartDate: String, + // GEndDate: String, + gStatus: Boolean, + + // piece info + pieceName: String, + pieceCode: String, + pieceQuantity: Number, + pieceId: { type: mongoose.ObjectId, ref: 'Piece' } + } + ], + + // admin operations + seen: { type: Boolean, default: false }, + status: { type: String, enum: ['temp', 'sent', 'ongoing', 'waiting', 'delivered'], default: 'temp' }, + statusHistory: [ + { + status: String, + date: Number + } + ], + deliveryCode: String +}) + +module.exports = mongoose.model('PieceRequest', PieceRequestSchema) diff --git a/server/models/Representation.js b/server/models/Representation.js new file mode 100644 index 0000000..af9ec21 --- /dev/null +++ b/server/models/Representation.js @@ -0,0 +1,111 @@ +const mongoose = require('mongoose') + +function file(file) { + return '/uploads/representation_docs/' + this.name +} + +const FilesSchema = mongoose.Schema({ + name: String +}) +FilesSchema.virtual('url').get(file) + +const RepresentationSchema = mongoose.Schema({ + // user info + user_id: { type: mongoose.ObjectId, ref: 'User' }, + representation_code: String, + agent_code: String, + editAccess: { type: Boolean, default: false }, + + // personal info + full_name: String, + birth_date: String, + id_number: String, + place_of_issue: String, + national_code: String, + fathers_name: String, + education_level: String, + military_status: String, + certificates: String, + + // contact info + store_name: String, + province_name: String, + province_id: String, + city_name: String, + city_id: String, + postal_code: String, + mobile_number: String, + tel_number: String, + fax_number: String, + economic_code: String, + email: String, + address: String, + + // location info + business_license: Boolean, + ownership_type: { type: String, enum: ['owner', 'rent', 'rghit_of_business'] }, + total_area: String, + repair_area: String, + stock_area: String, + customer_reference_floor: String, + place_location: { type: String, enum: ['tech_passage', 'other'] }, + geo_location: { type: String, enum: ['main_street', 'side_street', 'alley', 'inside_passage', 'outside_passage'] }, + banner_info: String, + repair_technicians: String, + repair_masters: String, + office_workers: String, + bike_deliveries: String, + + // experience info + computer_repair_exp: String, + multimedia_repair_exp: String, + business_exp: String, + + // common questions + representation_type: { + type: String, + enum: ['verity', 'panatech', 'both'], + default: 'both' + }, + know_asanServ_from: { + type: String, + enum: ['company_agents', 'website', 'company_workers', 'exhibition', 'introduced', 'other'] + }, + introducer_info: String, + asanServ_products_knowledge: { type: Number, enum: [0, 1, 2, 3, 4] }, + computer_saling_exp: Boolean, + computer_saling_description: String, + other_representations: [ + { + trademark: String, + company_name: String, + cooperation_history: String, + cooperation_start_year: String + } + ], + more_descriptions: String, + + // admins + status: { + type: String, + enum: ['registered', 'ongoing', 'verification', 'accepted', 'rejected'], + default: 'registered' + }, + + // files + upload: { type: Boolean, default: true }, + tradeUnion: [FilesSchema], + expertise: [FilesSchema], + ownership: [FilesSchema], + repairShop: [FilesSchema], + itEmployee: [FilesSchema], + itExpert: [FilesSchema], + financialGuarantees: [FilesSchema], + // + archived: { type: Boolean, default: false }, + _updatedBy: { type: mongoose.ObjectId, ref: 'User' }, + _revoked: { type: Boolean, default: false }, + _revokedBy: { type: mongoose.ObjectId, ref: 'User' } +}) + +module.exports = mongoose.model('Representation', RepresentationSchema) diff --git a/server/models/SMSBroadcast.js b/server/models/SMSBroadcast.js new file mode 100644 index 0000000..83b822c --- /dev/null +++ b/server/models/SMSBroadcast.js @@ -0,0 +1,14 @@ +const mongoose = require('mongoose') + +const SMSBroadcastSchema = mongoose.Schema({ + message: String, + recievers: [ + { + user_id: { type: mongoose.ObjectId, ref: 'User' }, + mobile_number: String + } + ], + _creator: { type: mongoose.ObjectId, ref: 'User' } +}) + +module.exports = mongoose.model('SMSBroadcast', SMSBroadcastSchema) diff --git a/server/models/Survey.js b/server/models/Survey.js new file mode 100644 index 0000000..f673deb --- /dev/null +++ b/server/models/Survey.js @@ -0,0 +1,16 @@ +const mongoose = require('mongoose') + +const SurveySchema = mongoose.Schema({ + purchasedProduct: { type: Number, enum: [1, 2, 3, 4, 5] }, + guaranteeWorkFlow: { type: Number, enum: [1, 2, 3, 4, 5] }, + employeeResponsibility: { type: Number, enum: [1, 2, 3, 4, 5] }, + serviceQuality: { type: Number, enum: [1, 2, 3, 4, 5] }, + serviceTime: { type: Number, enum: [1, 2, 3, 4, 5] }, + repairQuality: { type: Number, enum: [1, 2, 3, 4, 5] }, + coast: { type: Number, enum: [1, 2, 3, 4, 5] }, + description: String, + code: String, + user: { type: mongoose.ObjectId, ref: 'User' }, +}) + +module.exports = mongoose.model('Survey', SurveySchema) diff --git a/server/models/SurveyCheck.js b/server/models/SurveyCheck.js new file mode 100644 index 0000000..5b5c165 --- /dev/null +++ b/server/models/SurveyCheck.js @@ -0,0 +1,10 @@ +const mongoose = require('mongoose') + +const SurveyCheckSchema = mongoose.Schema({ + code: String, + user: { type: mongoose.ObjectId, ref: 'User' }, + smsSent: { type: Boolean, default: false }, + timeAdded: Number // timestamp +}) + +module.exports = mongoose.model('SurveyCheck', SurveyCheckSchema) diff --git a/server/models/TicketConversation.js b/server/models/TicketConversation.js new file mode 100644 index 0000000..92c25e5 --- /dev/null +++ b/server/models/TicketConversation.js @@ -0,0 +1,22 @@ +const mongoose = require('mongoose') + +function image(img) { + if (img) return '/uploads/images/tickets/' + img +} + +const Ticket = mongoose.Schema({ + message: String, + image: { type: String, get: image }, + isUser: { type: Boolean, default: true }, + read: { type: Boolean, default: false }, + user_id: { type: mongoose.ObjectId, ref: 'User' } +}) + +const TicketConversation = mongoose.Schema({ + title: String, + transaction_id: String, + user_id: { type: mongoose.ObjectId, ref: 'User' }, + messages: [Ticket] +}) + +module.exports = mongoose.model('TicketConversation', TicketConversation) diff --git a/server/models/Transaction.js b/server/models/Transaction.js new file mode 100644 index 0000000..c3c6af6 --- /dev/null +++ b/server/models/Transaction.js @@ -0,0 +1,34 @@ +const mongoose = require('mongoose') + +const TransactionSchema = mongoose.Schema({ + // system structure + user_id: { type: mongoose.ObjectId, ref: 'User' }, + agent_id: { type: mongoose.ObjectId, ref: 'Representation' }, + db_name: { type: String, enum: ['verity', 'panatech'] }, + + // form info + BusinessID: String, + Description: String, + cAddress1: String, + TransCCustom1: String, + cTel1: String, + items: Array, + // + TempReceiptTransNumber: String, + ItemReceptionTransNumber: String, + TempReceiptTransDate: String, + ItemReceptionTransDate: String, + + // agent operations + seen: { type: Boolean, default: false }, + status: { type: String, enum: ['saved', 'recieved', 'ongoing', 'waiting', 'delivered'], default: 'saved' }, + statusHistory: [ + { + status: String, + date: Number + } + ], + deliveryCode: String +}) + +module.exports = mongoose.model('Transaction', TransactionSchema) diff --git a/server/models/TransactionDraft.js b/server/models/TransactionDraft.js new file mode 100644 index 0000000..fd6f9f4 --- /dev/null +++ b/server/models/TransactionDraft.js @@ -0,0 +1,10 @@ +const mongoose = require('mongoose') + +const TransactionDraftSchema = mongoose.Schema({ + user_id: { type: mongoose.ObjectId, ref: 'User' }, + db_name: { type: String, enum: ['verity', 'panatech'] }, + description: String, + items: { type: Array, default: [] } +}) + +module.exports = mongoose.model('TransactionDraft', TransactionDraftSchema) diff --git a/server/models/User.js b/server/models/User.js new file mode 100644 index 0000000..7be7f33 --- /dev/null +++ b/server/models/User.js @@ -0,0 +1,59 @@ +const mongoose = require('mongoose') + +const UserSchema = mongoose.Schema({ + // for admins + _creator: { type: mongoose.ObjectId, ref: 'User' }, + private: { type: Boolean, default: false }, + username: String, + permissions: Array, + // for user + national_code: String, + province_id: String, + city_id: String, + province_name: String, + city_name: String, + address: String, + postal_code: String, + tel_number: String, + mobile_number: String, + email: String, + store_name: String, + + // verity info + verity_businessID: String, + verity_businessCode: String, + old_verity_businessID: String, + old_verity_businessCode: String, + + // panatech info + panatech_businessID: String, + panatech_businessCode: String, + old_panatech_businessID: String, + old_panatech_businessCode: String, + + isAgent: { type: Boolean, default: false }, + representation_id: { type: mongoose.ObjectId, ref: 'Representation' }, + representation_code: String, + askedForRepresentation: { type: Boolean, default: false }, + + // for both + first_name: String, + last_name: String, + password: String, + + /// //////////////////////////////// user confirmations + confirmed: { type: Boolean, default: false }, + email_confirmed: { type: Boolean, default: false }, + mobile_confirmed: { type: Boolean, default: false }, + emailConfirmationKey: String, + mobileConfirmationKey: String, + seenByAdmin: { type: Boolean, default: false }, + + /// ///////////// + scope: { type: Array, default: ['user'] }, + token: String, + appToken: String, + resetPassToken: String +}) + +module.exports = mongoose.model('User', UserSchema) diff --git a/server/models/WarrantyTerms.js b/server/models/WarrantyTerms.js new file mode 100644 index 0000000..3cecb01 --- /dev/null +++ b/server/models/WarrantyTerms.js @@ -0,0 +1,17 @@ +const mongoose = require('mongoose') +const paginate = require('mongoose-paginate-v2') + +function image(img) { + return '/uploads/images/warrantyTerms/' + img +} + +const WarrantySchema = mongoose.Schema({ + _creator: { type: mongoose.ObjectId, ref: 'User' }, + title: String, + short_description: String, + description: String, + image: { type: String, get: image } +}) +WarrantySchema.plugin(paginate) + +module.exports = mongoose.model('Warranty', WarrantySchema) diff --git a/server/models/download/Download.js b/server/models/download/Download.js new file mode 100644 index 0000000..cf070c2 --- /dev/null +++ b/server/models/download/Download.js @@ -0,0 +1,33 @@ +const mongoose = require('mongoose') +const paginate = require('mongoose-paginate-v2') + +function image(img) { + return '/uploads/images/downloads/' + img +} + +function file(file) { + return '/uploads/apps/' + file +} + +const DownloadFilesSchema = mongoose.Schema({ + _creator: { type: mongoose.ObjectId, ref: 'User' }, + name: String, + os: { + type: String, + enum: ['windows', 'linux', 'mac', 'android', 'ios'] + }, + file: { type: String, get: file } +}) + +const DownloadSchema = mongoose.Schema({ + _creator: { type: mongoose.ObjectId, ref: 'User' }, + title: String, + short_description: String, + description: String, + image: { type: String, get: image }, + category: mongoose.ObjectId, + files: [DownloadFilesSchema] +}) +DownloadSchema.plugin(paginate) + +module.exports = mongoose.model('Download', DownloadSchema) diff --git a/server/models/download/DownloadCategory.js b/server/models/download/DownloadCategory.js new file mode 100644 index 0000000..9ca80ff --- /dev/null +++ b/server/models/download/DownloadCategory.js @@ -0,0 +1,8 @@ +const mongoose = require('mongoose') + +const DownloadCategorySchema = mongoose.Schema({ + _creator: { type: mongoose.ObjectId, ref: 'User' }, + name: String +}) + +module.exports = mongoose.model('DownloadCategory', DownloadCategorySchema) diff --git a/server/plugins/SMS_Module.js b/server/plugins/SMS_Module.js new file mode 100644 index 0000000..252b4f2 --- /dev/null +++ b/server/plugins/SMS_Module.js @@ -0,0 +1,53 @@ +const axios = require('axios') + +const accountInfo = { + Username: 'asanservice.sms@gmail.com', + Password: '7ea2243a', + Number: '5000467341', + url: 'http://www.afe.ir/WebService/V4/BoxService.asmx' +} + +/// /////// http post soap method +module.exports.SMS = (mobileNumbersArray, message) => { + return new Promise((resolve, reject) => { + function renderMobileNumbers(array) { + return array.map(item => `${item}`).join('') + } + + const xml = ` + + + + ${accountInfo.Username} + ${accountInfo.Password} + ${accountInfo.Number} + + ${renderMobileNumbers(mobileNumbersArray)} + + ${message} + 1 + + + ` + + axios + .post(accountInfo.url, xml, { + headers: { + 'Content-Type': 'text/xml; charset=utf-8', + SOAPAction: 'http://www.afe.ir/SendMessage' + } + }) + .then(res => { + resolve(res) + }) + .catch(err => { + console.log( + 'this is sms module error ------------------ status code: ', + err.response.status, + 'error message: ', + err.response.data + ) + resolve(err) + }) + }) +} diff --git a/server/plugins/SMS_Phrases.js b/server/plugins/SMS_Phrases.js new file mode 100644 index 0000000..825ebe1 --- /dev/null +++ b/server/plugins/SMS_Phrases.js @@ -0,0 +1,4 @@ +module.exports.phrases = { + signature: ' asan-service.com ', + thanks: ' از همراهی شما سپاس گزاریم. ' +} diff --git a/server/plugins/asanServiceSerialChecker.js b/server/plugins/asanServiceSerialChecker.js new file mode 100644 index 0000000..03a295d --- /dev/null +++ b/server/plugins/asanServiceSerialChecker.js @@ -0,0 +1,58 @@ +const fs = require('fs') +const readXlsxFile = require('read-excel-file/node') + +const guaranteeSerialsPath = './static/uploads/serials' +const productSerialsPath = './static/uploads/serials_products' + +const serialChecker = async (serial, type = 'guaranteeSerial') => { + let exelsPath + if (type === 'guaranteeSerial') exelsPath = guaranteeSerialsPath + if (type === 'orginality') exelsPath = productSerialsPath + + const lowerSerial = serial.toLowerCase() + // a promise to lowercase items and filter null or DateObjects + const toLowerCaseArray = array => { + return new Promise((resolve, reject) => { + const newArray = [] + array.forEach((item, index) => { + if (item !== null && typeof item === 'string') newArray.push(item.toLowerCase()) + if (item !== null && typeof item === 'number') newArray.push(item.toString()) + if (index === array.length - 1) return resolve(newArray) + }) + }) + } + + // create an array of all exel files data + const exelFilesData = [] + try { + // get a list of all exel files + const serialFiles = await fs.readdirSync(exelsPath) + + // push each exel file data to exelFilesData array + let n0 = 0 + for await (const file of serialFiles) { + // reading all exel files one by one + const exelFile = await readXlsxFile(`${exelsPath}/${file}`) + exelFilesData.push(exelFile) + + // flat exelFilesData and filter and lowerCase it's items + if (n0 === serialFiles.length - 1) { + const flattedArray = exelFilesData.flat(10000) + const lowerCaseFlattedArray = await toLowerCaseArray(flattedArray) + + // loop throw lowerCased items to find exact match item + let n1 = 0 + for await (const item of lowerCaseFlattedArray) { + if (item === lowerSerial) return true + if (n1 === lowerCaseFlattedArray.length - 1) return false + n1++ + } + } + n0++ + } + } catch (e) { + throw new Error(e) + } +} + +module.exports.serialChecker = serialChecker diff --git a/server/plugins/checkThirdPartyAccess.js b/server/plugins/checkThirdPartyAccess.js new file mode 100644 index 0000000..c4f4b42 --- /dev/null +++ b/server/plugins/checkThirdPartyAccess.js @@ -0,0 +1,9 @@ +const token = '8f552d860d0cdbbf4afaa0749acb7f3e32efcdc85fc4b49bb3d356ff30f0504a' +module.exports.checkThirdPartyAccess = (req, res, next) => { + try { + if (req.headers?.authorization?.trim() !== token) throw new Error('unauthorized') + else next() + } catch { + return res.status(422).json({ message: 'unauthorized' }) + } +} diff --git a/server/plugins/controllersHelperFunctions.js b/server/plugins/controllersHelperFunctions.js new file mode 100644 index 0000000..aa64209 --- /dev/null +++ b/server/plugins/controllersHelperFunctions.js @@ -0,0 +1,114 @@ +/// ///////////////////////////////////////////////////////////////////////////////////////// expresjs methods +module.exports.res404 = (res, err) => { + return res.status(404).json({ message: err }) +} + +module.exports.res406 = (res, err) => { + return res.status(406).json({ message: err }) +} + +module.exports.res500 = (res, err) => { + return res.status(500).json({ message: err }) +} + +module.exports.checkValidations = validationResult => { + return (req, res, next) => { + const errors = validationResult(req) + if (!errors.isEmpty()) return res.status(422).json({ validation: errors.mapped() }) + else next() + } +} + +/// ///////////////////////////////////////////////////////////////////////////////////////// sting methods +module.exports.removeWhiteSpaces = str => { + return str.replace(/ /g, '') +} + +module.exports.isPersian = str => { + return str.match(/^[\u0600-\u06FF\s]+$/) +} + +module.exports.isPersianWithDigits = str => { + return str.match(/^[\u0600-\u06FF\s\d]+$/) +} + +module.exports.isLatin = str => { + return str.match(/^[A-Za-z\s]+$/g) +} + +module.exports.isLatinWithDigits = str => { + return str.match(/^[a-zA-Z\s0-9()*_\-!#$%^&*,."'\][]*$/g) +} + +module.exports.hasWhiteSpaces = str => { + return str.includes(' ') +} + +/// ///////////////////////////////////////////////////////////////////////////////////////// number methods +module.exports.generateRandomDigits = digitsLength => { + function generateRandomDigits(DIGITS_LENGTH) { + const add = 1 + let max = 12 - add // 12 is the min safe number Math.random() can generate without it starting to pad the end with zeros. + if (DIGITS_LENGTH > max) { + return generateRandomDigits(max) + generateRandomDigits(DIGITS_LENGTH - max) + } + max = Math.pow(10, DIGITS_LENGTH + add) + const min = max / 10 // Math.pow(10, n) basically + const number = Math.floor(Math.random() * (max - min + 1)) + min + + return ('' + number).substring(add) + } + return generateRandomDigits(digitsLength) +} + +module.exports.generateRandomDigitsInRangeOf = max => { + return Math.floor(Math.random() * max) + 1 +} + +/// ///////////////////////////////////////////////////////////////////////////////////////// iran region methods +module.exports.checkNationalCode = code => { + /* eslint-disable eqeqeq */ + const L = code.length + if (L < 8 || parseInt(code, 10) == 0) return false + code = ('0000' + code).substr(L + 4 - 10) + if (parseInt(code.substr(3, 6), 10) == 0) return false + const c = parseInt(code.substr(9, 1), 10) + let s = 0 + for (let i = 0; i < 9; i++) { + s += parseInt(code.substr(i, 1), 10) * (10 - i) + } + s = s % 11 + return (s < 2 && c == s) || (s >= 2 && c == 11 - s) + /* eslint-enable eqeqeq */ +} + +module.exports.checkMobileNumber = number => { + const regex = /^(\+98|0)?9\d{9}$/ + const result = regex.test(number) + return result +} + +module.exports.normalizeMobileNumber = number => { + return number.split('').reverse().join('').slice(0, 10).concat('0').split('').reverse().join('') +} + +module.exports.nameOptimizer = name => { + function regex(str) { + return new RegExp(str) + } + + return name + .replace(regex('آقای'), '') + .replace(regex('آقا'), '') + .replace(regex('جنابه'), '') + .replace(regex('جناب'), '') + .replace(regex('سرکار خانوم'), '') + .replace(regex('سرکار خانم'), '') + .replace(regex('سرکارخانوم'), '') + .replace(regex('سرکارخانومه'), '') + .replace(regex('سرکارخانمه'), '') + .replace(regex('سرکارخانم'), '') + .replace(regex('سرکار'), '') + .replace(regex('خانوم'), '') + .replace(regex('خانم'), '') +} diff --git a/server/plugins/cronJobs.js b/server/plugins/cronJobs.js new file mode 100644 index 0000000..5da3317 --- /dev/null +++ b/server/plugins/cronJobs.js @@ -0,0 +1,289 @@ +/* eslint-disable no-unused-vars */ +const User = require('../models/User') +const Lottery = require('../models/Lottery') +const SurveyCheck = require('../models/SurveyCheck') +const Survey = require('../models/Survey') +const Announcement = require('../models/Announcement') +const { saveUserToArpa, updateUserOnArpa } = require('../ArpaWebservice') +const { generateRandomDigitsInRangeOf } = require('./controllersHelperFunctions') +const { SMS } = require('./SMS_Module') +const { phrases } = require('./SMS_Phrases') + +/// /////// times +const minute = 1000 * 60 +const hour = minute * 60 +const day = hour * 24 + +/// /////// jobs +const jobs = { + checkUserActivation() { + console.log('✅ --job: check users for activation is running') + + return setInterval(async () => { + try { + const users = await User.find({ confirmed: false }) + for await (const user of users) { + // item time and timeout + const itemTime = Date.parse(user.created_at) + const timeout = itemTime + day + + // check if passed 24 hours and remove registration + if (Date.now() >= timeout) { + await user.remove() + } + } + } catch (e) { + console.log(e) + } + }, hour) + }, + checkIfAnnouncementsExpired() { + console.log('✅ --job: check announcements for expire date is running') + + return setInterval(async () => { + try { + const announcements = await Announcement.find({ expired: false }) + for await (const notif of announcements) { + if (Date.now() > notif.expireDate) { + notif.expired = true + await notif.save() + } + } + } catch (e) { + console.log(e) + } + }, hour) + }, + drawLottery() { + console.log('✅ --job: check for lottery draw is running') + + return setInterval(async () => { + try { + const lottery = await Lottery.findOne({ expired: false }) + if (!lottery || lottery.expireDate > Date.now()) return + + /// ///////// assets (arrays) + const winnersCount = lottery.winnersCount + + const participants = lottery.participants + const participantsMobileNumbers = [] + + const winnersArray = [] + const winnersMobileNumbers = [] + + /// ///////// assets (functions) + function getWinner(array) { + return new Promise(async (resolve, reject) => { + const winner = array[generateRandomDigitsInRangeOf(array.length - 1)] + if (await winnersMobileNumbers.includes(winner.mobile)) resolve(await getWinner(array)) + else { + winnersMobileNumbers.push(winner.mobile) + winnersArray.push(winner) + resolve() + } + }) + } + + // normalize repeated mobile numbers to decide which method to use + for await (const item of participants) { + if (!participantsMobileNumbers.includes(item.mobile)) participantsMobileNumbers.push(item.mobile) + } + + // draw function + if (participantsMobileNumbers.length > 1000) { + // console.log('------------------------- larg number block ran') + + // chunk all participants to n part (Number(winnersCount) part) + const partLength = Math.floor(participants.length / winnersCount) + const chunckedArrayToParts = [] + + for (let i = 0; i < winnersCount; i++) { + const chunck = await participants.slice(i * partLength, i * partLength + partLength) + await chunckedArrayToParts.push(chunck) + } + + for await (const item of chunckedArrayToParts) { + await getWinner(item) + } + } else if (participantsMobileNumbers.length > winnersCount) { + // console.log('------------------------- grater than winnersCount block ran') + + const winnersCountArray = [] + for (let i = 0; i < winnersCount; i++) { + winnersCountArray.push(i) + } + + for await (const item of winnersCountArray) { + await getWinner(participants) + } + } else { + // console.log('------------------------- less or equal to winnersCount block ran') + for await (const item of participants) { + if (!winnersMobileNumbers.includes(item.mobile)) { + winnersMobileNumbers.push(item.mobile) + winnersArray.push(item) + } + } + } + + // save result to db + lottery.winnersList = winnersArray + lottery.markModified('winnersList') + lottery.expired = true + lottery.save() + + // send sms for winners + for await (const item of winnersArray) { + const msg = [ + 'تبریک!!!', + '\n', + item.fullName, + ' عزیز شما در قرعه کشی آسان سرویس با کد پیگیری ', + item.enrollCode, + ' برنده شدید. به زودی از شرکت آسان سرویس با شما تماس گرفته خواهد شد. در صورتی که تا 3 روز کاری با شما تماس گرفته نشد میتوانید از طریق شماره 02167341 داخلی 200 و کد پیگیری خود جهت دریافت جایزه اقدام نماید.', + '\n', + phrases.thanks, + '\n', + phrases.signature + ] + + SMS([item.mobile], msg.join('')) + } + + /// /////////////////////////////////////////////////////// fake data for tests + + // for (let i = 0; i < 4; i++) { + // participants.push({ + // fullName: 'Amir Mohamadi 2', + // mobile: '34dfssdkfisjdf34534', + // serial: `S-ffasdfdf`, + // enrollCode: `CODE-${i}` + // }) + // console.log('--',i) + // } + + // lottery.participants = [] + + // lottery.markModified('participants') + // return lottery.save() + } catch (e) { + console.log('an error happend in drawLottery job --- error: ', e) + } + }, hour) + }, + checkUserSurveys() { + console.log('✅ --job: check users for surveys is running') + + return setInterval(async () => { + try { + const surveyCheck = await SurveyCheck.find({ smsSent: false }).populate('user') + for await (const item of surveyCheck) { + // timeout + const timeout = item.timeAdded + day * 7 + + // check if passed one week + if (Date.now() >= timeout) { + const survey = await Survey.findOne({ code: item.code }) + if (!survey?._id) { + const msg = [ + 'مشتری گرامی', + item.user.first_name + ' ' + item.user.last_name, + '\n', + 'لطفا با شرکت در نظرسنجی خدمات پس از فروش آسان سرویس، میزان رضایت خود از خدمات گارانتی را به ما اعلام کنید و ما را در ارائه خدمات بهتر یاری نمایید. به پاس همراهی شما عزیزان، بین شرکت کنندگان در نظرسنجی ابتدای هرماه به قید قرعه جوایزی اهدا خواهد شد.', + '\n', + 'لینک شرکت در نظر سنجی:', + '\n', + `https://asan-service.com/account/survey?code=${item.code}` + ] + SMS([item.user.mobile_number], msg.join(' ')) + item.smsSent = true + await item.save() + } + } + } + } catch (e) { + console.log(e) + } + }, day) + } +} + +/// /////// for develop usages +const permissions = require('./permissions') +const devTools = { + async checkUsersArpaAccounts() { + try { + const users = await User.find({ scope: ['user'], confirmed: true }) + let index = 0 + for await (const user of users) { + if (user.scope.includes('user')) { + // if (!user.panatech_businessID && !user.panatech_businessCode) { + // const panatechID = await saveUserToArpa(user, 'panatech') + // user.panatech_businessID = panatechID.businessID + // user.panatech_businessCode = panatechID.businessCode + // await user.save() + // console.log('🚀 ~ file: cronJobs.js ~ panatechID.businessCode', index) + // } + + index++ + } + } + } catch (e) { + console.log('we got error --- ', e) + } + }, + async addNewPermissionsToPrivateAdmin() { + console.log('addNewPermissionsToPrivateAdmin started') + + try { + const users = await User.find({ private: true }) + + for await (const user of users) { + // console.log('🚀 ~ file: cronJobs.js ~ line 187 ~ forawait ~ user', user) + user.permissions = [] + for await (const permission of permissions) { + user.permissions.push(permission.value) + // console.log('🚀 ~ file: cronJobs.js ~ line 190 ~ forawait ~ permission', permission.value) + } + await user.save() + } + } catch (e) { + console.log(e) + } + }, + async findDuplicatedUsers() { + try { + const usersArray = new Set() + const duplicatedUsersArray = new Set() + + const users = await User.find({ scope: ['user'] }) + + for await (const user of users) { + if (!usersArray.has(user.mobile_number)) usersArray.add(user.mobile_number) + else duplicatedUsersArray.add(user.mobile_number) + } + console.log( + '🚀 ~ file: cronJobs.js ~ line 220 ~ findDuplicatedUsers ~ duplicatedUsersArray', + duplicatedUsersArray + ) + console.log( + '🚀 ~ file: cronJobs.js ~ line 220 ~ findDuplicatedUsers ~ duplicatedUsersArray', + duplicatedUsersArray.size + ) + } catch (e) { + console.log('🚀 ~ file: cronJobs.js ~ line 223 ~ findDuplicatedUsers - catch ~ e', e) + } + } +} + +module.exports = () => { + jobs.checkUserActivation() + jobs.drawLottery() + jobs.checkIfAnnouncementsExpired() + jobs.checkUserSurveys() + + // remember to run it once !!! + // devTools.checkUsersArpaAccounts() + // devTools.addNewPermissionsToPrivateAdmin() + // devTools.findDuplicatedUsers() +} diff --git a/server/plugins/iranCities.js b/server/plugins/iranCities.js new file mode 100644 index 0000000..f635200 --- /dev/null +++ b/server/plugins/iranCities.js @@ -0,0 +1,386 @@ +// province cities +const eastazarbaijan1 = [ + 'آذرشهر', + 'اسکو', + 'اهر', + 'بستان‌آباد', + 'بناب', + 'تبریز', + 'جلفا', + 'چاراویماق', + 'سراب', + 'شبستر', + 'مراغه' +] +const westazarbaijan2 = [ + 'ارومیه', + 'اشنویه', + 'بوکان', + 'پیرانشهر', + 'تکاب', + 'چالدران', + 'خوی', + 'سردشت', + 'سلماس', + 'شاهین‌دژ', + 'ماکو', + 'مهاباد', + 'میاندوآب', + 'نقده' +] +const ardabil3 = ['اردبیل', 'بیله‌سوار', 'پارس‌آباد', 'خلخال', 'کوثر', 'گِرمی', 'مِشگین‌شهر', 'نَمین', 'نیر'] +const esfahan4 = [ + 'آران و بیدگل', + 'اردستان', + 'اصفهان', + 'برخوار و میمه', + 'تیران و کرون', + 'چادگان', + 'خمینی‌شهر', + 'خوانسار', + 'سمیرم', + 'شهرضا', + 'سمیرم سفلی', + 'فریدن', + 'فریدون‌شهر', + 'فلاورجان', + 'کاشان', + 'گلپایگان', + 'لنجان', + 'مبارکه', + 'نائین', + 'نجف‌آباد', + 'نطنز' +] +const ilam5 = ['آبدانان', 'ایلام', 'ایوان', 'دره‌شهر', 'دهلران', 'شیروان و چرداول', 'مهران'] +const booshehr6 = ['بوشهر', 'تنگستان', 'جم', 'دشتستان', 'دشتی', 'دیر', 'دیلم', 'کنگان', 'گناوه'] +const tehran7 = [ + 'اسلام‌شهر', + 'پاکدشت', + 'تهران', + 'دماوند', + 'رباط‌کریم', + 'ری', + 'ساوجبلاغ', + 'شمیرانات', + 'شهریار', + 'فیروزکوه', + 'ورامین' +] +const chaharmahalobakhtiari8 = ['اردل', 'بروجن', 'شهرکرد', 'فارسان', 'کوهرنگ', 'لردگان'] +const khorasanjonoobi9 = ['بیرجند', 'درمیان', 'سرایان', 'سربیشه', 'فردوس', 'قائنات', 'نهبندان'] +const khorasanrazavi10 = [ + 'بردسکن', + 'تایباد', + 'تربت جام', + 'تربت حیدریه', + 'چناران', + 'خلیل‌آباد', + 'خواف', + 'درگز', + 'رشتخوار', + 'سبزوار', + 'سرخس', + 'فریمان', + 'قوچان', + 'کاشمر', + 'کلات', + 'گناباد', + 'مشهد', + 'مه ولات', + 'نیشابور' +] +const khorasanshomali11 = ['اسفراین', 'بجنورد', 'جاجرم', 'شیروان', 'فاروج', 'مانه و سملقان'] +const khoozestan12 = [ + 'آبادان', + 'امیدیه', + 'اندیمشک', + 'اهواز', + 'ایذه', + 'باغ‌ملک', + 'بندر ماهشهر', + 'بهبهان', + 'خرمشهر', + 'دزفول', + 'دشت آزادگان', + 'رامشیر', + 'رامهرمز', + 'شادگان', + 'شوش', + 'شوشتر' +] +const zanjan13 = ['ابهر', 'ایجرود', 'خدابنده', 'خرمدره', 'زنجان', 'طارم', 'ماه‌نشان'] +const semnan14 = ['دامغان', 'سمنان', 'شاهرود', 'گرمسار', 'مهدی‌شهر'] +const sistanobaloochestan15 = [ + 'ایرانشهر', + 'چابهار', + 'خاش', + 'دلگان', + 'زابل', + 'زاهدان', + 'زهک', + 'سراوان', + 'سرباز', + 'کنارک', + 'نیک‌شهر' +] +const fars16 = [ + 'آباده', + 'ارسنجان', + 'استهبان', + 'اقلید', + 'بوانات', + 'پاسارگاد', + 'جهرم', + 'خرم‌بید', + 'خنج', + 'داراب', + 'زرین‌دشت', + 'سپیدان', + 'شیراز', + 'فراشبند', + 'فسا', + 'فیروزآباد', + 'قیر و کارزین', + 'کازرون', + 'لارستان', + 'لامِرد', + 'مرودشت', + 'ممسنی', + 'مهر', + 'نی‌ریز' +] +const qazvin17 = ['آبیک', 'البرز', 'بوئین‌زهرا', 'تاکستان', 'قزوین'] +const qom18 = ['قم'] +const kordestan19 = ['بانه', 'بیجار', 'دیواندره', 'سروآباد', 'سقز', 'سنندج', 'قروه', 'کامیاران', 'مریوان'] +const kerman20 = [ + 'بافت', + 'بردسیر', + 'بم', + 'جیرفت', + 'راور', + 'رفسنجان', + 'رودبار جنوب', + 'زرند', + 'سیرجان', + 'شهر بابک', + 'عنبرآباد', + 'قلعه گنج', + 'کرمان', + 'کوهبنان', + 'کهنوج', + 'منوجان' +] +const kermanshah21 = [ + 'اسلام‌آباد غرب', + 'پاوه', + 'ثلاث باباجانی', + 'جوانرود', + 'دالاهو', + 'روانسر', + 'سرپل ذهاب', + 'سنقر', + 'صحنه', + 'قصر شیرین', + 'کرمانشاه', + 'کنگاور', + 'گیلان غرب', + 'هرسین' +] +const kohkilooyevaboyrahmad22 = ['بویراحمد', 'بهمئی', 'دنا', 'کهگیلویه', 'گچساران'] +const golestan23 = [ + 'آزادشهر', + 'آق‌قلا', + 'بندر گز', + 'ترکمن', + 'رامیان', + 'علی‌آباد', + 'کردکوی', + 'کلاله', + 'گرگان', + 'گنبد کاووس', + 'مراوه‌تپه', + 'مینودشت' +] +const gilan24 = [ + 'آستارا', + 'آستانه اشرفیه', + 'اَملَش', + 'بندر انزلی', + 'رشت', + 'رضوانشهر', + 'رودبار', + 'رودسر', + 'سیاهکل', + 'شَفت', + 'صومعه‌سرا', + 'طوالش', + 'فومَن', + 'لاهیجان', + 'لنگرود', + 'ماسال' +] +const lorestan25 = ['ازنا', 'الیگودرز', 'بروجرد', 'پل‌دختر', 'خرم‌آباد', 'دورود', 'دلفان', 'سلسله ,کوهدشت'] +const mazandaran26 = [ + 'آمل', + 'بابل', + 'بابلسر', + 'بهشهر', + 'تنکابن', + 'جویبار', + 'چالوس', + 'رامسر', + 'ساری', + 'سوادکوه', + 'قائم‌شهر', + 'گلوگاه', + 'محمودآباد', + 'نکا', + 'نور', + 'نوشهر' +] +const markazi27 = ['آشتیان', 'اراک', 'تفرش', 'خمین', 'دلیجان', 'زرندیه', 'ساوه', 'شازند', 'کمیجان', 'محلات'] +const hormozgan28 = [ + 'ابوموسی', + 'بستک', + 'بندر عباس', + 'بندر لنگه', + 'جاسک', + 'حاجی‌آباد', + 'شهرستان خمیر', + 'رودان', + 'قشم', + 'گاوبندی', + 'میناب' +] +const hamedan29 = ['اسدآباد', 'بهار', 'تویسرکان', 'رزن', 'کبودرآهنگ', 'ملایر', 'نهاوند', 'همدان'] +const yazd30 = ['ابرکوه', 'اردکان', 'بافق', 'تفت', 'خاتم', 'صدوق', 'طبس', 'مهریز', 'مِیبُد', 'یزد'] +const alborz31 = ['کرج', 'نظرآباد', 'فردیس', 'اشتهارد', 'هشتگرد', 'طالقان'] + +// provinces list +module.exports.iranCities = [ + { + name: 'آذربایجان شرقی', + cities: eastazarbaijan1 + }, + { + name: 'آذربایجان غربی', + cities: westazarbaijan2 + }, + { + name: 'اردبیل', + cities: ardabil3 + }, + { + name: 'اصفهان', + cities: esfahan4 + }, + { + name: 'ایلام', + cities: ilam5 + }, + { + name: 'بوشهر', + cities: booshehr6 + }, + { + name: 'تهران', + cities: tehran7 + }, + { + name: 'چهارمحال بختیاری', + cities: chaharmahalobakhtiari8 + }, + { + name: 'خراسان جنوبی', + cities: khorasanjonoobi9 + }, + { + name: 'خراسان رضوی', + cities: khorasanrazavi10 + }, + { + name: 'خراسان شمالی', + cities: khorasanshomali11 + }, + { + name: 'خوزستان', + cities: khoozestan12 + }, + { + name: 'زنجان', + cities: zanjan13 + }, + { + name: 'سمنان', + cities: semnan14 + }, + { + name: 'سیستان بلوچستان', + cities: sistanobaloochestan15 + }, + { + name: 'فارس', + cities: fars16 + }, + { + name: 'قزوین', + cities: qazvin17 + }, + { + name: 'قم', + cities: qom18 + }, + { + name: 'کردستان', + cities: kordestan19 + }, + { + name: 'کرمان', + cities: kerman20 + }, + { + name: 'کرمانشاه', + cities: kermanshah21 + }, + { + name: 'کهکیلویه و بویراحمد', + cities: kohkilooyevaboyrahmad22 + }, + { + name: 'گلستان', + cities: golestan23 + }, + { + name: 'گیلان', + cities: gilan24 + }, + { + name: 'لرستان', + cities: lorestan25 + }, + { + name: 'مازندران', + cities: mazandaran26 + }, + { + name: 'مرکزی', + cities: markazi27 + }, + { + name: 'هرمزگان', + cities: hormozgan28 + }, + { + name: 'همدان', + cities: hamedan29 + }, + { + name: 'یزد', + cities: yazd30 + }, + { + name: 'البرز', + cities: alborz31 + } +] diff --git a/server/plugins/permissions.js b/server/plugins/permissions.js new file mode 100644 index 0000000..6523808 --- /dev/null +++ b/server/plugins/permissions.js @@ -0,0 +1,106 @@ +module.exports = [ + { + name: 'مدیریت کاربران', + value: 'admins' + }, + { + name: 'مشاهده پیام های تماس با ما', + value: 'contact-us' + }, + { + name: 'مدیریت دسته بندی دانلودها', + value: 'download-categories' + }, + { + name: 'مدیریت دانلودها', + value: 'downloads' + }, + { + name: 'مدیریت سوالات متداول', + value: 'faq' + }, + { + name: 'مدیریت آموزش ها', + value: 'learning' + }, + { + name: 'مدیریت تیکت ها', + value: 'tickets' + }, + { + name: 'اپلود فایل اکسل (شماره سریال گارانتی)', + value: 'serials-exel' + }, + { + name: 'مدیریت شرایط گارانتی', + value: 'warranty-terms' + }, + { + name: 'مدیریت مشتریان', + value: 'customers' + }, + { + name: 'مدیریت راهنمای ثبت گارانتی', + value: 'help' + }, + { + name: 'مدیریت اعلانات و اطلاعیه ها', + value: 'announcements' + }, + { + name: 'ارسال پیامک', + value: 'sms' + }, + { + name: 'مدیریت ظاهر دکمه قرعه کشی', + value: 'lotteryPopUp' + }, + { + name: 'مدیریت قرعه کشی', + value: 'lottery' + }, + { + name: 'مدیریت درخواست های نمایندگی', + value: 'representations' + }, + { + name: 'مدیریت نمایندگان', + value: 'agents' + }, + { + name: 'ویرایش اطلاعات نمایندگان', + value: 'agentUpdate' + }, + { + name: 'مشاهده صندوق ورودی نمایندگان', + value: 'agentsInbox' + }, + { + name: 'مدیریت قطعات', + value: 'pieces' + }, + { + name: 'مدیریت درخواست قطعه', + value: 'piece-requests' + }, + { + name: 'مدیریت درخواست کالای بافر', + value: 'buffer-requests' + }, + { + name: 'مدیریت درخواست قطعه داغی', + value: 'op-requests' + }, + { + name: 'مشاهده فرم عملکرد گارانتی نمایندگان', + value: 'guarantee-reports' + }, + { + name: 'گزارشات', + value: 'agentReports' + }, + { + name: 'نظر سنجی', + value: 'surveys' + } +] diff --git a/server/plugins/serverResponses.js b/server/plugins/serverResponses.js new file mode 100644 index 0000000..8900a12 --- /dev/null +++ b/server/plugins/serverResponses.js @@ -0,0 +1,744 @@ +module.exports._sr = { + fa: { + required: { + token: 'توکن را وارد کنید', + field: 'این فیلد نباید خالی باشد', + // developer validations + remember_me: 'پارامتر remember_me الزامی است', + // registration validations + name: 'نام را وارد کنید', + first_name: 'نام را وارد کنید', + last_name: 'نام خانوادگی را وارد کنید', + email: 'ایمیل را وارد کنید', + national_code: 'کد ملی الزامی است', + email_personal: 'ایمیل شخصی الزامی است', + email_company: 'ایمیل کمپانی برای اشخاص حقوقی الزامی است', + company_name: 'درصورتی که شخص حقوقی هستید، نام کمپانی را وارد کنید', + username: 'نام کاربری را وارد کنید', + phone_number: 'شماره تماس را وارد کنید', + password: 'پسورد را وارد کنید', + birthdate: 'تاریخ تولد را وارد کنید', + // addressing validations + country: 'کشور را وارد کنید', + province: 'استان را وارد کنید', + city: 'شهر را وارد کنید', + address: 'آدرس را وارد کنید', + postal_code: 'کد پستی را وارد کنید', + plaque: 'پلاک را وارد کنید', + receiver_first_name: 'نام گیرنده را وارد کنید', + receiver_last_name: 'نام خانوادگی گیرنده را وارد کنید', + receiver_mobile: 'شماره موبایل گیرنده را وارد کنید', + // global (post - gallery - ...) + title: 'عنوان را وارد کنید', + caption: 'متن را وارد کنید', + description: 'توضیحات را وارد کنید', + category: 'دسته بندی را انتخاب کنید', + image: 'عکس اجباری است', + cover: 'کاور اجباری است', + file: 'فایل اجباری است', + message: 'پیام را بنویسید', + quantity: 'تعداد را وارد کنید', + date: 'تاریخ را وارد کنید', + reason: 'دلیل را انتخاب کنید', + question: 'سوال را بنویسید', + answer: 'جواب را بنویسید', + price: 'قیمت را وارد کنید', + type: 'نوع را انتخاب کنید', + discount_code: 'کد تخفیف را وارد کنید', + discount_amount: 'مقدار تخفیف را وارد کنید', + discount_expire_date: 'تاریخ انقضای کد تخفیف را مشخص کنید', + user_id: 'کاربر را انتخاب کنید', + video: 'ویدیو اجباری است' + }, + format: { + phone_number: 'فرمت شماره تماس صحیح نیست', + email: 'فرمت ایمیل قابل قبول نیست', + number: 'مقدار باید از جنس عدد باشد', + boolean: 'مقدار باید از جنس Boolean باشد', + image: 'فرمت عکس قابل قبول نیست', + video: 'فرمت ویدیو قابل قبول نیست', + national_code: 'کد ملی صحیح نیست' + }, + min_char: { + min2: 'حداقل 2 کاراکتر', + min4: 'حداقل 4 کاراکتر', + min8: 'حداقل 8 کاراکتر', + min10: 'حداقل 10 کاراکتر', + min20: 'حداقل 20 کاراکتر', + min30: 'حداقل 30 کاراکتر', + min40: 'حداقل 40 کاراکتر', + min50: 'حداقل 50 کاراکتر', + min60: 'حداقل 60 کاراکتر', + min100: 'حداقل 100 کاراکتر', + min120: 'حداقل 120 کاراکتر', + min150: 'حداقل 150 کاراکتر', + min200: 'حداقل 200 کاراکتر', + data_size: 'حجم قابل قبول حداقل: ', + image_width_size: 'عرض حداقل: ', + image_height_size: 'ارتفاع حداقل: ' + }, + max_char: { + max4: 'حداکثر 4 کاراکتر', + max8: 'حداکثر 8 کاراکتر', + max10: 'حداکثر 10 کاراکتر', + max15: 'حداکثر 15 کاراکتر', + max20: 'حداکثر 20 کاراکتر', + max30: 'حداکثر 30 کاراکتر', + max40: 'حداکثر 40 کاراکتر', + max50: 'حداکثر 50 کاراکتر', + max60: 'حداکثر 60 کاراکتر', + max100: 'حداکثر 100 کاراکتر', + max120: 'حداکثر 120 کاراکتر', + max150: 'حداکثر 150 کاراکتر', + max200: 'حداکثر 200 کاراکتر', + data_size: 'حجم قابل قبول حداکثر: ', + image_width_size: 'عرض حداکثر: ', + image_height_size: 'ارتفاع حداکثر: ' + }, + not_found: { + user_id: 'کاربری با این مشخصات وجود ندارد', + admin_id: 'ادمینی با این مشخصات وجود ندارد', + order_id: 'سفارشی با این مشخصات وجود ندارد', + item_id: 'موردی با این مشخصات وجود ندارد', + password: 'رمز عبور یا آیدی درست نیست' + }, + duplicated: { + username: 'این نام کاربری از قبل وجود دارد', + email: 'این ایمیل از قبل وجود دارد', + name: 'نام تکراری است', + title: 'عنوان تکراری است', + phone_number: 'این شماره تماس از قبل وجود دارد' + }, + response: { + logged_in: 'شما وارد سیستم شدید', + not_logged_in: 'شما وارد سیستم نشدید', + logged_out: 'شما از سیستم خارج شدید', + unauthenticated: 'غیرمجاز', + recovery_link: 'لینک بازیابی فرستاده شد', + success_save: 'با موفقیت ثبت شد', + success_remove: 'با موفقیت حذف شد', + cart_empty: 'سبد خرید خالی است', + already_has_address: 'آدرس قبلا اضافه شده', + activation_code: 'کد فعالسازی برای شما ارسال شد', + activation_email: 'ایمیل فعال سازی برای شما ارسال شد', + expired_reset_link: 'این لینک بازیابی منقضی شده است', + email_not_confirmed: 'ابتدا ایمیل خود را تایید کنید،لینک فعال سازی قبلا برای شما فرستاده شده است.', + expired_activation_link: 'این لینک فعال سازی منقضی شده است', + success_activation: 'اکانت شما با موفقیت فعال شد', + passwords_not_match: 'پسورد ها یکی نیست', + problem: 'مشکلی پیش آمده، لطفا دوباره تلاش کنید.', + latinChar: 'لطفا با حروف لاتین بنویسید', + persianChar: 'لطفا با حروف فارسی بنویسید', + whiteSpace: 'بین حروف و کلمات نباید فاصله باشد' + }, + file_types: { + jpg: 'فقط فرمت jpg قابل قبول است', + png: 'فقط فرمت png قابل قبول است', + gif: 'فقط فرمت gif قابل قبول است', + pdf: 'فقط فرمت pdf قابل قبول است', + txt: 'فقط فرمت txt قابل قبول است', + log: 'فقط فرمت log قابل قبول است', + mp3: 'فقط فرمت mp3 قابل قبول است', + ogg: 'فقط فرمت ogg قابل قبول است', + wmv: 'فقط فرمت wmv قابل قبول است', + mp4: 'فقط فرمت mp4 قابل قبول است', + mov: 'فقط فرمت mov قابل قبول است', + mkv: 'فقط فرمت mkv قابل قبول است', + flv: 'فقط فرمت flv قابل قبول است' + } + }, + en: { + required: { + token: 'Token is required', + field: 'This field is required', + // developer validations + remember_me: 'Remember_me parameter required', + // registration validations + name: 'Enter name', + first_name: 'Enter first name', + last_name: 'Enter last name', + national_code: 'National code is required', + email: 'Enter email', + email_personal: 'Personal email is required', + email_company: 'Company email is required for legal entities', + company_name: 'Enter company name if you are a legal entity', + username: 'Enter username', + phone_number: 'Enter phone number', + password: 'Enter password', + birthdate: 'Enter birthdate', + // addressing validations + country: 'Enter country', + province: 'Enter province', + city: 'Enter city', + address: 'Enter address', + postal_code: 'Enter postal code', + plaque: 'Enter plaque', + receiver_first_name: 'Enter recipient name', + receiver_last_name: 'Enter recipient surname', + receiver_mobile: "Enter recipient's mobile number", + // global (post - gallery - ...) + title: 'Enter title', + caption: 'Enter caption', + description: 'Enter description', + category: 'Select category', + image: 'Image is required', + cover: 'Cover is required', + file: 'File is required', + message: 'Write message', + quantity: 'Enter quantity', + date: 'Enter date', + reason: 'Select reason', + question: 'Write the question', + answer: 'Write the answer', + price: 'Enter Price', + type: 'Select type', + discount_code: 'Enter discount code', + discount_amount: 'Enter discount amount', + discount_expire_date: 'Specify discount code expiration date', + user_id: 'Select user', + video: 'Video is required' + }, + format: { + phone_number: 'Phone number format in incorrect', + email: 'Email format is not correct', + number: 'Value must be number', + boolean: 'Value must be Boolean', + image: 'Photo format is not acceptable', + video: 'Video format is not acceptable', + national_code: 'National code format is not correct' + }, + min_char: { + min2: 'At least 2 characters', + min4: 'At least 4 characters', + min8: 'At least 8 characters', + min10: 'At least 10 characters', + min20: 'At least 20 characters', + min30: 'At least 30 characters', + min40: 'At least 40 characters', + min50: 'At least 50 characters', + min60: 'At least 60 characters', + min100: 'At least 100 characters', + min120: 'At least 120 characters', + min150: 'At least 150 characters', + min200: 'At least 200 characters', + data_size: 'Acceptable minimum size: ', + image_width_size: 'Minimum width: ', + image_height_size: 'Minimum height: ' + }, + max_char: { + max4: 'Maximum 4 characters', + max8: 'Maximum 8 characters', + max10: 'Maximum 10 characters', + max15: 'Maximum 15 characters', + max20: 'Maximum 20 characters', + max30: 'Maximum 30 characters', + max40: 'Maximum 40 characters', + max50: 'Maximum 50 characters', + max60: 'Maximum 60 characters', + max100: 'Maximum 100 characters', + max120: 'Maximum 120 characters', + max150: 'Maximum 150 characters', + max200: 'Maximum 200 characters', + data_size: 'Maximum acceptable size: ', + image_width_size: 'Maximum width: ', + image_height_size: 'Maximum height: ' + }, + not_found: { + user_id: 'There is no user with this profile', + admin_id: 'There is no admin with this profile', + order_id: 'There is no order with this profile', + item_id: 'There is no item with this specification', + password: 'Password or ID is incorrect' + }, + duplicated: { + username: 'This username already exists', + email: 'This email already exists', + name: 'Name already exists', + title: 'Title already exists', + phone_number: 'Phone number already exists' + }, + response: { + logged_in: 'You are logged in', + not_logged_in: 'You are not logged in', + logged_out: 'You are logged out', + unauthenticated: 'unauthenticated', + recovery_link: 'Recovery link sent', + success_save: 'Successfully saved', + success_remove: 'Successfully removed', + cart_empty: 'Cart is empty', + already_has_address: 'Already has address', + activation_code: 'Activation code sent to you', + activation_email: 'Activation email sent to you', + expired_reset_link: 'The current reset pass link has been expired', + email_not_confirmed: 'Confirm your email first, the activation link has already been sent to you.', + expired_activation_link: 'This activation link has expired', + success_activation: 'Your account has been successfully activated', + passwords_not_match: 'Passwords are not the same', + problem: 'There is a problem, please try again.', + latinChar: 'Please write in Latin letters', + persianChar: 'Please write in Persian letters', + whiteSpace: 'There should be no space between letters and words' + }, + file_types: { + jpg: 'Only jpg format is acceptable', + png: 'Only png format is acceptable', + gif: 'Only gif format is acceptable', + pdf: 'Only pdf format is acceptable', + txt: 'Only txt format is acceptable', + log: 'Only log format is acceptable', + mp3: 'Only mp3 format is acceptable', + ogg: 'Only ogg format is acceptable', + wmv: 'Only wmv format is acceptable', + mp4: 'Only mp4 format is acceptable', + mov: 'Only mov format is acceptable', + mkv: 'Only mkv format is acceptable', + flv: 'Only flv format is acceptable' + } + }, + de: { + required: { + token: 'Token is required', + field: 'This field is required', + // developer validations + remember_me: 'Remember_me-Parameter erforderlich', + // registration validations + name: 'Name eingeben', + first_name: 'Name eingeben', + last_name: 'Nachnamen eingeben', + national_code: 'Nationaler Code ist erforderlich', + email: 'Email eingeben', + email_personal: 'Persönliche E-Mail ist erforderlich', + email_company: 'Für juristische Personen ist eine Unternehmens-E-Mail erforderlich', + company_name: 'Geben Sie den Firmennamen ein, wenn Sie eine juristische Person sind', + username: 'Geben Sie den Benutzernamen ein', + phone_number: 'Telefonnummer eingeben', + password: 'Passwort eingeben', + birthdate: 'Enter birthdate', + // addressing validations + country: 'Land eingeben', + province: 'Stadt betreten', + city: 'Stadt betreten', + address: 'Adresse eingeben', + postal_code: 'Postleitzahl eingeben', + plaque: 'Plakette eingeben', + receiver_first_name: 'Empfängername eingeben', + receiver_last_name: 'Nachname des Empfängers eingeben', + receiver_mobile: 'Handynummer des Empfängers eingebenr', + // global (post - gallery - ...) + title: 'Titel eingeben', + caption: 'Beschriftung eingeben', + description: 'Beschreibung eingeben', + category: 'Kategorie wählen', + image: 'Bild ist erforderlich', + cover: 'Bild ist erforderlich Abdeckung ist erforderlich', + file: 'Datei ist erforderlich', + message: 'Nachricht schreiben', + quantity: 'Menge eingeben', + date: 'Enter date', + reason: 'Grund auswählen', + question: 'Schreibe die Frage', + answer: 'Schreibe die Antwort', + price: 'Enter Price', + type: 'Select type', + discount_code: 'Enter discount code', + discount_amount: 'Enter discount amount', + discount_expire_date: 'Specify discount code expiration date', + user_id: 'Select user', + video: 'Video is required' + }, + format: { + phone_number: 'Telefonnummernformat falsch', + email: 'E-Mail-Format nicht korrekt', + number: 'Wert muss Nummer sein', + boolean: 'Wert muss Boolescher Wert sein', + image: 'Photo format is not acceptable', + video: 'Video format is not acceptable', + national_code: 'Nationales Codeformat ist nicht korrekt' + }, + min_char: { + min2: 'Mindestens 2 Zeichen', + min4: 'Mindestens 4 Zeichen', + min8: 'Mindestens 8 Zeichen', + min10: 'Mindestens 10 Zeichen', + min20: 'Mindestens 20 Zeichen', + min30: 'Mindestens 30 Zeichen', + min40: 'Mindestens 40 Zeichen', + min50: 'Mindestens 50 Zeichen', + min60: 'Mindestens 60 Zeichen', + min100: 'Mindestens 100 Zeichen', + min120: 'Mindestens 120 Zeichen', + min150: 'Mindestens 150 Zeichen', + min200: 'Mindestens 200 Zeichen', + data_size: 'Akzeptable Mindestgröße: ', + image_width_size: 'Mindestbreite: ', + image_height_size: 'Mindesthöhe: ' + }, + max_char: { + max4: 'Maximal 4 Zeichen', + max8: 'Maximal 8 Zeichen', + max10: 'Maximal 10 Zeichen', + max15: 'Maximal 15 Zeichen', + max20: 'Maximal 20 Zeichen', + max30: 'Maximal 30 Zeichen', + max40: 'Maximal 40 Zeichen', + max50: 'Maximal 50 Zeichen', + max60: 'Maximal 60 Zeichen', + max100: 'Maximal 100 Zeichen', + max120: 'Maximal 120 Zeichen', + max150: 'Maximal 150 Zeichen', + max200: 'Maximal 200 Zeichen', + data_size: 'Maximal zulässige Größe: ', + image_width_size: 'Maximale Breite: ', + image_height_size: 'Maximale Höhe: ' + }, + not_found: { + user_id: 'Es gibt keinen Benutzer mit diesem Profil', + admin_id: 'Es gibt keinen Administrator mit diesem Profil', + order_id: 'Es gibt keine Bestellung mit diesem Profil', + item_id: 'Es gibt keinen Artikel mit dieser Spezifikation', + password: 'Passwort oder ID ist falsch' + }, + duplicated: { + username: 'Dieser Benutzername existiert bereits', + email: 'Diese E-Mail existiert bereits', + name: 'Name ist doppelt', + title: 'Titel ist doppelt', + phone_number: 'Phone number already exists' + }, + response: { + logged_in: 'Sie sind angemeldet', + not_logged_in: 'Sie sind nicht angemeldet', + logged_out: 'Sie sind abgemeldet', + unauthenticated: 'nicht authentifiziert', + recovery_link: 'Wiederherstellungslink gesendet', + success_save: 'Erfolgreich gespeichert', + success_remove: 'Erfolgreich entfernt', + cart_empty: 'Warenkorb ist leer', + ready_has_address: 'Hat bereits Adresse', + activation_code: 'Activation code sent to you', + activation_email: 'Activation email sent to you', + expired_reset_link: 'Der aktuelle Reset-Pass-Link ist abgelaufen', + email_not_confirmed: 'Bestätigen Sie zuerst Ihre E-Mail, der Aktivierungslink wurde bereits an Sie gesendet.', + expired_activation_link: 'Dieser Aktivierungslink ist abgelaufen', + success_activation: 'Ihr Konto wurde erfolgreich aktiviert', + passwords_not_match: 'Passwörter sind nicht dasselbe', + problem: 'Es gibt ein Problem, bitte versuchen Sie es erneut.', + latinChar: 'Please write in Latin letters', + persianChar: 'Please write in Persian letters', + whiteSpace: 'There should be no space between letters and words' + }, + file_types: { + jpg: 'Nur das jpg-Format ist akzeptabel', + png: 'Nur das png-Format ist akzeptabel', + gif: 'Nur das gif-Format ist akzeptabel', + pdf: 'Nur das PDF-Format ist akzeptabel', + txt: 'Nur das txt-Format ist akzeptabel', + log: 'Nur das log-Format ist akzeptabel', + mp3: 'Nur das mp3-Format ist akzeptabel', + ogg: 'Nur das ogg-Format ist akzeptabel', + wmv: 'Nur das wmv-Format ist akzeptabel', + mp4: 'Nur das mp4-Format ist akzeptabel', + mov: 'Nur das mov-Format ist akzeptabel', + mkv: 'Nur das mkv-Format ist akzeptabel', + flv: 'Nur das flv-Format ist akzeptabel' + } + }, + tr: { + required: { + token: 'Token is required', + field: 'This field is required', + // geliştirici doğrulamaları + Remember_me: 'Remember_me parametresi gerekli', + // kayıt doğrulamaları + name: 'Adı girin', + first_name: 'Adı girin', + last_name: 'Soyadı girin', + national_code: 'Nationaler Kodu erforderlich', + email: 'E-posta girin', + email_personal: 'Kişisel e-posta gereklidir', + email_company: 'Tüzel kişiler için şirket e-postası gereklidir', + company_name: 'Tüzel kişiyseniz şirket adını girin', + username: 'Kullanıcı adını girin', + phone_number: 'Telefon numarasını girin', + password: 'Şifre girin', + birthdate: 'Enter birthdate', + // doğrulamaları adresleme + country: 'Ülke girin', + province: 'İl girin', + city: 'Şehir girin', + address: 'Adres girin', + postal_code: 'Posta kodunu girin', + plaque: 'Plak girin', + receiver_first_name: 'Alıcı adını girin', + receiver_last_name: 'Alıcının soyadını girin', + receiver_mobile: 'Alıcının cep telefonu numarasını girin', + // global (post - galeri - ...) + title: 'Başlığı girin', + caption: 'Başlık girin', + description: 'Açıklama girin', + category: 'Kategori seçin', + image: 'Resim gerekli', + cover: 'Kapak gereklidir', + file: 'Dosya gerekli', + message: 'Mesaj yaz', + quantity: 'Miktar girin', + date: 'Enter date', + reason: 'Nedeni seçin', + question: 'Soruyu yazın', + answer: 'Cevabı yaz', + price: 'Enter Price', + type: 'Select type', + discount_code: 'Enter discount code', + discount_amount: 'Enter discount amount', + discount_expire_date: 'Specify discount code expiration date', + user_id: 'Select user', + video: 'Video is required' + }, + format: { + phone_number: 'Telefon numarası biçimi yanlış', + email: 'E-posta formatı doğru değil', + number: 'Değer sayı olmalıdır', + boolean: 'Değer Boole olmalıdır', + image: 'Photo format is not acceptable', + video: 'Video format is not acceptable', + national_code: 'Ulusal kod formatı doğru değil' + }, + min_char: { + min2: 'En az 2 karakter', + min4: 'En az 4 karakter', + min8: 'En az 8 karakter', + min10: 'En az 10 karakter', + min20: 'En az 20 karakter', + min30: 'En az 30 karakter', + min40: 'En az 40 karakter', + min50: 'En az 50 karakter', + min60: 'En az 60 karakter', + min100: 'En az 100 karakter', + min120: 'En az 120 karakter', + min150: 'En az 150 karakter', + min200: 'En az 200 karakter', + data_size: 'Kabul edilebilir minimum boyut: ', + image_width_size: 'Minimum genişlik: ', + image_height_size: 'Minimum yükseklik: ' + }, + max_char: { + max4: 'Maksimum 4 karakter', + max8: 'Maksimum 8 karakter', + max10: 'Maksimum 10 karakter', + max15: 'Maksimum 15 karakter', + max20: 'Maksimum 20 karakter', + max30: 'Maksimum 30 karakter', + max40: 'Maksimum 40 karakter', + max50: 'Maksimum 50 karakter', + max60: 'Maksimum 60 karakter', + max100: 'Maksimum 100 karakter', + max120: 'Maksimum 120 karakter', + max150: 'Maksimum 150 karakter', + max200: 'Maksimum 200 karakter', + data_size: 'Kabul edilebilir maksimum boyut: ', + image_width_size: 'Maksimum genişlik: ', + image_height_size: 'Maksimum yükseklik: ' + }, + not_found: { + user_id: 'Bu profile sahip kullanıcı yok', + admin_id: 'Bu profile sahip yönetici yok', + order_id: 'Bu profilde sipariş yok', + item_id: 'Bu spesifikasyona sahip hiçbir öğe yok', + password: 'Şifre veya kimlik yanlış' + }, + duplicated: { + username: 'Bu kullanıcı adı zaten mevcut', + email: 'Bu email zaten var', + name: 'Ad çift', + title: 'Başlık yineleniyor', + phone_number: 'Phone number already exists' + }, + response: { + logged_in: 'Giriş yaptınız', + not_logged_in: 'Giriş yapmadınız', + logged_out: 'Çıkış yaptınız', + unauthenticated: 'unauthenticated', + recovery_link: 'Kurtarma bağlantısı gönderildi', + success_save: 'Başarıyla kaydedildi', + success_remove: 'Başarıyla kaldırıldı', + cart_empty: 'Sepet boş', + already_has_address: 'Zaten adresi var', + activation_code: 'Activation code sent to you', + activation_email: 'Activation email sent to you', + expired_reset_link: 'Mevcut sıfırlama geçiş bağlantısının süresi doldu', + email_not_confirmed: 'Önce e-postanızı onaylayın, aktivasyon bağlantısı size zaten gönderildi.', + expired_activation_link: 'Bu aktivasyon bağlantısının süresi doldu', + success_activation: 'Hesabınız başarıyla etkinleştirildi', + passwords_not_match: 'Şifreler aynı değil', + problem: 'Bir sorun var, lütfen tekrar deneyin.', + latinChar: 'Please write in Latin letters', + persianChar: 'Please write in Persian letters', + whiteSpace: 'There should be no space between letters and words' + }, + file_types: { + jpg: 'Yalnızca jpg formatı kabul edilebilir', + png: 'Sadece png formatı kabul edilebilir', + gif: 'Yalnızca gif formatı kabul edilebilir', + pdf: 'Yalnızca pdf formatı kabul edilebilir', + txt: 'Yalnızca txt formatı kabul edilebilir', + log: 'Yalnızca log formatı kabul edilebilir', + mp3: 'Yalnızca mp3 formatı kabul edilebilir', + ogg: 'Yalnızca ogg formatı kabul edilebilir', + wmv: 'Yalnızca wmv formatı kabul edilebilir', + mp4: 'Yalnızca mp4 formatı kabul edilebilir', + mov: 'Yalnızca mov formatı kabul edilebilir', + mkv: 'Yalnızca mkv formatı kabul edilebilir', + flv: 'Yalnızca flv biçimi kabul edilebilir' + } + }, + it: { + required: { + token: 'Token is required', + field: 'This field is required', + // convalide dello sviluppatore + Remember_me: 'Remember_me parameter required', + // convalide della registrazione + name: 'Inserisci nome', + first_name: 'Inserisci nome', + last_name: 'Inserisci il cognome', + national_code: 'Il codice Nationaler è comune', + email: 'Enter email', + email_personal: "L'email personale è obbligatoria", + email_company: "L'email aziendale è obbligatoria per le persone giuridiche", + company_name: "Inserisci il nome dell'azienda se sei una persona giuridica", + username: 'Inserisci nome utente', + phone_number: 'Inserisci numero di telefono', + password: 'Inserisci password', + birthdate: 'Enter birthdate', + // indirizzamento delle convalide + country: 'Inserisci paese', + province: 'Inserisci provincia', + city: 'Inserisci città', + address: 'Inserisci indirizzo', + postal_code: 'Inserisci codice postale', + plaque: 'Inserisci targa', + receiver_first_name: 'Inserisci il nome del destinatario', + receiver_last_name: 'Inserisci il cognome del destinatario', + receiver_mobile: 'Inserisci il numero di cellulare del destinatario', + // globale (post - gallery - ...) + title: 'Inserisci titolo', + caption: 'Inserisci didascalia', + description: 'Inserisci descrizione', + category: 'Seleziona categoria', + image: "L'immagine è obbligatoria", + cover: 'Cover is required', + file: 'Il file è obbligatorio', + message: 'Scrivi messaggio', + quantity: 'Inserisci quantità', + date: 'Enter date', + reason: 'Seleziona motivo', + question: 'Scrivi la domanda', + answer: 'Scrivi la risposta', + price: 'Enter Price', + type: 'Select type', + discount_code: 'Enter discount code', + discount_amount: 'Enter discount amount', + discount_expire_date: 'Specify discount code expiration date', + user_id: 'Select user', + video: 'Video is required' + }, + format: { + phone_number: 'Formato del numero di telefono non corretto', + email: 'Formato email non corretto', + number: 'Il valore deve essere un numero', + boolean: 'Il valore deve essere booleano', + image: 'Photo format is not acceptable', + video: 'Video format is not acceptable', + national_code: 'Il formato del codice nazionale non è corretto' + }, + min_char: { + min2: 'Almeno 2 caratteri', + min4: 'Almeno 4 caratteri', + min8: 'Almeno 8 caratteri', + min10: 'Almeno 10 caratteri', + min20: 'Almeno 20 caratteri', + min30: 'Almeno 30 caratteri', + min40: 'Almeno 40 caratteri', + min50: 'Almeno 50 caratteri', + min60: 'Almeno 60 caratteri', + min100: 'Almeno 100 caratteri', + min120: 'Almeno 120 caratteri', + min150: 'Almeno 150 caratteri', + min200: 'Almeno 200 caratteri', + data_size: 'Dimensione minima accettabile: ', + image_width_size: 'Larghezza minima: ', + image_height_size: 'Altezza minima: ' + }, + max_char: { + max4: 'Massimo 4 caratteri', + max8: 'Massimo 8 caratteri', + max10: 'Massimo 10 caratteri', + max15: 'Massimo 15 caratteri', + max20: 'Massimo 20 caratteri', + max30: 'Massimo 30 caratteri', + max40: 'Massimo 40 caratteri', + max50: 'Massimo 50 caratteri', + max60: 'Massimo 60 caratteri', + max100: 'Massimo 100 caratteri', + max120: 'Massimo 120 caratteri', + max150: 'Massimo 150 caratteri', + max200: 'Massimo 200 caratteri', + data_size: 'Dimensione massima accettabile: ', + image_width_size: 'Larghezza massima: ', + image_height_size: 'Altezza massima: ' + }, + not_found: { + user_id: 'Nessun utente con questo profilo', + admin_id: 'Nessun amministratore con questo profilo', + order_id: 'Nessun ordine con questo profilo', + item_id: 'Nessun articolo con questa specifica', + password: "La password o l'ID non sono corretti" + }, + duplicated: { + username: 'Questo nome utente esiste già', + email: 'Questa email esiste già', + name: 'Il nome è duplicato', + title: 'Il titolo è duplicato', + phone_number: 'Phone number already exists' + }, + response: { + logged_in: "Hai effettuato l'accesso", + not_logged_in: 'Non sei loggato', + logged_out: 'Sei disconnesso', + unauthenticated: 'unauthenticated', + recovery_link: 'Link di ripristino inviato', + success_save: 'Salvataggio riuscito', + success_remove: 'Rimosso con successo', + cart_empty: 'Il carrello è vuoto', + already_has_address: 'Ha già indirizzo', + activation_code: 'Activation code sent to you', + activation_email: 'Activation email sent to you', + expired_reset_link: "L'attuale link del passaggio di reimpostazione è scaduto", + email_not_confirmed: 'Conferma prima la tua email, il link di attivazione ti è già stato inviato.', + expired_activation_link: 'Questo link di attivazione è scaduto', + success_activation: 'Il tuo account è stato attivato con successo', + passwords_not_match: 'Le password non sono le stesse', + problem: 'Si è verificato un problema, riprova.', + latinChar: 'Please write in Latin letters', + persianChar: 'Please write in Persian letters', + whiteSpace: 'There should be no space between letters and words' + }, + file_types: { + jpg: 'È accettabile solo il formato jpg', + png: 'È accettabile solo il formato png', + gif: 'È accettabile solo il formato GIF', + pdf: 'È accettabile solo il formato pdf', + txt: 'È accettabile solo il formato txt', + log: 'È accettabile solo il formato log', + mp3: 'È accettabile solo il formato mp3', + ogg: 'È accettabile solo il formato ogg', + wmv: 'È accettabile solo il formato wmv', + mp4: 'È accettabile solo il formato mp4', + mov: 'È accettabile solo il formato mov', + mkv: 'È accettabile solo il formato mkv', + flv: 'È accettabile solo il formato flv' + } + }, + supportedImageFormats: ['jpg', 'jpeg', 'png', 'svg', 'svg+xml', 'webp'], + supportedVideoFormats: ['mp4', 'wmv'] +} diff --git a/server/routes/admin.js b/server/routes/admin.js new file mode 100644 index 0000000..d75a0d7 --- /dev/null +++ b/server/routes/admin.js @@ -0,0 +1,194 @@ +const { Router } = require('express') +const router = Router() +/// //////////////////////////////////////////////////////// controllers +const { hasPermission } = require('../authentication') +const warrantyTermsController = require('../controllers/warrantyTermsController') +const contactPageController = require('../controllers/contactPageController') +const faqController = require('../controllers/faqController') +const learningController = require('../controllers/learningController') +const downloadCategoryController = require('../controllers/downloadCategoryController') +const downloadController = require('../controllers/downloadController') +const userController = require('../controllers/userController') +const ticketsController = require('../controllers/ticketsController') +const serialsExelController = require('../controllers/serialsExelController') +const helpController = require('../controllers/helpController') +const announcementController = require('../controllers/announcementController') +const lotteryPopUpController = require('../controllers/lotteryPopUpController') +const lotteryController = require('../controllers/lotteryController') +const representationController = require('../controllers/representationController') +const pieceController = require('../controllers/pieceController') +const pieceRequestController = require('../controllers/pieceRequestController') +const oldPieceRequestController = require('../controllers/oldPieceRequestController') +const bufferRequestController = require('../controllers/bufferRequestController') +const guaranteeReportController = require('../controllers/guaranteeReportController') +const transactionController = require('../controllers/transactionController') +const smsBroadcastController = require('../controllers/smsBroadcastController') +const surveyController = require('../controllers/surveyController') +/// //////////////////////////////////////////////////////// routes + +/// ///////////// warranty terms +router.post('/warranty', hasPermission('warranty-terms'), warrantyTermsController.create) +router.put('/warranty/:id', hasPermission('warranty-terms'), warrantyTermsController.update) +router.delete('/warranty/:id', hasPermission('warranty-terms'), warrantyTermsController.delete) + +/// ///////////// FAQ +router.post('/faq', hasPermission('faq'), faqController.create) +router.put('/faq/:id', hasPermission('faq'), faqController.update) +router.delete('/faq/:id', hasPermission('faq'), faqController.delete) + +/// ///////////// Learning +router.post('/learning', hasPermission('learning'), learningController.create) +router.put('/learning/:id', hasPermission('learning'), learningController.update) +router.delete('/learning/:id', hasPermission('learning'), learningController.delete) + +/// ///////////// download category +router.post('/dCategory', hasPermission('download-categories'), downloadCategoryController.create) +router.put('/dCategory/:id', hasPermission('download-categories'), downloadCategoryController.update) +router.delete('/dCategory/:id', hasPermission('download-categories'), downloadCategoryController.delete) + +/// ///////////// downloads +router.post('/downloads', hasPermission('downloads'), downloadController.create) +router.put('/downloads/:id', hasPermission('downloads'), downloadController.update) +router.delete('/downloads/:id', hasPermission('downloads'), downloadController.delete) + +// files +router.post('/downloads/file', hasPermission('downloads'), downloadController.addFile) +router.delete('/downloads/file/:id', hasPermission('downloads'), downloadController.deletFile) + +/// ///////////// contact us +router.get('/contact', hasPermission('contact-us'), contactPageController.getAll) +router.get('/contact/:id', hasPermission('contact-us'), contactPageController.getOne) + +/// ///////////// tickets +router.post('/addTicket', hasPermission('tickets'), ticketsController.add_ticket) +router.get('/tickets', hasPermission('tickets'), ticketsController.get_all_tickets_for_admin) +router.get('/ticket/:id', hasPermission('tickets'), ticketsController.get_one_ticket) +router.post('/addMessageToTicket/:id', hasPermission('tickets'), ticketsController.add_message_to_ticket) +router.get('/allUsers', hasPermission('tickets'), userController.get_all_users_for_admin) + +/// ///////////// transactions +// router.get('/transactions', hasPermission('transactions'), userController.get_all_transactions_for_admin) +// router.get('/transaction/:id', hasPermission('transactions'), userController.get_one_transaction_for_admin) + +/// ///////////// manage admins +router.post('/addAdmin', hasPermission('admins'), userController.register_admin) +router.put('/updateAdmin/:id', hasPermission('admins'), userController.update_admin) +router.delete('/deleteAdmin/:id', hasPermission('admins'), userController.delete_admin) +router.put('/updateAdminPassword', hasPermission('admins'), userController.update_user_password) +router.get('/admins', hasPermission('admins'), userController.get_admins) +router.get('/admin/:id', hasPermission('admins'), userController.get_one_admin) +router.get('/permissions', hasPermission('admins'), userController.permissions) + +/// ///////////// manage users +router.get('/users', hasPermission('customers'), userController.get_all_users_for_admin) +router.get('/user/:id', hasPermission('customers'), userController.get_one_user_for_admin) +router.put('/user/changeVerityInfo/:id', hasPermission('customers'), userController.change_verity_info_by_admin) +router.put('/user/changePanatechInfo/:id', hasPermission('customers'), userController.change_panatech_info_by_admin) + +/// ///////////// serials exel file +router.post('/addExel', hasPermission('serials-exel'), serialsExelController.addExel) +router.delete('/removeExel/:name', hasPermission('serials-exel'), serialsExelController.removeExel) +router.get('/serialExels', hasPermission('serials-exel'), serialsExelController.getAllExels) + +/// ///////////// update help page +router.put('/help', hasPermission('help'), helpController.set) + +/// ///////////// announcements +router.post('/announcements', hasPermission('announcements'), announcementController.create) +router.get('/announcements', hasPermission('announcements'), announcementController.getAllForAdmin) +router.get('/announcementsUsers', hasPermission('announcements'), userController.get_all_users_for_admin) +router.get('/announcements/:id', hasPermission('announcements'), announcementController.getOneForAdmin) +router.delete('/announcements/:id', hasPermission('announcements'), announcementController.deleteAnnouncement) +// router.put('/announcement/:id', hasPermission('announcements'), announcementController.updateByAdmin) + +/// ///////////// lottery +router.put('/lotteryPopUp', hasPermission('lotteryPopUp'), lotteryPopUpController.modify) +router.post('/lottery', hasPermission('lottery'), lotteryController.addLottery) +router.delete('/lottery/:lotteryId', hasPermission('lottery'), lotteryController.deleteLottery) +router.put('/lottery/:lotteryId', hasPermission('lottery'), lotteryController.updateLottery) +router.get('/lottery/:lotteryId', hasPermission('lottery'), lotteryController.getOneLottery) +router.get('/lotteries', hasPermission('lottery'), lotteryController.getAllLotteries) + +/// ///////////// representations (agents) +router.get('/representations', hasPermission('representations'), representationController.getAll) +router.get('/representation/:id', hasPermission('representations'), representationController.getOne) +router.put('/representationStatus/:id', hasPermission('representations'), representationController.change_form_status) +router.post('/addAgentByAdmin', hasPermission('representations'), representationController.add_agent_by_admin) + +/// ///////////// pieces +router.post('/piece', hasPermission('pieces'), pieceController.add_piece) +router.put('/piece/:id', hasPermission('pieces'), pieceController.update_piece) +router.delete('/piece/:id', hasPermission('pieces'), pieceController.remove_piece) +router.get('/pieces', hasPermission('pieces'), pieceController.get_all_pieces) +router.get('/pieces/:id', hasPermission('pieces'), pieceController.get_one_pieces) + +/// ///////////// piece requests +router.get('/prList', hasPermission('piece-requests'), pieceRequestController.get_all_pr_for_admin) +router.get('/pr/:id', hasPermission('piece-requests'), pieceRequestController.get_one_pr_for_admin) +router.put('/prStatus/:id', hasPermission('piece-requests'), pieceRequestController.change_pr_status_by_admin) + +/// ///////////// oldPiece requests +router.get('/oprList', hasPermission('op-requests'), oldPieceRequestController.get_all_opr_for_admin) +router.get('/opr/:id', hasPermission('op-requests'), oldPieceRequestController.get_one_opr_for_admin) +router.put('/oprStatus/:id', hasPermission('op-requests'), oldPieceRequestController.change_opr_status_by_admin) + +/// ///////////// buffer requests +router.get('/brList', hasPermission('buffer-requests'), bufferRequestController.get_all_br_for_admin) +router.get('/br/:id', hasPermission('buffer-requests'), bufferRequestController.get_one_br_for_admin) +router.put('/brStatus/:id', hasPermission('buffer-requests'), bufferRequestController.change_br_status_by_admin) + +/// ///////////// agents guarantee jobs reports +router.get('/grList', hasPermission('guarantee-reports'), guaranteeReportController.get_all_gr_for_admin) +router.get('/gr/:id', hasPermission('guarantee-reports'), guaranteeReportController.get_one_gr_for_admin) +// router.put('/grStatus/:id', hasPermission('guarantee-reports'), guaranteeReportController.change_gr_status_by_admin) + +/// ///////////// agent inbox +router.get('/allAgentsInbox', hasPermission('agentsInbox'), transactionController.get_all_agents_inbox_for_admin) +router.get('/allAgentsInbox/:id', hasPermission('agentsInbox'), transactionController.get_one_transaction_for_admin) + +/// ///////////// one agent details and reports +router.get('/agentDetails/:id', hasPermission('agents'), representationController.getOne) +router.get('/agentInbox/:agent_id', hasPermission('agents'), transactionController.get_one_agent_inbox_for_admin) +router.get('/agentBr/:agent_id', hasPermission('agents'), bufferRequestController.get_oneAgent_br_for_admin) +router.get('/agentOpr/:agent_id', hasPermission('agents'), oldPieceRequestController.get_oneAgent_opr_for_admin) +router.get('/agentPr/:agent_id', hasPermission('agents'), pieceRequestController.get_oneAgent_pr_for_admin) + +/// ///////////// update agent info +router.put('/updateAgent/:id', hasPermission('agentUpdate'), representationController.update_representation_by_admin) +router.post('/revokeAgent/:id', hasPermission('agentUpdate'), representationController.revoke_representation_by_admin) +router.get('/revokedAgents', representationController.get_revoked_agents_for_admin) + +// update files +router.post( + '/representationImages/:userType/:representation_code', + representationController.upload_image_to_representation +) +router.delete( + '/representationImages/:userType/:representation_code/:imgId', + representationController.remove_image_from_representation +) + +/// ///////////// all agents report (advance report) +router.get('/report/pieces', hasPermission('agentReports'), pieceController.get_all_pieces) +router.get( + '/report/allAgentsInbox', + hasPermission('agentReports'), + transactionController.get_all_agents_inbox_for_admin +) +router.get('/report/grList', hasPermission('agentReports'), guaranteeReportController.get_all_gr_for_admin) +router.get('/report/brList', hasPermission('agentReports'), bufferRequestController.get_all_br_for_admin) +router.get('/report/prList', hasPermission('agentReports'), pieceRequestController.get_all_pr_for_admin) +router.get('/report/oprList', hasPermission('agentReports'), oldPieceRequestController.get_all_opr_for_admin) + +/// ///////////// broadcast sms for users +router.post('/broadcastSMS', hasPermission('sms'), smsBroadcastController.broadcast) +router.get('/smsBroadcasts', hasPermission('sms'), smsBroadcastController.getAllForAdmin) +router.get('/smsBroadcasts/:id', hasPermission('sms'), smsBroadcastController.getOneForAdmin) +router.get('/usersForSMS', hasPermission('sms'), userController.get_all_users_for_admin) + + +/// ///////////// survey +router.get('/surveys', surveyController.getAllForAdmin) +router.get('/surveys/:id', surveyController.getOneForAdmin) + +module.exports = router diff --git a/server/routes/agent.js b/server/routes/agent.js new file mode 100644 index 0000000..82711c5 --- /dev/null +++ b/server/routes/agent.js @@ -0,0 +1,59 @@ +const { Router } = require('express') +const router = Router() +const transactionController = require('../controllers/transactionController') +const pieceController = require('../controllers/pieceController') +const pieceRequestController = require('../controllers/pieceRequestController') +const oldPieceRequestController = require('../controllers/oldPieceRequestController') +const bufferRequestController = require('../controllers/bufferRequestController') + +const guaranteeReportController = require('../controllers/guaranteeReportController') + +/// // inbox +router.get('/inbox', transactionController.get_all_transactions_for_agent) +router.get('/inbox/:id', transactionController.get_one_transaction_for_agent) +router.put('/changeTStatus/:id', transactionController.change_transaction_status_by_agent) + +/// ///////////// pieces +router.get('/pieces', pieceController.get_all_pieces) + +/// // piece request +router.post('/pr', pieceRequestController.add_piece_request) +router.post('/sendPr/:id', pieceRequestController.change_pr_status_to_sent_by_agent) +router.put('/prDescription/:id', pieceRequestController.update_pr_description) +router.put('/addPrItems/:prId', pieceRequestController.add_pieces_to_pr) +router.delete('/removePrItems/:pieceItemId', pieceRequestController.remove_piece_from_pr) +router.delete('/pr/:id', pieceRequestController.delete_pr) +router.get('/prList', pieceRequestController.get_all_pr_for_agent) +router.get('/pr/:id', pieceRequestController.get_one_pr_for_agent) + +/// // oldPiece request +router.post('/opr', oldPieceRequestController.add_oldPiece_request) +router.post('/sendOpr/:id', oldPieceRequestController.change_opr_status_to_sent_by_agent) +router.put('/oprDescription/:id', oldPieceRequestController.update_opr_description) +router.put('/addOprItems/:oprId', oldPieceRequestController.add_oldPieces_to_opr) +router.delete('/removeOprItems/:oldPieceItemId', oldPieceRequestController.remove_oldPiece_from_opr) +router.delete('/opr/:id', oldPieceRequestController.delete_opr) +router.get('/oprList', oldPieceRequestController.get_all_opr_for_agent) +router.get('/opr/:id', oldPieceRequestController.get_one_opr_for_agent) + +/// // buffer request +router.post('/br', bufferRequestController.add_buffer_request) +router.post('/sendBr/:id', bufferRequestController.change_br_status_to_sent_by_agent) +router.put('/brDescription/:id', bufferRequestController.update_br_description) +router.put('/addBrItems/:brId', bufferRequestController.add_buffer_to_br) +router.delete('/removeBrItems/:bufferItemId', bufferRequestController.remove_buffer_from_br) +router.delete('/br/:id', bufferRequestController.delete_br) +router.get('/brList', bufferRequestController.get_all_br_for_agent) +router.get('/br/:id', bufferRequestController.get_one_br_for_agent) + +/// // guarantee report +router.post('/gr', guaranteeReportController.add_guaranteeReport) +router.post('/sendGr/:id', guaranteeReportController.change_gr_status_to_sent_by_agent) +router.put('/grDescription/:id', guaranteeReportController.update_gr_description) +router.put('/addGrItems/:grId', guaranteeReportController.add_report_to_gr) +router.delete('/removeGrItems/:reportItemId', guaranteeReportController.remove_report_from_gr) +router.delete('/gr/:id', guaranteeReportController.delete_gr) +router.get('/grList', guaranteeReportController.get_all_gr_for_agent) +router.get('/gr/:id', guaranteeReportController.get_one_gr_for_agent) + +module.exports = router diff --git a/server/routes/auth.js b/server/routes/auth.js new file mode 100644 index 0000000..bf7de62 --- /dev/null +++ b/server/routes/auth.js @@ -0,0 +1,16 @@ +const { Router } = require('express') +const router = Router() +const userController = require('../controllers/userController') + +/// /////////////////// admin routes +// router.post('/register/admin', userController.register_admin) +router.post('/register/user', userController.register_user) +// router.post('/activation/:key', userController.activation) +router.post('/reset-pass-token', userController.generate_reset_user_password_link) +router.post('/set-new-pass', userController.reset_password_using_token) + +router.post('/login', userController.webLogin) +router.post('/logout', userController.webLogout) +router.get('/user', userController.getUser) + +module.exports = router diff --git a/server/routes/cross.js b/server/routes/cross.js new file mode 100644 index 0000000..4c0b7ae --- /dev/null +++ b/server/routes/cross.js @@ -0,0 +1,10 @@ +const { Router } = require('express') +const router = Router() +const arpaConnectionController = require('../controllers/arpaConnectionController') + +router.post('/getRouteManager', arpaConnectionController.getRouteManager) +router.post('/postRouteManager', arpaConnectionController.postRouteManager) +router.post('/putRouteManager', arpaConnectionController.putRouteManager) +router.post('/deleteRouteManager', arpaConnectionController.deleteRouteManager) + +module.exports = router diff --git a/server/routes/public.js b/server/routes/public.js new file mode 100644 index 0000000..24f4542 --- /dev/null +++ b/server/routes/public.js @@ -0,0 +1,60 @@ +const { Router } = require('express') +const router = Router() + +/// //////////////////////////////////////////////////////// controllers +const warrantyTermsController = require('../controllers/warrantyTermsController') +const contactPageController = require('../controllers/contactPageController') +const faqController = require('../controllers/faqController') +const learningController = require('../controllers/learningController') +const downloadCategoryController = require('../controllers/downloadCategoryController') +const downloadController = require('../controllers/downloadController') +const iranCitiesController = require('../controllers/iranCitiesController') +const serialsExelController = require('../controllers/serialsExelController') +const helpController = require('../controllers/helpController') +const lotteryPopUpController = require('../controllers/lotteryPopUpController') +const lotteryController = require('../controllers/lotteryController') +const representationController = require('../controllers/representationController') + +/// //////////////////////////////////////////////////////// routes +/// ///////////// warranty terms +router.get('/warranty/page/:page', warrantyTermsController.getAll) +router.get('/warranty/:id(*)', warrantyTermsController.getOne) + +/// ///////////// FAQ +router.get('/faq', faqController.getAll) +router.get('/faq/:id(*)', faqController.getOne) + +/// ///////////// Learning +router.get('/learning/page/:page', learningController.getAll) +router.get('/learning/:id(*)', learningController.getOne) + +/// ///////////// download category +router.get('/dCategory', downloadCategoryController.getAll) +router.get('/dCategory/:id(*)', downloadCategoryController.getOne) + +/// ///////////// downloads +router.get('/downloads/page/:category/:page', downloadController.getAll) +router.get('/downloads/:id(*)', downloadController.getOne) +router.get('/downloads-newest', downloadController.getNewest) + +/// ///////////// contact us +router.post('/contact', contactPageController.create) + +/// ///////////// get iran cities +router.get('/iranCities', iranCitiesController.getIranCities) + +/// ///////////// check device serial number +router.post('/checkSerial', serialsExelController.checkSerial) + +/// ///////////// get help page +router.get('/help', helpController.get) + +/// ///////////// get agents +router.get('/agents', representationController.get_agents) + +/// ///////////// lottery +router.get('/lotteryPopUp', lotteryPopUpController.getPopUpInfo) +router.get('/lastLottery', lotteryController.getLastLottery) +router.post('/enrollParticipant', lotteryController.enrollParticipant) + +module.exports = router diff --git a/server/routes/thirdParty.js b/server/routes/thirdParty.js new file mode 100644 index 0000000..6943fcd --- /dev/null +++ b/server/routes/thirdParty.js @@ -0,0 +1,12 @@ +const { Router } = require('express') +const router = Router() + +/// //////////////////////////////////////////////////////// controllers +const thirdPartyController = require('../controllers/thirdPartyController') + +/// //////////////////////////////////////////////////////// routes +router.post('/reception', thirdPartyController.reception) +router.post('/repair', thirdPartyController.repair) +router.post('/sendBack', thirdPartyController.sendBack) + +module.exports = router diff --git a/server/routes/user.js b/server/routes/user.js new file mode 100644 index 0000000..a896171 --- /dev/null +++ b/server/routes/user.js @@ -0,0 +1,56 @@ +const { Router } = require('express') +const router = Router() +const userController = require('../controllers/userController') +const ticketsController = require('../controllers/ticketsController') +const representationController = require('../controllers/representationController') +const transactionDraftsController = require('../controllers/transactionDraftsController') +const transactionController = require('../controllers/transactionController') +const surveyController = require('../controllers/surveyController') + +/// // profile +router.put('/update_profile', userController.update_user) +router.put('/update_password', userController.update_user_password) +router.put('/changeEmail', userController.changeEmail) +router.post('/resendEmailConfirmation', userController.resendEmailConfirmation) +router.put('/confirmEmail', userController.confirmEmail) +router.put('/changeMobile', userController.changeMobile) +router.post('/resendMobileConfirmation', userController.resendMobileConfirmation) +router.put('/confirmMobile', userController.confirmMobile) + +/// // transactions +router.post('/transaction', transactionController.add_transaction) +router.get('/transactions', transactionController.get_all_transactions_for_user) +router.get('/transaction/:ttn', transactionController.get_one_transaction_for_user) + +/// /// transaction drafts +router.post('/transactionDraft', transactionDraftsController.add_transaction_draft) +router.get('/transactionDrafts', transactionDraftsController.get_user_drafts) +router.get('/transactionDraft/:draftId', transactionDraftsController.get_one_user_draft) +router.put('/transactionDraft/:draftId', transactionDraftsController.update_draft_description) +router.delete('/transactionDraft/:draftId', transactionDraftsController.remove_draft) + +router.put('/transactionDraftItemAdd/:draftId', transactionDraftsController.add_stuff_to_draft) +router.put('/transactionDraftItemRemove/:draftId', transactionDraftsController.remove_stuff_from_draft) + +/// // tickets +router.get('/ticketConversations', ticketsController.get_all_tickets) +router.get('/getTicket/:id', ticketsController.get_one_ticket) +router.post('/addTicketConversation', ticketsController.add_ticket) +router.post('/addMessageToTicket/:id', ticketsController.add_message_to_ticket) + +/// // representation +router.post('/representation', representationController.add_representation) +router.put('/representation/:representation_id', representationController.edit_representation_by_user) +router.post('/checkRepresentation', representationController.check_representation) +router.post('/representationImages/:representation_code', representationController.upload_image_to_representation) +router.delete( + '/representationImages/:representation_code/:imgId', + representationController.remove_image_from_representation +) +router.get('/representation/:id', representationController.getLastUserRep) + +/// // survey +router.post('/survey', surveyController.create) +router.get('/surveys', surveyController.getAllForUser) + +module.exports = router diff --git a/static/CustomSW.js b/static/CustomSW.js new file mode 100644 index 0000000..96b1c22 --- /dev/null +++ b/static/CustomSW.js @@ -0,0 +1,61 @@ +// variables +let deferredPrompt +const events = ['click', 'touchend', 'ontouchend'] +const customDialog = document.querySelector('.pwa_dialog') +const installBtn = document.querySelector('#installPWA') +const showPwaDialogBtn = document.querySelector('#showPwaDialog') +const closePwaDialogBtn = document.querySelector('#closePwaDialog') + +// functions +function showCustomInstallPromotion() { + setTimeout(function() { + customDialog.classList.add('active') + }, 500) +} +function hideCustomInstallPromotion() { + setTimeout(function() { + customDialog.classList.remove('active') + }, 500) +} + +// events +window.addEventListener('beforeinstallprompt', e => { + // Prevent the mini-infobar from appearing on mobile + e.preventDefault() + // Stash the event so it can be triggered later. + deferredPrompt = e + // Update UI notify the user they can install the PWA + // if (location.pathname !== '/') showCustomInstallPromotion() + showCustomInstallPromotion() +}) + +events.forEach(evt => { + closePwaDialogBtn.addEventListener(evt, e => { + hideCustomInstallPromotion() + }) + + installBtn.addEventListener(evt, e => { + // Hide the app provided install promotion + hideCustomInstallPromotion() + // Show the install prompt + deferredPrompt.prompt() + // Wait for the user to respond to the prompt + deferredPrompt.userChoice.then(choiceResult => { + if (choiceResult.outcome === 'accepted') { + console.log('User accepted the install prompt') + } else { + console.log('User dismissed the install prompt') + } + }) + }) + + try { + showPwaDialogBtn.addEventListener(evt, e => { + if (deferredPrompt) { + showCustomInstallPromotion() + } else { + alert('شما قبلا برنامه را نصب کرده اید') + } + }) + } catch (e) {} +}) diff --git a/static/assets/css/bootstrap-grid.css b/static/assets/css/bootstrap-grid.css new file mode 100644 index 0000000..a6c9575 --- /dev/null +++ b/static/assets/css/bootstrap-grid.css @@ -0,0 +1,5014 @@ +/*! + * Bootstrap Grid v5.0.0-beta1 (https://getbootstrap.com/) + * Copyright 2011-2020 The Bootstrap Authors + * Copyright 2011-2020 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +.container, +.container-fluid, +.container-xxl, +.container-xl, +.container-lg, +.container-md, +.container-sm{ + width: 100%; + box-sizing: border-box; + padding-right: var(--bs-gutter-x, 0.75rem); + padding-left: var(--bs-gutter-x, 0.75rem); + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 576px){ + .container-sm, .container{ + max-width: 540px; + } +} + +@media (min-width: 768px){ + .container-md, .container-sm, .container{ + max-width: 720px; + } +} + +@media (min-width: 992px){ + .container-lg, .container-md, .container-sm, .container{ + max-width: 960px; + } +} + +@media (min-width: 1200px){ + .container-xl, .container-lg, .container-md, .container-sm, .container{ + max-width: 1140px; + } +} + +@media (min-width: 1400px){ + .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container{ + max-width: 1320px; + } +} + +.row{ + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + display: flex; + flex-wrap: wrap; + margin-top: calc(var(--bs-gutter-y) * -1); + margin-right: calc(var(--bs-gutter-x) / -2); + margin-left: calc(var(--bs-gutter-x) / -2); +} + +.row > *{ + box-sizing: border-box; + flex-shrink: 0; + width: 100%; + max-width: 100%; + padding-right: calc(var(--bs-gutter-x) / 2); + padding-left: calc(var(--bs-gutter-x) / 2); + margin-top: var(--bs-gutter-y); +} + +.col{ + flex: 1 0 0%; +} + +.row-cols-auto > *{ + flex: 0 0 auto; + width: auto; +} + +.row-cols-1 > *{ + flex: 0 0 auto; + width: 100%; +} + +.row-cols-2 > *{ + flex: 0 0 auto; + width: 50%; +} + +.row-cols-3 > *{ + flex: 0 0 auto; + width: 33.3333333333%; +} + +.row-cols-4 > *{ + flex: 0 0 auto; + width: 25%; +} + +.row-cols-5 > *{ + flex: 0 0 auto; + width: 20%; +} + +.row-cols-6 > *{ + flex: 0 0 auto; + width: 16.6666666667%; +} + +.col-auto{ + flex: 0 0 auto; + width: auto; +} + +.col-1{ + flex: 0 0 auto; + width: 8.3333333333%; +} + +.col-2{ + flex: 0 0 auto; + width: 16.6666666667%; +} + +.col-3{ + flex: 0 0 auto; + width: 25%; +} + +.col-4{ + flex: 0 0 auto; + width: 33.3333333333%; +} + +.col-5{ + flex: 0 0 auto; + width: 41.6666666667%; +} + +.col-6{ + flex: 0 0 auto; + width: 50%; +} + +.col-7{ + flex: 0 0 auto; + width: 58.3333333333%; +} + +.col-8{ + flex: 0 0 auto; + width: 66.6666666667%; +} + +.col-9{ + flex: 0 0 auto; + width: 75%; +} + +.col-10{ + flex: 0 0 auto; + width: 83.3333333333%; +} + +.col-11{ + flex: 0 0 auto; + width: 91.6666666667%; +} + +.col-12{ + flex: 0 0 auto; + width: 100%; +} + +.offset-1{ + margin-left: 8.3333333333%; +} + +.offset-2{ + margin-left: 16.6666666667%; +} + +.offset-3{ + margin-left: 25%; +} + +.offset-4{ + margin-left: 33.3333333333%; +} + +.offset-5{ + margin-left: 41.6666666667%; +} + +.offset-6{ + margin-left: 50%; +} + +.offset-7{ + margin-left: 58.3333333333%; +} + +.offset-8{ + margin-left: 66.6666666667%; +} + +.offset-9{ + margin-left: 75%; +} + +.offset-10{ + margin-left: 83.3333333333%; +} + +.offset-11{ + margin-left: 91.6666666667%; +} + +.g-0, +.gx-0{ + --bs-gutter-x: 0; +} + +.g-0, +.gy-0{ + --bs-gutter-y: 0; +} + +.g-1, +.gx-1{ + --bs-gutter-x: 0.25rem; +} + +.g-1, +.gy-1{ + --bs-gutter-y: 0.25rem; +} + +.g-2, +.gx-2{ + --bs-gutter-x: 0.5rem; +} + +.g-2, +.gy-2{ + --bs-gutter-y: 0.5rem; +} + +.g-3, +.gx-3{ + --bs-gutter-x: 1rem; +} + +.g-3, +.gy-3{ + --bs-gutter-y: 1rem; +} + +.g-4, +.gx-4{ + --bs-gutter-x: 1.5rem; +} + +.g-4, +.gy-4{ + --bs-gutter-y: 1.5rem; +} + +.g-5, +.gx-5{ + --bs-gutter-x: 3rem; +} + +.g-5, +.gy-5{ + --bs-gutter-y: 3rem; +} + +@media (min-width: 576px){ + .col-sm{ + flex: 1 0 0%; + } + + .row-cols-sm-auto > *{ + flex: 0 0 auto; + width: auto; + } + + .row-cols-sm-1 > *{ + flex: 0 0 auto; + width: 100%; + } + + .row-cols-sm-2 > *{ + flex: 0 0 auto; + width: 50%; + } + + .row-cols-sm-3 > *{ + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-sm-4 > *{ + flex: 0 0 auto; + width: 25%; + } + + .row-cols-sm-5 > *{ + flex: 0 0 auto; + width: 20%; + } + + .row-cols-sm-6 > *{ + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-sm-auto{ + flex: 0 0 auto; + width: auto; + } + + .col-sm-1{ + flex: 0 0 auto; + width: 8.3333333333%; + } + + .col-sm-2{ + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-sm-3{ + flex: 0 0 auto; + width: 25%; + } + + .col-sm-4{ + flex: 0 0 auto; + width: 33.3333333333%; + } + + .col-sm-5{ + flex: 0 0 auto; + width: 41.6666666667%; + } + + .col-sm-6{ + flex: 0 0 auto; + width: 50%; + } + + .col-sm-7{ + flex: 0 0 auto; + width: 58.3333333333%; + } + + .col-sm-8{ + flex: 0 0 auto; + width: 66.6666666667%; + } + + .col-sm-9{ + flex: 0 0 auto; + width: 75%; + } + + .col-sm-10{ + flex: 0 0 auto; + width: 83.3333333333%; + } + + .col-sm-11{ + flex: 0 0 auto; + width: 91.6666666667%; + } + + .col-sm-12{ + flex: 0 0 auto; + width: 100%; + } + + .offset-sm-0{ + margin-left: 0; + } + + .offset-sm-1{ + margin-left: 8.3333333333%; + } + + .offset-sm-2{ + margin-left: 16.6666666667%; + } + + .offset-sm-3{ + margin-left: 25%; + } + + .offset-sm-4{ + margin-left: 33.3333333333%; + } + + .offset-sm-5{ + margin-left: 41.6666666667%; + } + + .offset-sm-6{ + margin-left: 50%; + } + + .offset-sm-7{ + margin-left: 58.3333333333%; + } + + .offset-sm-8{ + margin-left: 66.6666666667%; + } + + .offset-sm-9{ + margin-left: 75%; + } + + .offset-sm-10{ + margin-left: 83.3333333333%; + } + + .offset-sm-11{ + margin-left: 91.6666666667%; + } + + .g-sm-0, + .gx-sm-0{ + --bs-gutter-x: 0; + } + + .g-sm-0, + .gy-sm-0{ + --bs-gutter-y: 0; + } + + .g-sm-1, + .gx-sm-1{ + --bs-gutter-x: 0.25rem; + } + + .g-sm-1, + .gy-sm-1{ + --bs-gutter-y: 0.25rem; + } + + .g-sm-2, + .gx-sm-2{ + --bs-gutter-x: 0.5rem; + } + + .g-sm-2, + .gy-sm-2{ + --bs-gutter-y: 0.5rem; + } + + .g-sm-3, + .gx-sm-3{ + --bs-gutter-x: 1rem; + } + + .g-sm-3, + .gy-sm-3{ + --bs-gutter-y: 1rem; + } + + .g-sm-4, + .gx-sm-4{ + --bs-gutter-x: 1.5rem; + } + + .g-sm-4, + .gy-sm-4{ + --bs-gutter-y: 1.5rem; + } + + .g-sm-5, + .gx-sm-5{ + --bs-gutter-x: 3rem; + } + + .g-sm-5, + .gy-sm-5{ + --bs-gutter-y: 3rem; + } +} + +@media (min-width: 768px){ + .col-md{ + flex: 1 0 0%; + } + + .row-cols-md-auto > *{ + flex: 0 0 auto; + width: auto; + } + + .row-cols-md-1 > *{ + flex: 0 0 auto; + width: 100%; + } + + .row-cols-md-2 > *{ + flex: 0 0 auto; + width: 50%; + } + + .row-cols-md-3 > *{ + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-md-4 > *{ + flex: 0 0 auto; + width: 25%; + } + + .row-cols-md-5 > *{ + flex: 0 0 auto; + width: 20%; + } + + .row-cols-md-6 > *{ + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-md-auto{ + flex: 0 0 auto; + width: auto; + } + + .col-md-1{ + flex: 0 0 auto; + width: 8.3333333333%; + } + + .col-md-2{ + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-md-3{ + flex: 0 0 auto; + width: 25%; + } + + .col-md-4{ + flex: 0 0 auto; + width: 33.3333333333%; + } + + .col-md-5{ + flex: 0 0 auto; + width: 41.6666666667%; + } + + .col-md-6{ + flex: 0 0 auto; + width: 50%; + } + + .col-md-7{ + flex: 0 0 auto; + width: 58.3333333333%; + } + + .col-md-8{ + flex: 0 0 auto; + width: 66.6666666667%; + } + + .col-md-9{ + flex: 0 0 auto; + width: 75%; + } + + .col-md-10{ + flex: 0 0 auto; + width: 83.3333333333%; + } + + .col-md-11{ + flex: 0 0 auto; + width: 91.6666666667%; + } + + .col-md-12{ + flex: 0 0 auto; + width: 100%; + } + + .offset-md-0{ + margin-left: 0; + } + + .offset-md-1{ + margin-left: 8.3333333333%; + } + + .offset-md-2{ + margin-left: 16.6666666667%; + } + + .offset-md-3{ + margin-left: 25%; + } + + .offset-md-4{ + margin-left: 33.3333333333%; + } + + .offset-md-5{ + margin-left: 41.6666666667%; + } + + .offset-md-6{ + margin-left: 50%; + } + + .offset-md-7{ + margin-left: 58.3333333333%; + } + + .offset-md-8{ + margin-left: 66.6666666667%; + } + + .offset-md-9{ + margin-left: 75%; + } + + .offset-md-10{ + margin-left: 83.3333333333%; + } + + .offset-md-11{ + margin-left: 91.6666666667%; + } + + .g-md-0, + .gx-md-0{ + --bs-gutter-x: 0; + } + + .g-md-0, + .gy-md-0{ + --bs-gutter-y: 0; + } + + .g-md-1, + .gx-md-1{ + --bs-gutter-x: 0.25rem; + } + + .g-md-1, + .gy-md-1{ + --bs-gutter-y: 0.25rem; + } + + .g-md-2, + .gx-md-2{ + --bs-gutter-x: 0.5rem; + } + + .g-md-2, + .gy-md-2{ + --bs-gutter-y: 0.5rem; + } + + .g-md-3, + .gx-md-3{ + --bs-gutter-x: 1rem; + } + + .g-md-3, + .gy-md-3{ + --bs-gutter-y: 1rem; + } + + .g-md-4, + .gx-md-4{ + --bs-gutter-x: 1.5rem; + } + + .g-md-4, + .gy-md-4{ + --bs-gutter-y: 1.5rem; + } + + .g-md-5, + .gx-md-5{ + --bs-gutter-x: 3rem; + } + + .g-md-5, + .gy-md-5{ + --bs-gutter-y: 3rem; + } +} + +@media (min-width: 992px){ + .col-lg{ + flex: 1 0 0%; + } + + .row-cols-lg-auto > *{ + flex: 0 0 auto; + width: auto; + } + + .row-cols-lg-1 > *{ + flex: 0 0 auto; + width: 100%; + } + + .row-cols-lg-2 > *{ + flex: 0 0 auto; + width: 50%; + } + + .row-cols-lg-3 > *{ + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-lg-4 > *{ + flex: 0 0 auto; + width: 25%; + } + + .row-cols-lg-5 > *{ + flex: 0 0 auto; + width: 20%; + } + + .row-cols-lg-6 > *{ + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-lg-auto{ + flex: 0 0 auto; + width: auto; + } + + .col-lg-1{ + flex: 0 0 auto; + width: 8.3333333333%; + } + + .col-lg-2{ + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-lg-3{ + flex: 0 0 auto; + width: 25%; + } + + .col-lg-4{ + flex: 0 0 auto; + width: 33.3333333333%; + } + + .col-lg-5{ + flex: 0 0 auto; + width: 41.6666666667%; + } + + .col-lg-6{ + flex: 0 0 auto; + width: 50%; + } + + .col-lg-7{ + flex: 0 0 auto; + width: 58.3333333333%; + } + + .col-lg-8{ + flex: 0 0 auto; + width: 66.6666666667%; + } + + .col-lg-9{ + flex: 0 0 auto; + width: 75%; + } + + .col-lg-10{ + flex: 0 0 auto; + width: 83.3333333333%; + } + + .col-lg-11{ + flex: 0 0 auto; + width: 91.6666666667%; + } + + .col-lg-12{ + flex: 0 0 auto; + width: 100%; + } + + .offset-lg-0{ + margin-left: 0; + } + + .offset-lg-1{ + margin-left: 8.3333333333%; + } + + .offset-lg-2{ + margin-left: 16.6666666667%; + } + + .offset-lg-3{ + margin-left: 25%; + } + + .offset-lg-4{ + margin-left: 33.3333333333%; + } + + .offset-lg-5{ + margin-left: 41.6666666667%; + } + + .offset-lg-6{ + margin-left: 50%; + } + + .offset-lg-7{ + margin-left: 58.3333333333%; + } + + .offset-lg-8{ + margin-left: 66.6666666667%; + } + + .offset-lg-9{ + margin-left: 75%; + } + + .offset-lg-10{ + margin-left: 83.3333333333%; + } + + .offset-lg-11{ + margin-left: 91.6666666667%; + } + + .g-lg-0, + .gx-lg-0{ + --bs-gutter-x: 0; + } + + .g-lg-0, + .gy-lg-0{ + --bs-gutter-y: 0; + } + + .g-lg-1, + .gx-lg-1{ + --bs-gutter-x: 0.25rem; + } + + .g-lg-1, + .gy-lg-1{ + --bs-gutter-y: 0.25rem; + } + + .g-lg-2, + .gx-lg-2{ + --bs-gutter-x: 0.5rem; + } + + .g-lg-2, + .gy-lg-2{ + --bs-gutter-y: 0.5rem; + } + + .g-lg-3, + .gx-lg-3{ + --bs-gutter-x: 1rem; + } + + .g-lg-3, + .gy-lg-3{ + --bs-gutter-y: 1rem; + } + + .g-lg-4, + .gx-lg-4{ + --bs-gutter-x: 1.5rem; + } + + .g-lg-4, + .gy-lg-4{ + --bs-gutter-y: 1.5rem; + } + + .g-lg-5, + .gx-lg-5{ + --bs-gutter-x: 3rem; + } + + .g-lg-5, + .gy-lg-5{ + --bs-gutter-y: 3rem; + } +} + +@media (min-width: 1200px){ + .col-xl{ + flex: 1 0 0%; + } + + .row-cols-xl-auto > *{ + flex: 0 0 auto; + width: auto; + } + + .row-cols-xl-1 > *{ + flex: 0 0 auto; + width: 100%; + } + + .row-cols-xl-2 > *{ + flex: 0 0 auto; + width: 50%; + } + + .row-cols-xl-3 > *{ + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-xl-4 > *{ + flex: 0 0 auto; + width: 25%; + } + + .row-cols-xl-5 > *{ + flex: 0 0 auto; + width: 20%; + } + + .row-cols-xl-6 > *{ + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-xl-auto{ + flex: 0 0 auto; + width: auto; + } + + .col-xl-1{ + flex: 0 0 auto; + width: 8.3333333333%; + } + + .col-xl-2{ + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-xl-3{ + flex: 0 0 auto; + width: 25%; + } + + .col-xl-4{ + flex: 0 0 auto; + width: 33.3333333333%; + } + + .col-xl-5{ + flex: 0 0 auto; + width: 41.6666666667%; + } + + .col-xl-6{ + flex: 0 0 auto; + width: 50%; + } + + .col-xl-7{ + flex: 0 0 auto; + width: 58.3333333333%; + } + + .col-xl-8{ + flex: 0 0 auto; + width: 66.6666666667%; + } + + .col-xl-9{ + flex: 0 0 auto; + width: 75%; + } + + .col-xl-10{ + flex: 0 0 auto; + width: 83.3333333333%; + } + + .col-xl-11{ + flex: 0 0 auto; + width: 91.6666666667%; + } + + .col-xl-12{ + flex: 0 0 auto; + width: 100%; + } + + .offset-xl-0{ + margin-left: 0; + } + + .offset-xl-1{ + margin-left: 8.3333333333%; + } + + .offset-xl-2{ + margin-left: 16.6666666667%; + } + + .offset-xl-3{ + margin-left: 25%; + } + + .offset-xl-4{ + margin-left: 33.3333333333%; + } + + .offset-xl-5{ + margin-left: 41.6666666667%; + } + + .offset-xl-6{ + margin-left: 50%; + } + + .offset-xl-7{ + margin-left: 58.3333333333%; + } + + .offset-xl-8{ + margin-left: 66.6666666667%; + } + + .offset-xl-9{ + margin-left: 75%; + } + + .offset-xl-10{ + margin-left: 83.3333333333%; + } + + .offset-xl-11{ + margin-left: 91.6666666667%; + } + + .g-xl-0, + .gx-xl-0{ + --bs-gutter-x: 0; + } + + .g-xl-0, + .gy-xl-0{ + --bs-gutter-y: 0; + } + + .g-xl-1, + .gx-xl-1{ + --bs-gutter-x: 0.25rem; + } + + .g-xl-1, + .gy-xl-1{ + --bs-gutter-y: 0.25rem; + } + + .g-xl-2, + .gx-xl-2{ + --bs-gutter-x: 0.5rem; + } + + .g-xl-2, + .gy-xl-2{ + --bs-gutter-y: 0.5rem; + } + + .g-xl-3, + .gx-xl-3{ + --bs-gutter-x: 1rem; + } + + .g-xl-3, + .gy-xl-3{ + --bs-gutter-y: 1rem; + } + + .g-xl-4, + .gx-xl-4{ + --bs-gutter-x: 1.5rem; + } + + .g-xl-4, + .gy-xl-4{ + --bs-gutter-y: 1.5rem; + } + + .g-xl-5, + .gx-xl-5{ + --bs-gutter-x: 3rem; + } + + .g-xl-5, + .gy-xl-5{ + --bs-gutter-y: 3rem; + } +} + +@media (min-width: 1400px){ + .col-xxl{ + flex: 1 0 0%; + } + + .row-cols-xxl-auto > *{ + flex: 0 0 auto; + width: auto; + } + + .row-cols-xxl-1 > *{ + flex: 0 0 auto; + width: 100%; + } + + .row-cols-xxl-2 > *{ + flex: 0 0 auto; + width: 50%; + } + + .row-cols-xxl-3 > *{ + flex: 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-xxl-4 > *{ + flex: 0 0 auto; + width: 25%; + } + + .row-cols-xxl-5 > *{ + flex: 0 0 auto; + width: 20%; + } + + .row-cols-xxl-6 > *{ + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-xxl-auto{ + flex: 0 0 auto; + width: auto; + } + + .col-xxl-1{ + flex: 0 0 auto; + width: 8.3333333333%; + } + + .col-xxl-2{ + flex: 0 0 auto; + width: 16.6666666667%; + } + + .col-xxl-3{ + flex: 0 0 auto; + width: 25%; + } + + .col-xxl-4{ + flex: 0 0 auto; + width: 33.3333333333%; + } + + .col-xxl-5{ + flex: 0 0 auto; + width: 41.6666666667%; + } + + .col-xxl-6{ + flex: 0 0 auto; + width: 50%; + } + + .col-xxl-7{ + flex: 0 0 auto; + width: 58.3333333333%; + } + + .col-xxl-8{ + flex: 0 0 auto; + width: 66.6666666667%; + } + + .col-xxl-9{ + flex: 0 0 auto; + width: 75%; + } + + .col-xxl-10{ + flex: 0 0 auto; + width: 83.3333333333%; + } + + .col-xxl-11{ + flex: 0 0 auto; + width: 91.6666666667%; + } + + .col-xxl-12{ + flex: 0 0 auto; + width: 100%; + } + + .offset-xxl-0{ + margin-left: 0; + } + + .offset-xxl-1{ + margin-left: 8.3333333333%; + } + + .offset-xxl-2{ + margin-left: 16.6666666667%; + } + + .offset-xxl-3{ + margin-left: 25%; + } + + .offset-xxl-4{ + margin-left: 33.3333333333%; + } + + .offset-xxl-5{ + margin-left: 41.6666666667%; + } + + .offset-xxl-6{ + margin-left: 50%; + } + + .offset-xxl-7{ + margin-left: 58.3333333333%; + } + + .offset-xxl-8{ + margin-left: 66.6666666667%; + } + + .offset-xxl-9{ + margin-left: 75%; + } + + .offset-xxl-10{ + margin-left: 83.3333333333%; + } + + .offset-xxl-11{ + margin-left: 91.6666666667%; + } + + .g-xxl-0, + .gx-xxl-0{ + --bs-gutter-x: 0; + } + + .g-xxl-0, + .gy-xxl-0{ + --bs-gutter-y: 0; + } + + .g-xxl-1, + .gx-xxl-1{ + --bs-gutter-x: 0.25rem; + } + + .g-xxl-1, + .gy-xxl-1{ + --bs-gutter-y: 0.25rem; + } + + .g-xxl-2, + .gx-xxl-2{ + --bs-gutter-x: 0.5rem; + } + + .g-xxl-2, + .gy-xxl-2{ + --bs-gutter-y: 0.5rem; + } + + .g-xxl-3, + .gx-xxl-3{ + --bs-gutter-x: 1rem; + } + + .g-xxl-3, + .gy-xxl-3{ + --bs-gutter-y: 1rem; + } + + .g-xxl-4, + .gx-xxl-4{ + --bs-gutter-x: 1.5rem; + } + + .g-xxl-4, + .gy-xxl-4{ + --bs-gutter-y: 1.5rem; + } + + .g-xxl-5, + .gx-xxl-5{ + --bs-gutter-x: 3rem; + } + + .g-xxl-5, + .gy-xxl-5{ + --bs-gutter-y: 3rem; + } +} + +.d-inline{ + display: inline !important; +} + +.d-inline-block{ + display: inline-block !important; +} + +.d-block{ + display: block !important; +} + +.d-grid{ + display: grid !important; +} + +.d-table{ + display: table !important; +} + +.d-table-row{ + display: table-row !important; +} + +.d-table-cell{ + display: table-cell !important; +} + +.d-flex{ + display: flex !important; +} + +.d-inline-flex{ + display: inline-flex !important; +} + +.d-none{ + display: none !important; +} + +.flex-fill{ + flex: 1 1 auto !important; +} + +.flex-row{ + flex-direction: row !important; +} + +.flex-column{ + flex-direction: column !important; +} + +.flex-row-reverse{ + flex-direction: row-reverse !important; +} + +.flex-column-reverse{ + flex-direction: column-reverse !important; +} + +.flex-grow-0{ + flex-grow: 0 !important; +} + +.flex-grow-1{ + flex-grow: 1 !important; +} + +.flex-shrink-0{ + flex-shrink: 0 !important; +} + +.flex-shrink-1{ + flex-shrink: 1 !important; +} + +.flex-wrap{ + flex-wrap: wrap !important; +} + +.flex-nowrap{ + flex-wrap: nowrap !important; +} + +.flex-wrap-reverse{ + flex-wrap: wrap-reverse !important; +} + +.justify-content-start{ + justify-content: flex-start !important; +} + +.justify-content-end{ + justify-content: flex-end !important; +} + +.justify-content-center{ + justify-content: center !important; +} + +.justify-content-between{ + justify-content: space-between !important; +} + +.justify-content-around{ + justify-content: space-around !important; +} + +.justify-content-evenly{ + justify-content: space-evenly !important; +} + +.align-items-start{ + align-items: flex-start !important; +} + +.align-items-end{ + align-items: flex-end !important; +} + +.align-items-center{ + align-items: center !important; +} + +.align-items-baseline{ + align-items: baseline !important; +} + +.align-items-stretch{ + align-items: stretch !important; +} + +.align-content-start{ + align-content: flex-start !important; +} + +.align-content-end{ + align-content: flex-end !important; +} + +.align-content-center{ + align-content: center !important; +} + +.align-content-between{ + align-content: space-between !important; +} + +.align-content-around{ + align-content: space-around !important; +} + +.align-content-stretch{ + align-content: stretch !important; +} + +.align-self-auto{ + align-self: auto !important; +} + +.align-self-start{ + align-self: flex-start !important; +} + +.align-self-end{ + align-self: flex-end !important; +} + +.align-self-center{ + align-self: center !important; +} + +.align-self-baseline{ + align-self: baseline !important; +} + +.align-self-stretch{ + align-self: stretch !important; +} + +.order-first{ + order: -1 !important; +} + +.order-0{ + order: 0 !important; +} + +.order-1{ + order: 1 !important; +} + +.order-2{ + order: 2 !important; +} + +.order-3{ + order: 3 !important; +} + +.order-4{ + order: 4 !important; +} + +.order-5{ + order: 5 !important; +} + +.order-last{ + order: 6 !important; +} + +.m-0{ + margin: 0 !important; +} + +.m-1{ + margin: 0.25rem !important; +} + +.m-2{ + margin: 0.5rem !important; +} + +.m-3{ + margin: 1rem !important; +} + +.m-4{ + margin: 1.5rem !important; +} + +.m-5{ + margin: 3rem !important; +} + +.m-auto{ + margin: auto !important; +} + +.mx-0{ + margin-right: 0 !important; + margin-left: 0 !important; +} + +.mx-1{ + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; +} + +.mx-2{ + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; +} + +.mx-3{ + margin-right: 1rem !important; + margin-left: 1rem !important; +} + +.mx-4{ + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; +} + +.mx-5{ + margin-right: 3rem !important; + margin-left: 3rem !important; +} + +.mx-auto{ + margin-right: auto !important; + margin-left: auto !important; +} + +.my-0{ + margin-top: 0 !important; + margin-bottom: 0 !important; +} + +.my-1{ + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; +} + +.my-2{ + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; +} + +.my-3{ + margin-top: 1rem !important; + margin-bottom: 1rem !important; +} + +.my-4{ + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; +} + +.my-5{ + margin-top: 3rem !important; + margin-bottom: 3rem !important; +} + +.my-auto{ + margin-top: auto !important; + margin-bottom: auto !important; +} + +.mt-0{ + margin-top: 0 !important; +} + +.mt-1{ + margin-top: 0.25rem !important; +} + +.mt-2{ + margin-top: 0.5rem !important; +} + +.mt-3{ + margin-top: 1rem !important; +} + +.mt-4{ + margin-top: 1.5rem !important; +} + +.mt-5{ + margin-top: 3rem !important; +} + +.mt-auto{ + margin-top: auto !important; +} + +.me-0{ + margin-right: 0 !important; +} + +.me-1{ + margin-right: 0.25rem !important; +} + +.me-2{ + margin-right: 0.5rem !important; +} + +.me-3{ + margin-right: 1rem !important; +} + +.me-4{ + margin-right: 1.5rem !important; +} + +.me-5{ + margin-right: 3rem !important; +} + +.me-auto{ + margin-right: auto !important; +} + +.mb-0{ + margin-bottom: 0 !important; +} + +.mb-1{ + margin-bottom: 0.25rem !important; +} + +.mb-2{ + margin-bottom: 0.5rem !important; +} + +.mb-3{ + margin-bottom: 1rem !important; +} + +.mb-4{ + margin-bottom: 1.5rem !important; +} + +.mb-5{ + margin-bottom: 3rem !important; +} + +.mb-auto{ + margin-bottom: auto !important; +} + +.ms-0{ + margin-left: 0 !important; +} + +.ms-1{ + margin-left: 0.25rem !important; +} + +.ms-2{ + margin-left: 0.5rem !important; +} + +.ms-3{ + margin-left: 1rem !important; +} + +.ms-4{ + margin-left: 1.5rem !important; +} + +.ms-5{ + margin-left: 3rem !important; +} + +.ms-auto{ + margin-left: auto !important; +} + +.p-0{ + padding: 0 !important; +} + +.p-1{ + padding: 0.25rem !important; +} + +.p-2{ + padding: 0.5rem !important; +} + +.p-3{ + padding: 1rem !important; +} + +.p-4{ + padding: 1.5rem !important; +} + +.p-5{ + padding: 3rem !important; +} + +.px-0{ + padding-right: 0 !important; + padding-left: 0 !important; +} + +.px-1{ + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; +} + +.px-2{ + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; +} + +.px-3{ + padding-right: 1rem !important; + padding-left: 1rem !important; +} + +.px-4{ + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; +} + +.px-5{ + padding-right: 3rem !important; + padding-left: 3rem !important; +} + +.py-0{ + padding-top: 0 !important; + padding-bottom: 0 !important; +} + +.py-1{ + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; +} + +.py-2{ + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; +} + +.py-3{ + padding-top: 1rem !important; + padding-bottom: 1rem !important; +} + +.py-4{ + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; +} + +.py-5{ + padding-top: 3rem !important; + padding-bottom: 3rem !important; +} + +.pt-0{ + padding-top: 0 !important; +} + +.pt-1{ + padding-top: 0.25rem !important; +} + +.pt-2{ + padding-top: 0.5rem !important; +} + +.pt-3{ + padding-top: 1rem !important; +} + +.pt-4{ + padding-top: 1.5rem !important; +} + +.pt-5{ + padding-top: 3rem !important; +} + +.pe-0{ + padding-right: 0 !important; +} + +.pe-1{ + padding-right: 0.25rem !important; +} + +.pe-2{ + padding-right: 0.5rem !important; +} + +.pe-3{ + padding-right: 1rem !important; +} + +.pe-4{ + padding-right: 1.5rem !important; +} + +.pe-5{ + padding-right: 3rem !important; +} + +.pb-0{ + padding-bottom: 0 !important; +} + +.pb-1{ + padding-bottom: 0.25rem !important; +} + +.pb-2{ + padding-bottom: 0.5rem !important; +} + +.pb-3{ + padding-bottom: 1rem !important; +} + +.pb-4{ + padding-bottom: 1.5rem !important; +} + +.pb-5{ + padding-bottom: 3rem !important; +} + +.ps-0{ + padding-left: 0 !important; +} + +.ps-1{ + padding-left: 0.25rem !important; +} + +.ps-2{ + padding-left: 0.5rem !important; +} + +.ps-3{ + padding-left: 1rem !important; +} + +.ps-4{ + padding-left: 1.5rem !important; +} + +.ps-5{ + padding-left: 3rem !important; +} + +@media (min-width: 576px){ + .d-sm-inline{ + display: inline !important; + } + + .d-sm-inline-block{ + display: inline-block !important; + } + + .d-sm-block{ + display: block !important; + } + + .d-sm-grid{ + display: grid !important; + } + + .d-sm-table{ + display: table !important; + } + + .d-sm-table-row{ + display: table-row !important; + } + + .d-sm-table-cell{ + display: table-cell !important; + } + + .d-sm-flex{ + display: flex !important; + } + + .d-sm-inline-flex{ + display: inline-flex !important; + } + + .d-sm-none{ + display: none !important; + } + + .flex-sm-fill{ + flex: 1 1 auto !important; + } + + .flex-sm-row{ + flex-direction: row !important; + } + + .flex-sm-column{ + flex-direction: column !important; + } + + .flex-sm-row-reverse{ + flex-direction: row-reverse !important; + } + + .flex-sm-column-reverse{ + flex-direction: column-reverse !important; + } + + .flex-sm-grow-0{ + flex-grow: 0 !important; + } + + .flex-sm-grow-1{ + flex-grow: 1 !important; + } + + .flex-sm-shrink-0{ + flex-shrink: 0 !important; + } + + .flex-sm-shrink-1{ + flex-shrink: 1 !important; + } + + .flex-sm-wrap{ + flex-wrap: wrap !important; + } + + .flex-sm-nowrap{ + flex-wrap: nowrap !important; + } + + .flex-sm-wrap-reverse{ + flex-wrap: wrap-reverse !important; + } + + .justify-content-sm-start{ + justify-content: flex-start !important; + } + + .justify-content-sm-end{ + justify-content: flex-end !important; + } + + .justify-content-sm-center{ + justify-content: center !important; + } + + .justify-content-sm-between{ + justify-content: space-between !important; + } + + .justify-content-sm-around{ + justify-content: space-around !important; + } + + .justify-content-sm-evenly{ + justify-content: space-evenly !important; + } + + .align-items-sm-start{ + align-items: flex-start !important; + } + + .align-items-sm-end{ + align-items: flex-end !important; + } + + .align-items-sm-center{ + align-items: center !important; + } + + .align-items-sm-baseline{ + align-items: baseline !important; + } + + .align-items-sm-stretch{ + align-items: stretch !important; + } + + .align-content-sm-start{ + align-content: flex-start !important; + } + + .align-content-sm-end{ + align-content: flex-end !important; + } + + .align-content-sm-center{ + align-content: center !important; + } + + .align-content-sm-between{ + align-content: space-between !important; + } + + .align-content-sm-around{ + align-content: space-around !important; + } + + .align-content-sm-stretch{ + align-content: stretch !important; + } + + .align-self-sm-auto{ + align-self: auto !important; + } + + .align-self-sm-start{ + align-self: flex-start !important; + } + + .align-self-sm-end{ + align-self: flex-end !important; + } + + .align-self-sm-center{ + align-self: center !important; + } + + .align-self-sm-baseline{ + align-self: baseline !important; + } + + .align-self-sm-stretch{ + align-self: stretch !important; + } + + .order-sm-first{ + order: -1 !important; + } + + .order-sm-0{ + order: 0 !important; + } + + .order-sm-1{ + order: 1 !important; + } + + .order-sm-2{ + order: 2 !important; + } + + .order-sm-3{ + order: 3 !important; + } + + .order-sm-4{ + order: 4 !important; + } + + .order-sm-5{ + order: 5 !important; + } + + .order-sm-last{ + order: 6 !important; + } + + .m-sm-0{ + margin: 0 !important; + } + + .m-sm-1{ + margin: 0.25rem !important; + } + + .m-sm-2{ + margin: 0.5rem !important; + } + + .m-sm-3{ + margin: 1rem !important; + } + + .m-sm-4{ + margin: 1.5rem !important; + } + + .m-sm-5{ + margin: 3rem !important; + } + + .m-sm-auto{ + margin: auto !important; + } + + .mx-sm-0{ + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-sm-1{ + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-sm-2{ + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-sm-3{ + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-sm-4{ + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-sm-5{ + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-sm-auto{ + margin-right: auto !important; + margin-left: auto !important; + } + + .my-sm-0{ + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-sm-1{ + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-sm-2{ + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-sm-3{ + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-sm-4{ + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-sm-5{ + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-sm-auto{ + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-sm-0{ + margin-top: 0 !important; + } + + .mt-sm-1{ + margin-top: 0.25rem !important; + } + + .mt-sm-2{ + margin-top: 0.5rem !important; + } + + .mt-sm-3{ + margin-top: 1rem !important; + } + + .mt-sm-4{ + margin-top: 1.5rem !important; + } + + .mt-sm-5{ + margin-top: 3rem !important; + } + + .mt-sm-auto{ + margin-top: auto !important; + } + + .me-sm-0{ + margin-right: 0 !important; + } + + .me-sm-1{ + margin-right: 0.25rem !important; + } + + .me-sm-2{ + margin-right: 0.5rem !important; + } + + .me-sm-3{ + margin-right: 1rem !important; + } + + .me-sm-4{ + margin-right: 1.5rem !important; + } + + .me-sm-5{ + margin-right: 3rem !important; + } + + .me-sm-auto{ + margin-right: auto !important; + } + + .mb-sm-0{ + margin-bottom: 0 !important; + } + + .mb-sm-1{ + margin-bottom: 0.25rem !important; + } + + .mb-sm-2{ + margin-bottom: 0.5rem !important; + } + + .mb-sm-3{ + margin-bottom: 1rem !important; + } + + .mb-sm-4{ + margin-bottom: 1.5rem !important; + } + + .mb-sm-5{ + margin-bottom: 3rem !important; + } + + .mb-sm-auto{ + margin-bottom: auto !important; + } + + .ms-sm-0{ + margin-left: 0 !important; + } + + .ms-sm-1{ + margin-left: 0.25rem !important; + } + + .ms-sm-2{ + margin-left: 0.5rem !important; + } + + .ms-sm-3{ + margin-left: 1rem !important; + } + + .ms-sm-4{ + margin-left: 1.5rem !important; + } + + .ms-sm-5{ + margin-left: 3rem !important; + } + + .ms-sm-auto{ + margin-left: auto !important; + } + + .p-sm-0{ + padding: 0 !important; + } + + .p-sm-1{ + padding: 0.25rem !important; + } + + .p-sm-2{ + padding: 0.5rem !important; + } + + .p-sm-3{ + padding: 1rem !important; + } + + .p-sm-4{ + padding: 1.5rem !important; + } + + .p-sm-5{ + padding: 3rem !important; + } + + .px-sm-0{ + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-sm-1{ + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-sm-2{ + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-sm-3{ + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-sm-4{ + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-sm-5{ + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-sm-0{ + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-sm-1{ + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-sm-2{ + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-sm-3{ + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-sm-4{ + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-sm-5{ + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-sm-0{ + padding-top: 0 !important; + } + + .pt-sm-1{ + padding-top: 0.25rem !important; + } + + .pt-sm-2{ + padding-top: 0.5rem !important; + } + + .pt-sm-3{ + padding-top: 1rem !important; + } + + .pt-sm-4{ + padding-top: 1.5rem !important; + } + + .pt-sm-5{ + padding-top: 3rem !important; + } + + .pe-sm-0{ + padding-right: 0 !important; + } + + .pe-sm-1{ + padding-right: 0.25rem !important; + } + + .pe-sm-2{ + padding-right: 0.5rem !important; + } + + .pe-sm-3{ + padding-right: 1rem !important; + } + + .pe-sm-4{ + padding-right: 1.5rem !important; + } + + .pe-sm-5{ + padding-right: 3rem !important; + } + + .pb-sm-0{ + padding-bottom: 0 !important; + } + + .pb-sm-1{ + padding-bottom: 0.25rem !important; + } + + .pb-sm-2{ + padding-bottom: 0.5rem !important; + } + + .pb-sm-3{ + padding-bottom: 1rem !important; + } + + .pb-sm-4{ + padding-bottom: 1.5rem !important; + } + + .pb-sm-5{ + padding-bottom: 3rem !important; + } + + .ps-sm-0{ + padding-left: 0 !important; + } + + .ps-sm-1{ + padding-left: 0.25rem !important; + } + + .ps-sm-2{ + padding-left: 0.5rem !important; + } + + .ps-sm-3{ + padding-left: 1rem !important; + } + + .ps-sm-4{ + padding-left: 1.5rem !important; + } + + .ps-sm-5{ + padding-left: 3rem !important; + } +} + +@media (min-width: 768px){ + .d-md-inline{ + display: inline !important; + } + + .d-md-inline-block{ + display: inline-block !important; + } + + .d-md-block{ + display: block !important; + } + + .d-md-grid{ + display: grid !important; + } + + .d-md-table{ + display: table !important; + } + + .d-md-table-row{ + display: table-row !important; + } + + .d-md-table-cell{ + display: table-cell !important; + } + + .d-md-flex{ + display: flex !important; + } + + .d-md-inline-flex{ + display: inline-flex !important; + } + + .d-md-none{ + display: none !important; + } + + .flex-md-fill{ + flex: 1 1 auto !important; + } + + .flex-md-row{ + flex-direction: row !important; + } + + .flex-md-column{ + flex-direction: column !important; + } + + .flex-md-row-reverse{ + flex-direction: row-reverse !important; + } + + .flex-md-column-reverse{ + flex-direction: column-reverse !important; + } + + .flex-md-grow-0{ + flex-grow: 0 !important; + } + + .flex-md-grow-1{ + flex-grow: 1 !important; + } + + .flex-md-shrink-0{ + flex-shrink: 0 !important; + } + + .flex-md-shrink-1{ + flex-shrink: 1 !important; + } + + .flex-md-wrap{ + flex-wrap: wrap !important; + } + + .flex-md-nowrap{ + flex-wrap: nowrap !important; + } + + .flex-md-wrap-reverse{ + flex-wrap: wrap-reverse !important; + } + + .justify-content-md-start{ + justify-content: flex-start !important; + } + + .justify-content-md-end{ + justify-content: flex-end !important; + } + + .justify-content-md-center{ + justify-content: center !important; + } + + .justify-content-md-between{ + justify-content: space-between !important; + } + + .justify-content-md-around{ + justify-content: space-around !important; + } + + .justify-content-md-evenly{ + justify-content: space-evenly !important; + } + + .align-items-md-start{ + align-items: flex-start !important; + } + + .align-items-md-end{ + align-items: flex-end !important; + } + + .align-items-md-center{ + align-items: center !important; + } + + .align-items-md-baseline{ + align-items: baseline !important; + } + + .align-items-md-stretch{ + align-items: stretch !important; + } + + .align-content-md-start{ + align-content: flex-start !important; + } + + .align-content-md-end{ + align-content: flex-end !important; + } + + .align-content-md-center{ + align-content: center !important; + } + + .align-content-md-between{ + align-content: space-between !important; + } + + .align-content-md-around{ + align-content: space-around !important; + } + + .align-content-md-stretch{ + align-content: stretch !important; + } + + .align-self-md-auto{ + align-self: auto !important; + } + + .align-self-md-start{ + align-self: flex-start !important; + } + + .align-self-md-end{ + align-self: flex-end !important; + } + + .align-self-md-center{ + align-self: center !important; + } + + .align-self-md-baseline{ + align-self: baseline !important; + } + + .align-self-md-stretch{ + align-self: stretch !important; + } + + .order-md-first{ + order: -1 !important; + } + + .order-md-0{ + order: 0 !important; + } + + .order-md-1{ + order: 1 !important; + } + + .order-md-2{ + order: 2 !important; + } + + .order-md-3{ + order: 3 !important; + } + + .order-md-4{ + order: 4 !important; + } + + .order-md-5{ + order: 5 !important; + } + + .order-md-last{ + order: 6 !important; + } + + .m-md-0{ + margin: 0 !important; + } + + .m-md-1{ + margin: 0.25rem !important; + } + + .m-md-2{ + margin: 0.5rem !important; + } + + .m-md-3{ + margin: 1rem !important; + } + + .m-md-4{ + margin: 1.5rem !important; + } + + .m-md-5{ + margin: 3rem !important; + } + + .m-md-auto{ + margin: auto !important; + } + + .mx-md-0{ + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-md-1{ + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-md-2{ + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-md-3{ + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-md-4{ + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-md-5{ + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-md-auto{ + margin-right: auto !important; + margin-left: auto !important; + } + + .my-md-0{ + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-md-1{ + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-md-2{ + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-md-3{ + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-md-4{ + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-md-5{ + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-md-auto{ + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-md-0{ + margin-top: 0 !important; + } + + .mt-md-1{ + margin-top: 0.25rem !important; + } + + .mt-md-2{ + margin-top: 0.5rem !important; + } + + .mt-md-3{ + margin-top: 1rem !important; + } + + .mt-md-4{ + margin-top: 1.5rem !important; + } + + .mt-md-5{ + margin-top: 3rem !important; + } + + .mt-md-auto{ + margin-top: auto !important; + } + + .me-md-0{ + margin-right: 0 !important; + } + + .me-md-1{ + margin-right: 0.25rem !important; + } + + .me-md-2{ + margin-right: 0.5rem !important; + } + + .me-md-3{ + margin-right: 1rem !important; + } + + .me-md-4{ + margin-right: 1.5rem !important; + } + + .me-md-5{ + margin-right: 3rem !important; + } + + .me-md-auto{ + margin-right: auto !important; + } + + .mb-md-0{ + margin-bottom: 0 !important; + } + + .mb-md-1{ + margin-bottom: 0.25rem !important; + } + + .mb-md-2{ + margin-bottom: 0.5rem !important; + } + + .mb-md-3{ + margin-bottom: 1rem !important; + } + + .mb-md-4{ + margin-bottom: 1.5rem !important; + } + + .mb-md-5{ + margin-bottom: 3rem !important; + } + + .mb-md-auto{ + margin-bottom: auto !important; + } + + .ms-md-0{ + margin-left: 0 !important; + } + + .ms-md-1{ + margin-left: 0.25rem !important; + } + + .ms-md-2{ + margin-left: 0.5rem !important; + } + + .ms-md-3{ + margin-left: 1rem !important; + } + + .ms-md-4{ + margin-left: 1.5rem !important; + } + + .ms-md-5{ + margin-left: 3rem !important; + } + + .ms-md-auto{ + margin-left: auto !important; + } + + .p-md-0{ + padding: 0 !important; + } + + .p-md-1{ + padding: 0.25rem !important; + } + + .p-md-2{ + padding: 0.5rem !important; + } + + .p-md-3{ + padding: 1rem !important; + } + + .p-md-4{ + padding: 1.5rem !important; + } + + .p-md-5{ + padding: 3rem !important; + } + + .px-md-0{ + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-md-1{ + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-md-2{ + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-md-3{ + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-md-4{ + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-md-5{ + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-md-0{ + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-md-1{ + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-md-2{ + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-md-3{ + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-md-4{ + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-md-5{ + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-md-0{ + padding-top: 0 !important; + } + + .pt-md-1{ + padding-top: 0.25rem !important; + } + + .pt-md-2{ + padding-top: 0.5rem !important; + } + + .pt-md-3{ + padding-top: 1rem !important; + } + + .pt-md-4{ + padding-top: 1.5rem !important; + } + + .pt-md-5{ + padding-top: 3rem !important; + } + + .pe-md-0{ + padding-right: 0 !important; + } + + .pe-md-1{ + padding-right: 0.25rem !important; + } + + .pe-md-2{ + padding-right: 0.5rem !important; + } + + .pe-md-3{ + padding-right: 1rem !important; + } + + .pe-md-4{ + padding-right: 1.5rem !important; + } + + .pe-md-5{ + padding-right: 3rem !important; + } + + .pb-md-0{ + padding-bottom: 0 !important; + } + + .pb-md-1{ + padding-bottom: 0.25rem !important; + } + + .pb-md-2{ + padding-bottom: 0.5rem !important; + } + + .pb-md-3{ + padding-bottom: 1rem !important; + } + + .pb-md-4{ + padding-bottom: 1.5rem !important; + } + + .pb-md-5{ + padding-bottom: 3rem !important; + } + + .ps-md-0{ + padding-left: 0 !important; + } + + .ps-md-1{ + padding-left: 0.25rem !important; + } + + .ps-md-2{ + padding-left: 0.5rem !important; + } + + .ps-md-3{ + padding-left: 1rem !important; + } + + .ps-md-4{ + padding-left: 1.5rem !important; + } + + .ps-md-5{ + padding-left: 3rem !important; + } +} + +@media (min-width: 992px){ + .d-lg-inline{ + display: inline !important; + } + + .d-lg-inline-block{ + display: inline-block !important; + } + + .d-lg-block{ + display: block !important; + } + + .d-lg-grid{ + display: grid !important; + } + + .d-lg-table{ + display: table !important; + } + + .d-lg-table-row{ + display: table-row !important; + } + + .d-lg-table-cell{ + display: table-cell !important; + } + + .d-lg-flex{ + display: flex !important; + } + + .d-lg-inline-flex{ + display: inline-flex !important; + } + + .d-lg-none{ + display: none !important; + } + + .flex-lg-fill{ + flex: 1 1 auto !important; + } + + .flex-lg-row{ + flex-direction: row !important; + } + + .flex-lg-column{ + flex-direction: column !important; + } + + .flex-lg-row-reverse{ + flex-direction: row-reverse !important; + } + + .flex-lg-column-reverse{ + flex-direction: column-reverse !important; + } + + .flex-lg-grow-0{ + flex-grow: 0 !important; + } + + .flex-lg-grow-1{ + flex-grow: 1 !important; + } + + .flex-lg-shrink-0{ + flex-shrink: 0 !important; + } + + .flex-lg-shrink-1{ + flex-shrink: 1 !important; + } + + .flex-lg-wrap{ + flex-wrap: wrap !important; + } + + .flex-lg-nowrap{ + flex-wrap: nowrap !important; + } + + .flex-lg-wrap-reverse{ + flex-wrap: wrap-reverse !important; + } + + .justify-content-lg-start{ + justify-content: flex-start !important; + } + + .justify-content-lg-end{ + justify-content: flex-end !important; + } + + .justify-content-lg-center{ + justify-content: center !important; + } + + .justify-content-lg-between{ + justify-content: space-between !important; + } + + .justify-content-lg-around{ + justify-content: space-around !important; + } + + .justify-content-lg-evenly{ + justify-content: space-evenly !important; + } + + .align-items-lg-start{ + align-items: flex-start !important; + } + + .align-items-lg-end{ + align-items: flex-end !important; + } + + .align-items-lg-center{ + align-items: center !important; + } + + .align-items-lg-baseline{ + align-items: baseline !important; + } + + .align-items-lg-stretch{ + align-items: stretch !important; + } + + .align-content-lg-start{ + align-content: flex-start !important; + } + + .align-content-lg-end{ + align-content: flex-end !important; + } + + .align-content-lg-center{ + align-content: center !important; + } + + .align-content-lg-between{ + align-content: space-between !important; + } + + .align-content-lg-around{ + align-content: space-around !important; + } + + .align-content-lg-stretch{ + align-content: stretch !important; + } + + .align-self-lg-auto{ + align-self: auto !important; + } + + .align-self-lg-start{ + align-self: flex-start !important; + } + + .align-self-lg-end{ + align-self: flex-end !important; + } + + .align-self-lg-center{ + align-self: center !important; + } + + .align-self-lg-baseline{ + align-self: baseline !important; + } + + .align-self-lg-stretch{ + align-self: stretch !important; + } + + .order-lg-first{ + order: -1 !important; + } + + .order-lg-0{ + order: 0 !important; + } + + .order-lg-1{ + order: 1 !important; + } + + .order-lg-2{ + order: 2 !important; + } + + .order-lg-3{ + order: 3 !important; + } + + .order-lg-4{ + order: 4 !important; + } + + .order-lg-5{ + order: 5 !important; + } + + .order-lg-last{ + order: 6 !important; + } + + .m-lg-0{ + margin: 0 !important; + } + + .m-lg-1{ + margin: 0.25rem !important; + } + + .m-lg-2{ + margin: 0.5rem !important; + } + + .m-lg-3{ + margin: 1rem !important; + } + + .m-lg-4{ + margin: 1.5rem !important; + } + + .m-lg-5{ + margin: 3rem !important; + } + + .m-lg-auto{ + margin: auto !important; + } + + .mx-lg-0{ + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-lg-1{ + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-lg-2{ + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-lg-3{ + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-lg-4{ + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-lg-5{ + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-lg-auto{ + margin-right: auto !important; + margin-left: auto !important; + } + + .my-lg-0{ + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-lg-1{ + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-lg-2{ + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-lg-3{ + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-lg-4{ + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-lg-5{ + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-lg-auto{ + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-lg-0{ + margin-top: 0 !important; + } + + .mt-lg-1{ + margin-top: 0.25rem !important; + } + + .mt-lg-2{ + margin-top: 0.5rem !important; + } + + .mt-lg-3{ + margin-top: 1rem !important; + } + + .mt-lg-4{ + margin-top: 1.5rem !important; + } + + .mt-lg-5{ + margin-top: 3rem !important; + } + + .mt-lg-auto{ + margin-top: auto !important; + } + + .me-lg-0{ + margin-right: 0 !important; + } + + .me-lg-1{ + margin-right: 0.25rem !important; + } + + .me-lg-2{ + margin-right: 0.5rem !important; + } + + .me-lg-3{ + margin-right: 1rem !important; + } + + .me-lg-4{ + margin-right: 1.5rem !important; + } + + .me-lg-5{ + margin-right: 3rem !important; + } + + .me-lg-auto{ + margin-right: auto !important; + } + + .mb-lg-0{ + margin-bottom: 0 !important; + } + + .mb-lg-1{ + margin-bottom: 0.25rem !important; + } + + .mb-lg-2{ + margin-bottom: 0.5rem !important; + } + + .mb-lg-3{ + margin-bottom: 1rem !important; + } + + .mb-lg-4{ + margin-bottom: 1.5rem !important; + } + + .mb-lg-5{ + margin-bottom: 3rem !important; + } + + .mb-lg-auto{ + margin-bottom: auto !important; + } + + .ms-lg-0{ + margin-left: 0 !important; + } + + .ms-lg-1{ + margin-left: 0.25rem !important; + } + + .ms-lg-2{ + margin-left: 0.5rem !important; + } + + .ms-lg-3{ + margin-left: 1rem !important; + } + + .ms-lg-4{ + margin-left: 1.5rem !important; + } + + .ms-lg-5{ + margin-left: 3rem !important; + } + + .ms-lg-auto{ + margin-left: auto !important; + } + + .p-lg-0{ + padding: 0 !important; + } + + .p-lg-1{ + padding: 0.25rem !important; + } + + .p-lg-2{ + padding: 0.5rem !important; + } + + .p-lg-3{ + padding: 1rem !important; + } + + .p-lg-4{ + padding: 1.5rem !important; + } + + .p-lg-5{ + padding: 3rem !important; + } + + .px-lg-0{ + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-lg-1{ + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-lg-2{ + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-lg-3{ + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-lg-4{ + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-lg-5{ + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-lg-0{ + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-lg-1{ + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-lg-2{ + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-lg-3{ + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-lg-4{ + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-lg-5{ + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-lg-0{ + padding-top: 0 !important; + } + + .pt-lg-1{ + padding-top: 0.25rem !important; + } + + .pt-lg-2{ + padding-top: 0.5rem !important; + } + + .pt-lg-3{ + padding-top: 1rem !important; + } + + .pt-lg-4{ + padding-top: 1.5rem !important; + } + + .pt-lg-5{ + padding-top: 3rem !important; + } + + .pe-lg-0{ + padding-right: 0 !important; + } + + .pe-lg-1{ + padding-right: 0.25rem !important; + } + + .pe-lg-2{ + padding-right: 0.5rem !important; + } + + .pe-lg-3{ + padding-right: 1rem !important; + } + + .pe-lg-4{ + padding-right: 1.5rem !important; + } + + .pe-lg-5{ + padding-right: 3rem !important; + } + + .pb-lg-0{ + padding-bottom: 0 !important; + } + + .pb-lg-1{ + padding-bottom: 0.25rem !important; + } + + .pb-lg-2{ + padding-bottom: 0.5rem !important; + } + + .pb-lg-3{ + padding-bottom: 1rem !important; + } + + .pb-lg-4{ + padding-bottom: 1.5rem !important; + } + + .pb-lg-5{ + padding-bottom: 3rem !important; + } + + .ps-lg-0{ + padding-left: 0 !important; + } + + .ps-lg-1{ + padding-left: 0.25rem !important; + } + + .ps-lg-2{ + padding-left: 0.5rem !important; + } + + .ps-lg-3{ + padding-left: 1rem !important; + } + + .ps-lg-4{ + padding-left: 1.5rem !important; + } + + .ps-lg-5{ + padding-left: 3rem !important; + } +} + +@media (min-width: 1200px){ + .d-xl-inline{ + display: inline !important; + } + + .d-xl-inline-block{ + display: inline-block !important; + } + + .d-xl-block{ + display: block !important; + } + + .d-xl-grid{ + display: grid !important; + } + + .d-xl-table{ + display: table !important; + } + + .d-xl-table-row{ + display: table-row !important; + } + + .d-xl-table-cell{ + display: table-cell !important; + } + + .d-xl-flex{ + display: flex !important; + } + + .d-xl-inline-flex{ + display: inline-flex !important; + } + + .d-xl-none{ + display: none !important; + } + + .flex-xl-fill{ + flex: 1 1 auto !important; + } + + .flex-xl-row{ + flex-direction: row !important; + } + + .flex-xl-column{ + flex-direction: column !important; + } + + .flex-xl-row-reverse{ + flex-direction: row-reverse !important; + } + + .flex-xl-column-reverse{ + flex-direction: column-reverse !important; + } + + .flex-xl-grow-0{ + flex-grow: 0 !important; + } + + .flex-xl-grow-1{ + flex-grow: 1 !important; + } + + .flex-xl-shrink-0{ + flex-shrink: 0 !important; + } + + .flex-xl-shrink-1{ + flex-shrink: 1 !important; + } + + .flex-xl-wrap{ + flex-wrap: wrap !important; + } + + .flex-xl-nowrap{ + flex-wrap: nowrap !important; + } + + .flex-xl-wrap-reverse{ + flex-wrap: wrap-reverse !important; + } + + .justify-content-xl-start{ + justify-content: flex-start !important; + } + + .justify-content-xl-end{ + justify-content: flex-end !important; + } + + .justify-content-xl-center{ + justify-content: center !important; + } + + .justify-content-xl-between{ + justify-content: space-between !important; + } + + .justify-content-xl-around{ + justify-content: space-around !important; + } + + .justify-content-xl-evenly{ + justify-content: space-evenly !important; + } + + .align-items-xl-start{ + align-items: flex-start !important; + } + + .align-items-xl-end{ + align-items: flex-end !important; + } + + .align-items-xl-center{ + align-items: center !important; + } + + .align-items-xl-baseline{ + align-items: baseline !important; + } + + .align-items-xl-stretch{ + align-items: stretch !important; + } + + .align-content-xl-start{ + align-content: flex-start !important; + } + + .align-content-xl-end{ + align-content: flex-end !important; + } + + .align-content-xl-center{ + align-content: center !important; + } + + .align-content-xl-between{ + align-content: space-between !important; + } + + .align-content-xl-around{ + align-content: space-around !important; + } + + .align-content-xl-stretch{ + align-content: stretch !important; + } + + .align-self-xl-auto{ + align-self: auto !important; + } + + .align-self-xl-start{ + align-self: flex-start !important; + } + + .align-self-xl-end{ + align-self: flex-end !important; + } + + .align-self-xl-center{ + align-self: center !important; + } + + .align-self-xl-baseline{ + align-self: baseline !important; + } + + .align-self-xl-stretch{ + align-self: stretch !important; + } + + .order-xl-first{ + order: -1 !important; + } + + .order-xl-0{ + order: 0 !important; + } + + .order-xl-1{ + order: 1 !important; + } + + .order-xl-2{ + order: 2 !important; + } + + .order-xl-3{ + order: 3 !important; + } + + .order-xl-4{ + order: 4 !important; + } + + .order-xl-5{ + order: 5 !important; + } + + .order-xl-last{ + order: 6 !important; + } + + .m-xl-0{ + margin: 0 !important; + } + + .m-xl-1{ + margin: 0.25rem !important; + } + + .m-xl-2{ + margin: 0.5rem !important; + } + + .m-xl-3{ + margin: 1rem !important; + } + + .m-xl-4{ + margin: 1.5rem !important; + } + + .m-xl-5{ + margin: 3rem !important; + } + + .m-xl-auto{ + margin: auto !important; + } + + .mx-xl-0{ + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-xl-1{ + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-xl-2{ + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-xl-3{ + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-xl-4{ + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-xl-5{ + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-xl-auto{ + margin-right: auto !important; + margin-left: auto !important; + } + + .my-xl-0{ + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-xl-1{ + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-xl-2{ + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-xl-3{ + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-xl-4{ + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-xl-5{ + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-xl-auto{ + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-xl-0{ + margin-top: 0 !important; + } + + .mt-xl-1{ + margin-top: 0.25rem !important; + } + + .mt-xl-2{ + margin-top: 0.5rem !important; + } + + .mt-xl-3{ + margin-top: 1rem !important; + } + + .mt-xl-4{ + margin-top: 1.5rem !important; + } + + .mt-xl-5{ + margin-top: 3rem !important; + } + + .mt-xl-auto{ + margin-top: auto !important; + } + + .me-xl-0{ + margin-right: 0 !important; + } + + .me-xl-1{ + margin-right: 0.25rem !important; + } + + .me-xl-2{ + margin-right: 0.5rem !important; + } + + .me-xl-3{ + margin-right: 1rem !important; + } + + .me-xl-4{ + margin-right: 1.5rem !important; + } + + .me-xl-5{ + margin-right: 3rem !important; + } + + .me-xl-auto{ + margin-right: auto !important; + } + + .mb-xl-0{ + margin-bottom: 0 !important; + } + + .mb-xl-1{ + margin-bottom: 0.25rem !important; + } + + .mb-xl-2{ + margin-bottom: 0.5rem !important; + } + + .mb-xl-3{ + margin-bottom: 1rem !important; + } + + .mb-xl-4{ + margin-bottom: 1.5rem !important; + } + + .mb-xl-5{ + margin-bottom: 3rem !important; + } + + .mb-xl-auto{ + margin-bottom: auto !important; + } + + .ms-xl-0{ + margin-left: 0 !important; + } + + .ms-xl-1{ + margin-left: 0.25rem !important; + } + + .ms-xl-2{ + margin-left: 0.5rem !important; + } + + .ms-xl-3{ + margin-left: 1rem !important; + } + + .ms-xl-4{ + margin-left: 1.5rem !important; + } + + .ms-xl-5{ + margin-left: 3rem !important; + } + + .ms-xl-auto{ + margin-left: auto !important; + } + + .p-xl-0{ + padding: 0 !important; + } + + .p-xl-1{ + padding: 0.25rem !important; + } + + .p-xl-2{ + padding: 0.5rem !important; + } + + .p-xl-3{ + padding: 1rem !important; + } + + .p-xl-4{ + padding: 1.5rem !important; + } + + .p-xl-5{ + padding: 3rem !important; + } + + .px-xl-0{ + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-xl-1{ + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-xl-2{ + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-xl-3{ + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-xl-4{ + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-xl-5{ + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-xl-0{ + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-xl-1{ + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-xl-2{ + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-xl-3{ + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-xl-4{ + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-xl-5{ + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-xl-0{ + padding-top: 0 !important; + } + + .pt-xl-1{ + padding-top: 0.25rem !important; + } + + .pt-xl-2{ + padding-top: 0.5rem !important; + } + + .pt-xl-3{ + padding-top: 1rem !important; + } + + .pt-xl-4{ + padding-top: 1.5rem !important; + } + + .pt-xl-5{ + padding-top: 3rem !important; + } + + .pe-xl-0{ + padding-right: 0 !important; + } + + .pe-xl-1{ + padding-right: 0.25rem !important; + } + + .pe-xl-2{ + padding-right: 0.5rem !important; + } + + .pe-xl-3{ + padding-right: 1rem !important; + } + + .pe-xl-4{ + padding-right: 1.5rem !important; + } + + .pe-xl-5{ + padding-right: 3rem !important; + } + + .pb-xl-0{ + padding-bottom: 0 !important; + } + + .pb-xl-1{ + padding-bottom: 0.25rem !important; + } + + .pb-xl-2{ + padding-bottom: 0.5rem !important; + } + + .pb-xl-3{ + padding-bottom: 1rem !important; + } + + .pb-xl-4{ + padding-bottom: 1.5rem !important; + } + + .pb-xl-5{ + padding-bottom: 3rem !important; + } + + .ps-xl-0{ + padding-left: 0 !important; + } + + .ps-xl-1{ + padding-left: 0.25rem !important; + } + + .ps-xl-2{ + padding-left: 0.5rem !important; + } + + .ps-xl-3{ + padding-left: 1rem !important; + } + + .ps-xl-4{ + padding-left: 1.5rem !important; + } + + .ps-xl-5{ + padding-left: 3rem !important; + } +} + +@media (min-width: 1400px){ + .d-xxl-inline{ + display: inline !important; + } + + .d-xxl-inline-block{ + display: inline-block !important; + } + + .d-xxl-block{ + display: block !important; + } + + .d-xxl-grid{ + display: grid !important; + } + + .d-xxl-table{ + display: table !important; + } + + .d-xxl-table-row{ + display: table-row !important; + } + + .d-xxl-table-cell{ + display: table-cell !important; + } + + .d-xxl-flex{ + display: flex !important; + } + + .d-xxl-inline-flex{ + display: inline-flex !important; + } + + .d-xxl-none{ + display: none !important; + } + + .flex-xxl-fill{ + flex: 1 1 auto !important; + } + + .flex-xxl-row{ + flex-direction: row !important; + } + + .flex-xxl-column{ + flex-direction: column !important; + } + + .flex-xxl-row-reverse{ + flex-direction: row-reverse !important; + } + + .flex-xxl-column-reverse{ + flex-direction: column-reverse !important; + } + + .flex-xxl-grow-0{ + flex-grow: 0 !important; + } + + .flex-xxl-grow-1{ + flex-grow: 1 !important; + } + + .flex-xxl-shrink-0{ + flex-shrink: 0 !important; + } + + .flex-xxl-shrink-1{ + flex-shrink: 1 !important; + } + + .flex-xxl-wrap{ + flex-wrap: wrap !important; + } + + .flex-xxl-nowrap{ + flex-wrap: nowrap !important; + } + + .flex-xxl-wrap-reverse{ + flex-wrap: wrap-reverse !important; + } + + .justify-content-xxl-start{ + justify-content: flex-start !important; + } + + .justify-content-xxl-end{ + justify-content: flex-end !important; + } + + .justify-content-xxl-center{ + justify-content: center !important; + } + + .justify-content-xxl-between{ + justify-content: space-between !important; + } + + .justify-content-xxl-around{ + justify-content: space-around !important; + } + + .justify-content-xxl-evenly{ + justify-content: space-evenly !important; + } + + .align-items-xxl-start{ + align-items: flex-start !important; + } + + .align-items-xxl-end{ + align-items: flex-end !important; + } + + .align-items-xxl-center{ + align-items: center !important; + } + + .align-items-xxl-baseline{ + align-items: baseline !important; + } + + .align-items-xxl-stretch{ + align-items: stretch !important; + } + + .align-content-xxl-start{ + align-content: flex-start !important; + } + + .align-content-xxl-end{ + align-content: flex-end !important; + } + + .align-content-xxl-center{ + align-content: center !important; + } + + .align-content-xxl-between{ + align-content: space-between !important; + } + + .align-content-xxl-around{ + align-content: space-around !important; + } + + .align-content-xxl-stretch{ + align-content: stretch !important; + } + + .align-self-xxl-auto{ + align-self: auto !important; + } + + .align-self-xxl-start{ + align-self: flex-start !important; + } + + .align-self-xxl-end{ + align-self: flex-end !important; + } + + .align-self-xxl-center{ + align-self: center !important; + } + + .align-self-xxl-baseline{ + align-self: baseline !important; + } + + .align-self-xxl-stretch{ + align-self: stretch !important; + } + + .order-xxl-first{ + order: -1 !important; + } + + .order-xxl-0{ + order: 0 !important; + } + + .order-xxl-1{ + order: 1 !important; + } + + .order-xxl-2{ + order: 2 !important; + } + + .order-xxl-3{ + order: 3 !important; + } + + .order-xxl-4{ + order: 4 !important; + } + + .order-xxl-5{ + order: 5 !important; + } + + .order-xxl-last{ + order: 6 !important; + } + + .m-xxl-0{ + margin: 0 !important; + } + + .m-xxl-1{ + margin: 0.25rem !important; + } + + .m-xxl-2{ + margin: 0.5rem !important; + } + + .m-xxl-3{ + margin: 1rem !important; + } + + .m-xxl-4{ + margin: 1.5rem !important; + } + + .m-xxl-5{ + margin: 3rem !important; + } + + .m-xxl-auto{ + margin: auto !important; + } + + .mx-xxl-0{ + margin-right: 0 !important; + margin-left: 0 !important; + } + + .mx-xxl-1{ + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + + .mx-xxl-2{ + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + + .mx-xxl-3{ + margin-right: 1rem !important; + margin-left: 1rem !important; + } + + .mx-xxl-4{ + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + + .mx-xxl-5{ + margin-right: 3rem !important; + margin-left: 3rem !important; + } + + .mx-xxl-auto{ + margin-right: auto !important; + margin-left: auto !important; + } + + .my-xxl-0{ + margin-top: 0 !important; + margin-bottom: 0 !important; + } + + .my-xxl-1{ + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-xxl-2{ + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-xxl-3{ + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + + .my-xxl-4{ + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-xxl-5{ + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + + .my-xxl-auto{ + margin-top: auto !important; + margin-bottom: auto !important; + } + + .mt-xxl-0{ + margin-top: 0 !important; + } + + .mt-xxl-1{ + margin-top: 0.25rem !important; + } + + .mt-xxl-2{ + margin-top: 0.5rem !important; + } + + .mt-xxl-3{ + margin-top: 1rem !important; + } + + .mt-xxl-4{ + margin-top: 1.5rem !important; + } + + .mt-xxl-5{ + margin-top: 3rem !important; + } + + .mt-xxl-auto{ + margin-top: auto !important; + } + + .me-xxl-0{ + margin-right: 0 !important; + } + + .me-xxl-1{ + margin-right: 0.25rem !important; + } + + .me-xxl-2{ + margin-right: 0.5rem !important; + } + + .me-xxl-3{ + margin-right: 1rem !important; + } + + .me-xxl-4{ + margin-right: 1.5rem !important; + } + + .me-xxl-5{ + margin-right: 3rem !important; + } + + .me-xxl-auto{ + margin-right: auto !important; + } + + .mb-xxl-0{ + margin-bottom: 0 !important; + } + + .mb-xxl-1{ + margin-bottom: 0.25rem !important; + } + + .mb-xxl-2{ + margin-bottom: 0.5rem !important; + } + + .mb-xxl-3{ + margin-bottom: 1rem !important; + } + + .mb-xxl-4{ + margin-bottom: 1.5rem !important; + } + + .mb-xxl-5{ + margin-bottom: 3rem !important; + } + + .mb-xxl-auto{ + margin-bottom: auto !important; + } + + .ms-xxl-0{ + margin-left: 0 !important; + } + + .ms-xxl-1{ + margin-left: 0.25rem !important; + } + + .ms-xxl-2{ + margin-left: 0.5rem !important; + } + + .ms-xxl-3{ + margin-left: 1rem !important; + } + + .ms-xxl-4{ + margin-left: 1.5rem !important; + } + + .ms-xxl-5{ + margin-left: 3rem !important; + } + + .ms-xxl-auto{ + margin-left: auto !important; + } + + .p-xxl-0{ + padding: 0 !important; + } + + .p-xxl-1{ + padding: 0.25rem !important; + } + + .p-xxl-2{ + padding: 0.5rem !important; + } + + .p-xxl-3{ + padding: 1rem !important; + } + + .p-xxl-4{ + padding: 1.5rem !important; + } + + .p-xxl-5{ + padding: 3rem !important; + } + + .px-xxl-0{ + padding-right: 0 !important; + padding-left: 0 !important; + } + + .px-xxl-1{ + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + + .px-xxl-2{ + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + + .px-xxl-3{ + padding-right: 1rem !important; + padding-left: 1rem !important; + } + + .px-xxl-4{ + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + + .px-xxl-5{ + padding-right: 3rem !important; + padding-left: 3rem !important; + } + + .py-xxl-0{ + padding-top: 0 !important; + padding-bottom: 0 !important; + } + + .py-xxl-1{ + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-xxl-2{ + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-xxl-3{ + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + + .py-xxl-4{ + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-xxl-5{ + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-xxl-0{ + padding-top: 0 !important; + } + + .pt-xxl-1{ + padding-top: 0.25rem !important; + } + + .pt-xxl-2{ + padding-top: 0.5rem !important; + } + + .pt-xxl-3{ + padding-top: 1rem !important; + } + + .pt-xxl-4{ + padding-top: 1.5rem !important; + } + + .pt-xxl-5{ + padding-top: 3rem !important; + } + + .pe-xxl-0{ + padding-right: 0 !important; + } + + .pe-xxl-1{ + padding-right: 0.25rem !important; + } + + .pe-xxl-2{ + padding-right: 0.5rem !important; + } + + .pe-xxl-3{ + padding-right: 1rem !important; + } + + .pe-xxl-4{ + padding-right: 1.5rem !important; + } + + .pe-xxl-5{ + padding-right: 3rem !important; + } + + .pb-xxl-0{ + padding-bottom: 0 !important; + } + + .pb-xxl-1{ + padding-bottom: 0.25rem !important; + } + + .pb-xxl-2{ + padding-bottom: 0.5rem !important; + } + + .pb-xxl-3{ + padding-bottom: 1rem !important; + } + + .pb-xxl-4{ + padding-bottom: 1.5rem !important; + } + + .pb-xxl-5{ + padding-bottom: 3rem !important; + } + + .ps-xxl-0{ + padding-left: 0 !important; + } + + .ps-xxl-1{ + padding-left: 0.25rem !important; + } + + .ps-xxl-2{ + padding-left: 0.5rem !important; + } + + .ps-xxl-3{ + padding-left: 1rem !important; + } + + .ps-xxl-4{ + padding-left: 1.5rem !important; + } + + .ps-xxl-5{ + padding-left: 3rem !important; + } +} + +@media print{ + .d-print-inline{ + display: inline !important; + } + + .d-print-inline-block{ + display: inline-block !important; + } + + .d-print-block{ + display: block !important; + } + + .d-print-grid{ + display: grid !important; + } + + .d-print-table{ + display: table !important; + } + + .d-print-table-row{ + display: table-row !important; + } + + .d-print-table-cell{ + display: table-cell !important; + } + + .d-print-flex{ + display: flex !important; + } + + .d-print-inline-flex{ + display: inline-flex !important; + } + + .d-print-none{ + display: none !important; + } +} + +/*# sourceMappingURL=bootstrap-grid.css.map */ diff --git a/static/assets/css/fontawesome/css/all.min.css b/static/assets/css/fontawesome/css/all.min.css new file mode 100644 index 0000000..0998088 --- /dev/null +++ b/static/assets/css/fontawesome/css/all.min.css @@ -0,0 +1,6 @@ +/*! + * Font Awesome Pro 5.12.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license (Commercial License) + * www.Ulabs.ir + */ +.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-abacus:before{content:"\f640"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acorn:before{content:"\f6ae"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-conditioner:before{content:"\f8f4"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-alarm-clock:before{content:"\f34e"}.fa-alarm-exclamation:before{content:"\f843"}.fa-alarm-plus:before{content:"\f844"}.fa-alarm-snooze:before{content:"\f845"}.fa-album:before{content:"\f89f"}.fa-album-collection:before{content:"\f8a0"}.fa-algolia:before{content:"\f36c"}.fa-alicorn:before{content:"\f6b0"}.fa-alien:before{content:"\f8f5"}.fa-alien-monster:before{content:"\f8f6"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-align-slash:before{content:"\f846"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-amp-guitar:before{content:"\f8a1"}.fa-analytics:before{content:"\f643"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angel:before{content:"\f779"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-crate:before{content:"\f6b1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-alt-down:before{content:"\f354"}.fa-arrow-alt-from-bottom:before{content:"\f346"}.fa-arrow-alt-from-left:before{content:"\f347"}.fa-arrow-alt-from-right:before{content:"\f348"}.fa-arrow-alt-from-top:before{content:"\f349"}.fa-arrow-alt-left:before{content:"\f355"}.fa-arrow-alt-right:before{content:"\f356"}.fa-arrow-alt-square-down:before{content:"\f350"}.fa-arrow-alt-square-left:before{content:"\f351"}.fa-arrow-alt-square-right:before{content:"\f352"}.fa-arrow-alt-square-up:before{content:"\f353"}.fa-arrow-alt-to-bottom:before{content:"\f34a"}.fa-arrow-alt-to-left:before{content:"\f34b"}.fa-arrow-alt-to-right:before{content:"\f34c"}.fa-arrow-alt-to-top:before{content:"\f34d"}.fa-arrow-alt-up:before{content:"\f357"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-from-bottom:before{content:"\f342"}.fa-arrow-from-left:before{content:"\f343"}.fa-arrow-from-right:before{content:"\f344"}.fa-arrow-from-top:before{content:"\f345"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-square-down:before{content:"\f339"}.fa-arrow-square-left:before{content:"\f33a"}.fa-arrow-square-right:before{content:"\f33b"}.fa-arrow-square-up:before{content:"\f33c"}.fa-arrow-to-bottom:before{content:"\f33d"}.fa-arrow-to-left:before{content:"\f33e"}.fa-arrow-to-right:before{content:"\f340"}.fa-arrow-to-top:before{content:"\f341"}.fa-arrow-up:before{content:"\f062"}.fa-arrows:before{content:"\f047"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-arrows-h:before{content:"\f07e"}.fa-arrows-v:before{content:"\f07d"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-atom-alt:before{content:"\f5d3"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-axe:before{content:"\f6b2"}.fa-axe-battle:before{content:"\f6b3"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backpack:before{content:"\f5d4"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-badge:before{content:"\f335"}.fa-badge-check:before{content:"\f336"}.fa-badge-dollar:before{content:"\f645"}.fa-badge-percent:before{content:"\f646"}.fa-badge-sheriff:before{content:"\f8a2"}.fa-badger-honey:before{content:"\f6b4"}.fa-bags-shopping:before{content:"\f847"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ball-pile:before{content:"\f77e"}.fa-ballot:before{content:"\f732"}.fa-ballot-check:before{content:"\f733"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-banjo:before{content:"\f8a3"}.fa-barcode:before{content:"\f02a"}.fa-barcode-alt:before{content:"\f463"}.fa-barcode-read:before{content:"\f464"}.fa-barcode-scan:before{content:"\f465"}.fa-bars:before{content:"\f0c9"}.fa-baseball:before{content:"\f432"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-basketball-hoop:before{content:"\f435"}.fa-bat:before{content:"\f6b5"}.fa-bath:before{content:"\f2cd"}.fa-battery-bolt:before{content:"\f376"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-slash:before{content:"\f377"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-bed-alt:before{content:"\f8f7"}.fa-bed-bunk:before{content:"\f8f8"}.fa-bed-empty:before{content:"\f8f9"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-exclamation:before{content:"\f848"}.fa-bell-on:before{content:"\f8fa"}.fa-bell-plus:before{content:"\f849"}.fa-bell-school:before{content:"\f5d5"}.fa-bell-school-slash:before{content:"\f5d6"}.fa-bell-slash:before{content:"\f1f6"}.fa-bells:before{content:"\f77f"}.fa-betamax:before{content:"\f8a4"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-biking-mountain:before{content:"\f84b"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blanket:before{content:"\f498"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blinds:before{content:"\f8fb"}.fa-blinds-open:before{content:"\f8fc"}.fa-blinds-raised:before{content:"\f8fd"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bone-break:before{content:"\f5d8"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-alt:before{content:"\f5d9"}.fa-book-dead:before{content:"\f6b7"}.fa-book-heart:before{content:"\f499"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-book-spells:before{content:"\f6b8"}.fa-book-user:before{content:"\f7e7"}.fa-bookmark:before{content:"\f02e"}.fa-books:before{content:"\f5db"}.fa-books-medical:before{content:"\f7e8"}.fa-boombox:before{content:"\f8a5"}.fa-boot:before{content:"\f782"}.fa-booth-curtain:before{content:"\f734"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-bottom:before{content:"\f84d"}.fa-border-center-h:before{content:"\f89c"}.fa-border-center-v:before{content:"\f89d"}.fa-border-inner:before{content:"\f84e"}.fa-border-left:before{content:"\f84f"}.fa-border-none:before{content:"\f850"}.fa-border-outer:before{content:"\f851"}.fa-border-right:before{content:"\f852"}.fa-border-style:before{content:"\f853"}.fa-border-style-alt:before{content:"\f854"}.fa-border-top:before{content:"\f855"}.fa-bow-arrow:before{content:"\f6b9"}.fa-bowling-ball:before{content:"\f436"}.fa-bowling-pins:before{content:"\f437"}.fa-box:before{content:"\f466"}.fa-box-alt:before{content:"\f49a"}.fa-box-ballot:before{content:"\f735"}.fa-box-check:before{content:"\f467"}.fa-box-fragile:before{content:"\f49b"}.fa-box-full:before{content:"\f49c"}.fa-box-heart:before{content:"\f49d"}.fa-box-open:before{content:"\f49e"}.fa-box-up:before{content:"\f49f"}.fa-box-usd:before{content:"\f4a0"}.fa-boxes:before{content:"\f468"}.fa-boxes-alt:before{content:"\f4a1"}.fa-boxing-glove:before{content:"\f438"}.fa-brackets:before{content:"\f7e9"}.fa-brackets-curly:before{content:"\f7ea"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-loaf:before{content:"\f7eb"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-bring-forward:before{content:"\f856"}.fa-bring-front:before{content:"\f857"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-browser:before{content:"\f37e"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-bullseye-arrow:before{content:"\f648"}.fa-bullseye-pointer:before{content:"\f649"}.fa-burger-soda:before{content:"\f858"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-burrito:before{content:"\f7ed"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-bus-school:before{content:"\f5dd"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-cabinet-filing:before{content:"\f64b"}.fa-cactus:before{content:"\f8a7"}.fa-calculator:before{content:"\f1ec"}.fa-calculator-alt:before{content:"\f64c"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-edit:before{content:"\f333"}.fa-calendar-exclamation:before{content:"\f334"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-star:before{content:"\f736"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camcorder:before{content:"\f8a8"}.fa-camera:before{content:"\f030"}.fa-camera-alt:before{content:"\f332"}.fa-camera-home:before{content:"\f8fe"}.fa-camera-movie:before{content:"\f8a9"}.fa-camera-polaroid:before{content:"\f8aa"}.fa-camera-retro:before{content:"\f083"}.fa-campfire:before{content:"\f6ba"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candle-holder:before{content:"\f6bc"}.fa-candy-cane:before{content:"\f786"}.fa-candy-corn:before{content:"\f6bd"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-building:before{content:"\f859"}.fa-car-bump:before{content:"\f5e0"}.fa-car-bus:before{content:"\f85a"}.fa-car-crash:before{content:"\f5e1"}.fa-car-garage:before{content:"\f5e2"}.fa-car-mechanic:before{content:"\f5e3"}.fa-car-side:before{content:"\f5e4"}.fa-car-tilt:before{content:"\f5e5"}.fa-car-wash:before{content:"\f5e6"}.fa-caravan:before{content:"\f8ff"}.fa-caravan-alt:before{content:"\f900"}.fa-caret-circle-down:before{content:"\f32d"}.fa-caret-circle-left:before{content:"\f32e"}.fa-caret-circle-right:before{content:"\f330"}.fa-caret-circle-up:before{content:"\f331"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cars:before{content:"\f85b"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cassette-tape:before{content:"\f8ab"}.fa-cat:before{content:"\f6be"}.fa-cat-space:before{content:"\f901"}.fa-cauldron:before{content:"\f6bf"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-cctv:before{content:"\f8ac"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chair-office:before{content:"\f6c1"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-line-down:before{content:"\f64d"}.fa-chart-network:before{content:"\f78a"}.fa-chart-pie:before{content:"\f200"}.fa-chart-pie-alt:before{content:"\f64e"}.fa-chart-scatter:before{content:"\f7ee"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-cheese-swiss:before{content:"\f7f0"}.fa-cheeseburger:before{content:"\f7f1"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-bishop-alt:before{content:"\f43b"}.fa-chess-board:before{content:"\f43c"}.fa-chess-clock:before{content:"\f43d"}.fa-chess-clock-alt:before{content:"\f43e"}.fa-chess-king:before{content:"\f43f"}.fa-chess-king-alt:before{content:"\f440"}.fa-chess-knight:before{content:"\f441"}.fa-chess-knight-alt:before{content:"\f442"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-pawn-alt:before{content:"\f444"}.fa-chess-queen:before{content:"\f445"}.fa-chess-queen-alt:before{content:"\f446"}.fa-chess-rook:before{content:"\f447"}.fa-chess-rook-alt:before{content:"\f448"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-double-down:before{content:"\f322"}.fa-chevron-double-left:before{content:"\f323"}.fa-chevron-double-right:before{content:"\f324"}.fa-chevron-double-up:before{content:"\f325"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-square-down:before{content:"\f329"}.fa-chevron-square-left:before{content:"\f32a"}.fa-chevron-square-right:before{content:"\f32b"}.fa-chevron-square-up:before{content:"\f32c"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chimney:before{content:"\f78b"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clarinet:before{content:"\f8ad"}.fa-claw-marks:before{content:"\f6c2"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clipboard-list-check:before{content:"\f737"}.fa-clipboard-prescription:before{content:"\f5e8"}.fa-clipboard-user:before{content:"\f7f3"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-drizzle:before{content:"\f738"}.fa-cloud-hail:before{content:"\f739"}.fa-cloud-hail-mixed:before{content:"\f73a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-music:before{content:"\f8ae"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-rainbow:before{content:"\f73e"}.fa-cloud-showers:before{content:"\f73f"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sleet:before{content:"\f741"}.fa-cloud-snow:before{content:"\f742"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload:before{content:"\f0ee"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-clouds:before{content:"\f744"}.fa-clouds-moon:before{content:"\f745"}.fa-clouds-sun:before{content:"\f746"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-club:before{content:"\f327"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-code-commit:before{content:"\f386"}.fa-code-merge:before{content:"\f387"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-coffee-pot:before{content:"\f902"}.fa-coffee-togo:before{content:"\f6c5"}.fa-coffin:before{content:"\f6c6"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coin:before{content:"\f85c"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comet:before{content:"\f903"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-alt-check:before{content:"\f4a2"}.fa-comment-alt-dollar:before{content:"\f650"}.fa-comment-alt-dots:before{content:"\f4a3"}.fa-comment-alt-edit:before{content:"\f4a4"}.fa-comment-alt-exclamation:before{content:"\f4a5"}.fa-comment-alt-lines:before{content:"\f4a6"}.fa-comment-alt-medical:before{content:"\f7f4"}.fa-comment-alt-minus:before{content:"\f4a7"}.fa-comment-alt-music:before{content:"\f8af"}.fa-comment-alt-plus:before{content:"\f4a8"}.fa-comment-alt-slash:before{content:"\f4a9"}.fa-comment-alt-smile:before{content:"\f4aa"}.fa-comment-alt-times:before{content:"\f4ab"}.fa-comment-check:before{content:"\f4ac"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-edit:before{content:"\f4ae"}.fa-comment-exclamation:before{content:"\f4af"}.fa-comment-lines:before{content:"\f4b0"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-minus:before{content:"\f4b1"}.fa-comment-music:before{content:"\f8b0"}.fa-comment-plus:before{content:"\f4b2"}.fa-comment-slash:before{content:"\f4b3"}.fa-comment-smile:before{content:"\f4b4"}.fa-comment-times:before{content:"\f4b5"}.fa-comments:before{content:"\f086"}.fa-comments-alt:before{content:"\f4b6"}.fa-comments-alt-dollar:before{content:"\f652"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compass-slash:before{content:"\f5e9"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-compress-wide:before{content:"\f326"}.fa-computer-classic:before{content:"\f8b1"}.fa-computer-speaker:before{content:"\f8b2"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-construction:before{content:"\f85d"}.fa-container-storage:before{content:"\f4b7"}.fa-contao:before{content:"\f26d"}.fa-conveyor-belt:before{content:"\f46e"}.fa-conveyor-belt-alt:before{content:"\f46f"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-corn:before{content:"\f6c7"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cow:before{content:"\f6c8"}.fa-cowbell:before{content:"\f8b3"}.fa-cowbell-more:before{content:"\f8b4"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-credit-card-blank:before{content:"\f389"}.fa-credit-card-front:before{content:"\f38a"}.fa-cricket:before{content:"\f449"}.fa-critical-role:before{content:"\f6c9"}.fa-croissant:before{content:"\f7f6"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-crutches:before{content:"\f7f8"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-curling:before{content:"\f44a"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dagger:before{content:"\f6cb"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-debug:before{content:"\f7f9"}.fa-deer:before{content:"\f78e"}.fa-deer-rudolph:before{content:"\f78f"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-desktop-alt:before{content:"\f390"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dewpoint:before{content:"\f748"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diamond:before{content:"\f219"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d10:before{content:"\f6cd"}.fa-dice-d12:before{content:"\f6ce"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d4:before{content:"\f6d0"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-d8:before{content:"\f6d2"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digging:before{content:"\f85e"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-diploma:before{content:"\f5ea"}.fa-directions:before{content:"\f5eb"}.fa-disc-drive:before{content:"\f8b5"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-disease:before{content:"\f7fa"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-do-not-enter:before{content:"\f5ec"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dog-leashed:before{content:"\f6d4"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-empty:before{content:"\f473"}.fa-dolly-flatbed:before{content:"\f474"}.fa-dolly-flatbed-alt:before{content:"\f475"}.fa-dolly-flatbed-empty:before{content:"\f476"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-circle:before{content:"\f5ed"}.fa-draw-polygon:before{content:"\f5ee"}.fa-draw-square:before{content:"\f5ef"}.fa-dreidel:before{content:"\f792"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-drone:before{content:"\f85f"}.fa-drone-alt:before{content:"\f860"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick:before{content:"\f6d6"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dryer:before{content:"\f861"}.fa-dryer-alt:before{content:"\f862"}.fa-duck:before{content:"\f6d8"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-ear:before{content:"\f5f0"}.fa-ear-muffs:before{content:"\f795"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-eclipse:before{content:"\f749"}.fa-eclipse-alt:before{content:"\f74a"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-egg-fried:before{content:"\f7fc"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-elephant:before{content:"\f6da"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-h-alt:before{content:"\f39b"}.fa-ellipsis-v:before{content:"\f142"}.fa-ellipsis-v-alt:before{content:"\f39c"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-empty-set:before{content:"\f656"}.fa-engine-warning:before{content:"\f5f2"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-dollar:before{content:"\f657"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange:before{content:"\f0ec"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-square:before{content:"\f321"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows:before{content:"\f31d"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expand-wide:before{content:"\f320"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link:before{content:"\f08e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square:before{content:"\f14c"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-evil:before{content:"\f6db"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fan-table:before{content:"\f904"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-farm:before{content:"\f864"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-faucet:before{content:"\f905"}.fa-faucet-drip:before{content:"\f906"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-field-hockey:before{content:"\f44c"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-certificate:before{content:"\f5f3"}.fa-file-chart-line:before{content:"\f659"}.fa-file-chart-pie:before{content:"\f65a"}.fa-file-check:before{content:"\f316"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-edit:before{content:"\f31c"}.fa-file-excel:before{content:"\f1c3"}.fa-file-exclamation:before{content:"\f31a"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-minus:before{content:"\f318"}.fa-file-music:before{content:"\f8b6"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-plus:before{content:"\f319"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-search:before{content:"\f865"}.fa-file-signature:before{content:"\f573"}.fa-file-spreadsheet:before{content:"\f65b"}.fa-file-times:before{content:"\f317"}.fa-file-upload:before{content:"\f574"}.fa-file-user:before{content:"\f65c"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-files-medical:before{content:"\f7fd"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-film-alt:before{content:"\f3a0"}.fa-film-canister:before{content:"\f8b7"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-fire-smoke:before{content:"\f74b"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\f907"}.fa-fireplace:before{content:"\f79a"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fish-cooked:before{content:"\f7fe"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-alt:before{content:"\f74c"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flame:before{content:"\f6df"}.fa-flashlight:before{content:"\f8b8"}.fa-flask:before{content:"\f0c3"}.fa-flask-poison:before{content:"\f6e0"}.fa-flask-potion:before{content:"\f6e1"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flower:before{content:"\f7ff"}.fa-flower-daffodil:before{content:"\f800"}.fa-flower-tulip:before{content:"\f801"}.fa-flushed:before{content:"\f579"}.fa-flute:before{content:"\f8b9"}.fa-flux-capacitor:before{content:"\f8ba"}.fa-fly:before{content:"\f417"}.fa-fog:before{content:"\f74e"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-folder-times:before{content:"\f65f"}.fa-folder-tree:before{content:"\f802"}.fa-folders:before{content:"\f660"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-font-case:before{content:"\f866"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-football-helmet:before{content:"\f44f"}.fa-forklift:before{content:"\f47a"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-fragile:before{content:"\f4bb"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-french-fries:before{content:"\f803"}.fa-frog:before{content:"\f52e"}.fa-frosty-head:before{content:"\f79b"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-function:before{content:"\f661"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-galaxy:before{content:"\f908"}.fa-game-board:before{content:"\f867"}.fa-game-board-alt:before{content:"\f868"}.fa-game-console-handheld:before{content:"\f8bb"}.fa-gamepad:before{content:"\f11b"}.fa-gamepad-alt:before{content:"\f8bc"}.fa-garage:before{content:"\f909"}.fa-garage-car:before{content:"\f90a"}.fa-garage-open:before{content:"\f90b"}.fa-gas-pump:before{content:"\f52f"}.fa-gas-pump-slash:before{content:"\f5f4"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gift-card:before{content:"\f663"}.fa-gifts:before{content:"\f79c"}.fa-gingerbread-man:before{content:"\f79d"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass:before{content:"\f804"}.fa-glass-champagne:before{content:"\f79e"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-citrus:before{content:"\f869"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glass-whiskey-rocks:before{content:"\f7a1"}.fa-glasses:before{content:"\f530"}.fa-glasses-alt:before{content:"\f5f5"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-globe-snow:before{content:"\f7a3"}.fa-globe-stand:before{content:"\f5f6"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-golf-club:before{content:"\f451"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gramophone:before{content:"\f8bd"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-guitar-electric:before{content:"\f8be"}.fa-guitars:before{content:"\f8bf"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-h1:before{content:"\f313"}.fa-h2:before{content:"\f314"}.fa-h3:before{content:"\f315"}.fa-h4:before{content:"\f86a"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hammer-war:before{content:"\f6e4"}.fa-hamsa:before{content:"\f665"}.fa-hand-heart:before{content:"\f4bc"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-box:before{content:"\f47b"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-magic:before{content:"\f6e5"}.fa-hand-holding-seedling:before{content:"\f4bf"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-receiving:before{content:"\f47c"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-heart:before{content:"\f4c3"}.fa-hands-helping:before{content:"\f4c4"}.fa-hands-usd:before{content:"\f4c5"}.fa-handshake:before{content:"\f2b5"}.fa-handshake-alt:before{content:"\f4c6"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-chef:before{content:"\f86b"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-santa:before{content:"\f7a7"}.fa-hat-winter:before{content:"\f7a8"}.fa-hat-witch:before{content:"\f6e7"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-head-side:before{content:"\f6e9"}.fa-head-side-brain:before{content:"\f808"}.fa-head-side-headphones:before{content:"\f8c2"}.fa-head-side-medical:before{content:"\f809"}.fa-head-vr:before{content:"\f6ea"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heart-circle:before{content:"\f4c7"}.fa-heart-rate:before{content:"\f5f8"}.fa-heart-square:before{content:"\f4c8"}.fa-heartbeat:before{content:"\f21e"}.fa-heat:before{content:"\f90c"}.fa-helicopter:before{content:"\f533"}.fa-helmet-battle:before{content:"\f6eb"}.fa-hexagon:before{content:"\f312"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-mask:before{content:"\f6ee"}.fa-hockey-puck:before{content:"\f453"}.fa-hockey-sticks:before{content:"\f454"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-home-alt:before{content:"\f80a"}.fa-home-heart:before{content:"\f4c9"}.fa-home-lg:before{content:"\f80b"}.fa-home-lg-alt:before{content:"\f80c"}.fa-hood-cloak:before{content:"\f6ef"}.fa-hooli:before{content:"\f427"}.fa-horizontal-rule:before{content:"\f86c"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-horse-saddle:before{content:"\f8c3"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hospital-user:before{content:"\f80d"}.fa-hospitals:before{content:"\f80e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house:before{content:"\f90d"}.fa-house-damage:before{content:"\f6f1"}.fa-house-day:before{content:"\f90e"}.fa-house-flood:before{content:"\f74f"}.fa-house-leave:before{content:"\f90f"}.fa-house-night:before{content:"\f910"}.fa-house-return:before{content:"\f911"}.fa-house-signal:before{content:"\f912"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-humidity:before{content:"\f750"}.fa-hurricane:before{content:"\f751"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-ice-skate:before{content:"\f7ac"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-icons-alt:before{content:"\f86e"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\f913"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-image-polaroid:before{content:"\f8c4"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-inbox-in:before{content:"\f310"}.fa-inbox-out:before{content:"\f311"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-industry-alt:before{content:"\f3b3"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-info-square:before{content:"\f30f"}.fa-inhaler:before{content:"\f5f9"}.fa-instagram:before{content:"\f16d"}.fa-integral:before{content:"\f667"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-intersection:before{content:"\f668"}.fa-inventory:before{content:"\f480"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-island-tropical:before{content:"\f811"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-jack-o-lantern:before{content:"\f30e"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-joystick:before{content:"\f8c5"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-jug:before{content:"\f8c6"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-kazoo:before{content:"\f8c7"}.fa-kerning:before{content:"\f86f"}.fa-key:before{content:"\f084"}.fa-key-skeleton:before{content:"\f6f3"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-keynote:before{content:"\f66c"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kidneys:before{content:"\f5fb"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kite:before{content:"\f6f4"}.fa-kiwi-bird:before{content:"\f535"}.fa-knife-kitchen:before{content:"\f6f5"}.fa-korvue:before{content:"\f42f"}.fa-lambda:before{content:"\f66e"}.fa-lamp:before{content:"\f4ca"}.fa-lamp-desk:before{content:"\f914"}.fa-lamp-floor:before{content:"\f915"}.fa-landmark:before{content:"\f66f"}.fa-landmark-alt:before{content:"\f752"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lasso:before{content:"\f8c8"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-layer-minus:before{content:"\f5fe"}.fa-layer-plus:before{content:"\f5ff"}.fa-leaf:before{content:"\f06c"}.fa-leaf-heart:before{content:"\f4cb"}.fa-leaf-maple:before{content:"\f6f6"}.fa-leaf-oak:before{content:"\f6f7"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down:before{content:"\f149"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up:before{content:"\f148"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-light-ceiling:before{content:"\f916"}.fa-light-switch:before{content:"\f917"}.fa-light-switch-off:before{content:"\f918"}.fa-light-switch-on:before{content:"\f919"}.fa-lightbulb:before{content:"\f0eb"}.fa-lightbulb-dollar:before{content:"\f670"}.fa-lightbulb-exclamation:before{content:"\f671"}.fa-lightbulb-on:before{content:"\f672"}.fa-lightbulb-slash:before{content:"\f673"}.fa-lights-holiday:before{content:"\f7b2"}.fa-line:before{content:"\f3c0"}.fa-line-columns:before{content:"\f870"}.fa-line-height:before{content:"\f871"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lips:before{content:"\f600"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-music:before{content:"\f8c9"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location:before{content:"\f601"}.fa-location-arrow:before{content:"\f124"}.fa-location-circle:before{content:"\f602"}.fa-location-slash:before{content:"\f603"}.fa-lock:before{content:"\f023"}.fa-lock-alt:before{content:"\f30d"}.fa-lock-open:before{content:"\f3c1"}.fa-lock-open-alt:before{content:"\f3c2"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-long-arrow-up:before{content:"\f176"}.fa-loveseat:before{content:"\f4cc"}.fa-low-vision:before{content:"\f2a8"}.fa-luchador:before{content:"\f455"}.fa-luggage-cart:before{content:"\f59d"}.fa-lungs:before{content:"\f604"}.fa-lyft:before{content:"\f3c3"}.fa-mace:before{content:"\f6f8"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailbox:before{content:"\f813"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-mandolin:before{content:"\f6f9"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-marker-alt-slash:before{content:"\f605"}.fa-map-marker-check:before{content:"\f606"}.fa-map-marker-edit:before{content:"\f607"}.fa-map-marker-exclamation:before{content:"\f608"}.fa-map-marker-minus:before{content:"\f609"}.fa-map-marker-plus:before{content:"\f60a"}.fa-map-marker-question:before{content:"\f60b"}.fa-map-marker-slash:before{content:"\f60c"}.fa-map-marker-smile:before{content:"\f60d"}.fa-map-marker-times:before{content:"\f60e"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-meat:before{content:"\f814"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaphone:before{content:"\f675"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\f91a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microphone-stand:before{content:"\f8cb"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-microwave:before{content:"\f91b"}.fa-mind-share:before{content:"\f677"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-hexagon:before{content:"\f307"}.fa-minus-octagon:before{content:"\f308"}.fa-minus-square:before{content:"\f146"}.fa-mistletoe:before{content:"\f7b4"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-mobile-android:before{content:"\f3ce"}.fa-mobile-android-alt:before{content:"\f3cf"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-money-check-edit:before{content:"\f872"}.fa-money-check-edit-alt:before{content:"\f873"}.fa-monitor-heart-rate:before{content:"\f611"}.fa-monkey:before{content:"\f6fb"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-moon-cloud:before{content:"\f754"}.fa-moon-stars:before{content:"\f755"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mountains:before{content:"\f6fd"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-alt:before{content:"\f8cd"}.fa-mouse-pointer:before{content:"\f245"}.fa-mp3-player:before{content:"\f8ce"}.fa-mug:before{content:"\f874"}.fa-mug-hot:before{content:"\f7b6"}.fa-mug-marshmallows:before{content:"\f7b7"}.fa-mug-tea:before{content:"\f875"}.fa-music:before{content:"\f001"}.fa-music-alt:before{content:"\f8cf"}.fa-music-alt-slash:before{content:"\f8d0"}.fa-music-slash:before{content:"\f8d1"}.fa-napster:before{content:"\f3d2"}.fa-narwhal:before{content:"\f6fe"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-octagon:before{content:"\f306"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-oil-temp:before{content:"\f614"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-omega:before{content:"\f67a"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-ornament:before{content:"\f7b8"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-outlet:before{content:"\f91c"}.fa-oven:before{content:"\f91d"}.fa-overline:before{content:"\f876"}.fa-page-break:before{content:"\f877"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-brush-alt:before{content:"\f5a9"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-pallet-alt:before{content:"\f483"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-paragraph-rtl:before{content:"\f878"}.fa-parking:before{content:"\f540"}.fa-parking-circle:before{content:"\f615"}.fa-parking-circle-slash:before{content:"\f616"}.fa-parking-slash:before{content:"\f617"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paw-alt:before{content:"\f701"}.fa-paw-claws:before{content:"\f702"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pegasus:before{content:"\f703"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil:before{content:"\f040"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-paintbrush:before{content:"\f618"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-pennant:before{content:"\f456"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-person-carry:before{content:"\f4cf"}.fa-person-dolly:before{content:"\f4d0"}.fa-person-dolly-empty:before{content:"\f4d1"}.fa-person-sign:before{content:"\f757"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-laptop:before{content:"\f87a"}.fa-phone-office:before{content:"\f67d"}.fa-phone-plus:before{content:"\f4d2"}.fa-phone-rotary:before{content:"\f8d3"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pi:before{content:"\f67e"}.fa-piano:before{content:"\f8d4"}.fa-piano-keyboard:before{content:"\f8d5"}.fa-pie:before{content:"\f705"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\f91e"}.fa-pig:before{content:"\f706"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza:before{content:"\f817"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-alt:before{content:"\f3de"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-planet-moon:before{content:"\f91f"}.fa-planet-ringed:before{content:"\f920"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-hexagon:before{content:"\f300"}.fa-plus-octagon:before{content:"\f301"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-podium:before{content:"\f680"}.fa-podium-star:before{content:"\f758"}.fa-police-box:before{content:"\f921"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poll-people:before{content:"\f759"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-popcorn:before{content:"\f819"}.fa-portal-enter:before{content:"\f922"}.fa-portal-exit:before{content:"\f923"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-presentation:before{content:"\f685"}.fa-print:before{content:"\f02f"}.fa-print-search:before{content:"\f81a"}.fa-print-slash:before{content:"\f686"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-projector:before{content:"\f8d6"}.fa-pumpkin:before{content:"\f707"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-question-square:before{content:"\f2fd"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-rabbit:before{content:"\f708"}.fa-rabbit-fast:before{content:"\f709"}.fa-racquet:before{content:"\f45a"}.fa-radar:before{content:"\f924"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-radio:before{content:"\f8d7"}.fa-radio-alt:before{content:"\f8d8"}.fa-rainbow:before{content:"\f75b"}.fa-raindrops:before{content:"\f75c"}.fa-ram:before{content:"\f70a"}.fa-ramp-loading:before{content:"\f4d4"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-raygun:before{content:"\f925"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-rectangle-landscape:before{content:"\f2fa"}.fa-rectangle-portrait:before{content:"\f2fb"}.fa-rectangle-wide:before{content:"\f2fc"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-refrigerator:before{content:"\f926"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-repeat:before{content:"\f363"}.fa-repeat-1:before{content:"\f365"}.fa-repeat-1-alt:before{content:"\f366"}.fa-repeat-alt:before{content:"\f364"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-retweet-alt:before{content:"\f361"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-rings-wedding:before{content:"\f81b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocket-launch:before{content:"\f927"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-route-highway:before{content:"\f61a"}.fa-route-interstate:before{content:"\f61b"}.fa-router:before{content:"\f8da"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-triangle:before{content:"\f61c"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-rv:before{content:"\f7be"}.fa-sack:before{content:"\f81c"}.fa-sack-dollar:before{content:"\f81d"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salad:before{content:"\f81e"}.fa-salesforce:before{content:"\f83b"}.fa-sandwich:before{content:"\f81f"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-sausage:before{content:"\f820"}.fa-save:before{content:"\f0c7"}.fa-sax-hot:before{content:"\f8db"}.fa-saxophone:before{content:"\f8dc"}.fa-scalpel:before{content:"\f61d"}.fa-scalpel-path:before{content:"\f61e"}.fa-scanner:before{content:"\f488"}.fa-scanner-image:before{content:"\f8f3"}.fa-scanner-keyboard:before{content:"\f489"}.fa-scanner-touchscreen:before{content:"\f48a"}.fa-scarecrow:before{content:"\f70d"}.fa-scarf:before{content:"\f7c1"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-scroll-old:before{content:"\f70f"}.fa-scrubber:before{content:"\f2f8"}.fa-scythe:before{content:"\f710"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-send-back:before{content:"\f87e"}.fa-send-backward:before{content:"\f87f"}.fa-sensor:before{content:"\f928"}.fa-sensor-alert:before{content:"\f929"}.fa-sensor-fire:before{content:"\f92a"}.fa-sensor-on:before{content:"\f92b"}.fa-sensor-smoke:before{content:"\f92c"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-all:before{content:"\f367"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-sheep:before{content:"\f711"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield:before{content:"\f132"}.fa-shield-alt:before{content:"\f3ed"}.fa-shield-check:before{content:"\f2f7"}.fa-shield-cross:before{content:"\f712"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shipping-timed:before{content:"\f48c"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shish-kebab:before{content:"\f821"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shovel:before{content:"\f713"}.fa-shovel-snow:before{content:"\f7c3"}.fa-shower:before{content:"\f2cc"}.fa-shredder:before{content:"\f68a"}.fa-shuttle-van:before{content:"\f5b6"}.fa-shuttlecock:before{content:"\f45b"}.fa-sickle:before{content:"\f822"}.fa-sigma:before{content:"\f68b"}.fa-sign:before{content:"\f4d9"}.fa-sign-in:before{content:"\f090"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out:before{content:"\f08b"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signal-1:before{content:"\f68c"}.fa-signal-2:before{content:"\f68d"}.fa-signal-3:before{content:"\f68e"}.fa-signal-4:before{content:"\f68f"}.fa-signal-alt:before{content:"\f690"}.fa-signal-alt-1:before{content:"\f691"}.fa-signal-alt-2:before{content:"\f692"}.fa-signal-alt-3:before{content:"\f693"}.fa-signal-alt-slash:before{content:"\f694"}.fa-signal-slash:before{content:"\f695"}.fa-signal-stream:before{content:"\f8dd"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-siren:before{content:"\f92d"}.fa-siren-on:before{content:"\f92e"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-skeleton:before{content:"\f620"}.fa-sketch:before{content:"\f7c6"}.fa-ski-jump:before{content:"\f7c7"}.fa-ski-lift:before{content:"\f7c8"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-cow:before{content:"\f8de"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sledding:before{content:"\f7cb"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-sliders-h-square:before{content:"\f3f0"}.fa-sliders-v:before{content:"\f3f1"}.fa-sliders-v-square:before{content:"\f3f2"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-plus:before{content:"\f5b9"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoke:before{content:"\f760"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snake:before{content:"\f716"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snooze:before{content:"\f880"}.fa-snow-blowing:before{content:"\f761"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowflakes:before{content:"\f7cf"}.fa-snowman:before{content:"\f7d0"}.fa-snowmobile:before{content:"\f7d1"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-solar-system:before{content:"\f92f"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-alt:before{content:"\f883"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-circle:before{content:"\f930"}.fa-sort-circle-down:before{content:"\f931"}.fa-sort-circle-up:before{content:"\f932"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-shapes-down:before{content:"\f888"}.fa-sort-shapes-down-alt:before{content:"\f889"}.fa-sort-shapes-up:before{content:"\f88a"}.fa-sort-shapes-up-alt:before{content:"\f88b"}.fa-sort-size-down:before{content:"\f88c"}.fa-sort-size-down-alt:before{content:"\f88d"}.fa-sort-size-up:before{content:"\f88e"}.fa-sort-size-up-alt:before{content:"\f88f"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-soup:before{content:"\f823"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-space-station-moon:before{content:"\f933"}.fa-space-station-moon-alt:before{content:"\f934"}.fa-spade:before{content:"\f2f4"}.fa-sparkles:before{content:"\f890"}.fa-speakap:before{content:"\f3f3"}.fa-speaker:before{content:"\f8df"}.fa-speaker-deck:before{content:"\f83c"}.fa-speakers:before{content:"\f8e0"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spider-black-widow:before{content:"\f718"}.fa-spider-web:before{content:"\f719"}.fa-spinner:before{content:"\f110"}.fa-spinner-third:before{content:"\f3f4"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-sprinkler:before{content:"\f935"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root:before{content:"\f697"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-squirrel:before{content:"\f71a"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-staff:before{content:"\f71b"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-christmas:before{content:"\f7d4"}.fa-star-exclamation:before{content:"\f2f3"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-star-shooting:before{content:"\f936"}.fa-starfighter:before{content:"\f937"}.fa-starfighter-alt:before{content:"\f938"}.fa-stars:before{content:"\f762"}.fa-starship:before{content:"\f939"}.fa-starship-freighter:before{content:"\f93a"}.fa-staylinked:before{content:"\f3f5"}.fa-steak:before{content:"\f824"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-steering-wheel:before{content:"\f622"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stocking:before{content:"\f7d5"}.fa-stomach:before{content:"\f623"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-stretcher:before{content:"\f825"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-sun-cloud:before{content:"\f763"}.fa-sun-dust:before{content:"\f764"}.fa-sun-haze:before{content:"\f765"}.fa-sunglasses:before{content:"\f892"}.fa-sunrise:before{content:"\f766"}.fa-sunset:before{content:"\f767"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-sword:before{content:"\f71c"}.fa-sword-laser:before{content:"\f93b"}.fa-sword-laser-alt:before{content:"\f93c"}.fa-swords:before{content:"\f71d"}.fa-swords-laser:before{content:"\f93d"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablet-android:before{content:"\f3fb"}.fa-tablet-android-alt:before{content:"\f3fc"}.fa-tablet-rugged:before{content:"\f48f"}.fa-tablets:before{content:"\f490"}.fa-tachometer:before{content:"\f0e4"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tachometer-alt-average:before{content:"\f624"}.fa-tachometer-alt-fast:before{content:"\f625"}.fa-tachometer-alt-fastest:before{content:"\f626"}.fa-tachometer-alt-slow:before{content:"\f627"}.fa-tachometer-alt-slowest:before{content:"\f628"}.fa-tachometer-average:before{content:"\f629"}.fa-tachometer-fast:before{content:"\f62a"}.fa-tachometer-fastest:before{content:"\f62b"}.fa-tachometer-slow:before{content:"\f62c"}.fa-tachometer-slowest:before{content:"\f62d"}.fa-taco:before{content:"\f826"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tally:before{content:"\f69c"}.fa-tanakh:before{content:"\f827"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-tasks-alt:before{content:"\f828"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-telescope:before{content:"\f93e"}.fa-temperature-down:before{content:"\f93f"}.fa-temperature-frigid:before{content:"\f768"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-hot:before{content:"\f76a"}.fa-temperature-low:before{content:"\f76b"}.fa-temperature-up:before{content:"\f940"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-tennis-ball:before{content:"\f45e"}.fa-terminal:before{content:"\f120"}.fa-text:before{content:"\f893"}.fa-text-height:before{content:"\f034"}.fa-text-size:before{content:"\f894"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-theta:before{content:"\f69e"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-thunderstorm:before{content:"\f76c"}.fa-thunderstorm-moon:before{content:"\f76d"}.fa-thunderstorm-sun:before{content:"\f76e"}.fa-ticket:before{content:"\f145"}.fa-ticket-alt:before{content:"\f3ff"}.fa-tilde:before{content:"\f69f"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-times-hexagon:before{content:"\f2ee"}.fa-times-octagon:before{content:"\f2f0"}.fa-times-square:before{content:"\f2d3"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tire:before{content:"\f631"}.fa-tire-flat:before{content:"\f632"}.fa-tire-pressure-warning:before{content:"\f633"}.fa-tire-rugged:before{content:"\f634"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-alt:before{content:"\f71f"}.fa-tombstone:before{content:"\f720"}.fa-tombstone-alt:before{content:"\f721"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-toothbrush:before{content:"\f635"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tornado:before{content:"\f76f"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-cone:before{content:"\f636"}.fa-traffic-light:before{content:"\f637"}.fa-traffic-light-go:before{content:"\f638"}.fa-traffic-light-slow:before{content:"\f639"}.fa-traffic-light-stop:before{content:"\f63a"}.fa-trailer:before{content:"\f941"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-transporter:before{content:"\f942"}.fa-transporter-1:before{content:"\f943"}.fa-transporter-2:before{content:"\f944"}.fa-transporter-3:before{content:"\f945"}.fa-transporter-empty:before{content:"\f946"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-trash-undo:before{content:"\f895"}.fa-trash-undo-alt:before{content:"\f896"}.fa-treasure-chest:before{content:"\f723"}.fa-tree:before{content:"\f1bb"}.fa-tree-alt:before{content:"\f400"}.fa-tree-christmas:before{content:"\f7db"}.fa-tree-decorated:before{content:"\f7dc"}.fa-tree-large:before{content:"\f7dd"}.fa-tree-palm:before{content:"\f82b"}.fa-trees:before{content:"\f724"}.fa-trello:before{content:"\f181"}.fa-triangle:before{content:"\f2ec"}.fa-triangle-music:before{content:"\f8e2"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-trophy-alt:before{content:"\f2eb"}.fa-truck:before{content:"\f0d1"}.fa-truck-container:before{content:"\f4dc"}.fa-truck-couch:before{content:"\f4dd"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-truck-plow:before{content:"\f7de"}.fa-truck-ramp:before{content:"\f4e0"}.fa-trumpet:before{content:"\f8e3"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-turkey:before{content:"\f725"}.fa-turntable:before{content:"\f8e4"}.fa-turtle:before{content:"\f726"}.fa-tv:before{content:"\f26c"}.fa-tv-alt:before{content:"\f8e5"}.fa-tv-music:before{content:"\f8e6"}.fa-tv-retro:before{content:"\f401"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typewriter:before{content:"\f8e7"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-ufo:before{content:"\f947"}.fa-ufo-beam:before{content:"\f948"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-unicorn:before{content:"\f727"}.fa-union:before{content:"\f6a2"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\f949"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-usb-drive:before{content:"\f8e9"}.fa-usd-circle:before{content:"\f2e8"}.fa-usd-square:before{content:"\f2e9"}.fa-user:before{content:"\f007"}.fa-user-alien:before{content:"\f94a"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-chart:before{content:"\f6a3"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-cowboy:before{content:"\f8ea"}.fa-user-crown:before{content:"\f6a4"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-hard-hat:before{content:"\f82c"}.fa-user-headset:before{content:"\f82d"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-md-chat:before{content:"\f82e"}.fa-user-minus:before{content:"\f503"}.fa-user-music:before{content:"\f8eb"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-robot:before{content:"\f94b"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-user-visor:before{content:"\f94c"}.fa-users:before{content:"\f0c0"}.fa-users-class:before{content:"\f63d"}.fa-users-cog:before{content:"\f509"}.fa-users-crown:before{content:"\f6a5"}.fa-users-medical:before{content:"\f830"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-fork:before{content:"\f2e3"}.fa-utensil-knife:before{content:"\f2e4"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-utensils-alt:before{content:"\f2e6"}.fa-vaadin:before{content:"\f408"}.fa-vacuum:before{content:"\f94d"}.fa-vacuum-robot:before{content:"\f94e"}.fa-value-absolute:before{content:"\f6a6"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-vhs:before{content:"\f8ec"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-plus:before{content:"\f4e1"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-violin:before{content:"\f8ed"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volcano:before{content:"\f770"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume:before{content:"\f6a8"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-slash:before{content:"\f2e2"}.fa-volume-up:before{content:"\f028"}.fa-vote-nay:before{content:"\f771"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-wagon-covered:before{content:"\f8ee"}.fa-walker:before{content:"\f831"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-wand:before{content:"\f72a"}.fa-wand-magic:before{content:"\f72b"}.fa-warehouse:before{content:"\f494"}.fa-warehouse-alt:before{content:"\f495"}.fa-washer:before{content:"\f898"}.fa-watch:before{content:"\f2e1"}.fa-watch-calculator:before{content:"\f8f0"}.fa-watch-fitness:before{content:"\f63e"}.fa-water:before{content:"\f773"}.fa-water-lower:before{content:"\f774"}.fa-water-rise:before{content:"\f775"}.fa-wave-sine:before{content:"\f899"}.fa-wave-square:before{content:"\f83e"}.fa-wave-triangle:before{content:"\f89a"}.fa-waveform:before{content:"\f8f1"}.fa-waveform-path:before{content:"\f8f2"}.fa-waze:before{content:"\f83f"}.fa-webcam:before{content:"\f832"}.fa-webcam-slash:before{content:"\f833"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whale:before{content:"\f72c"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheat:before{content:"\f72d"}.fa-wheelchair:before{content:"\f193"}.fa-whistle:before{content:"\f460"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wifi-1:before{content:"\f6aa"}.fa-wifi-2:before{content:"\f6ab"}.fa-wifi-slash:before{content:"\f6ac"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-wind-turbine:before{content:"\f89b"}.fa-wind-warning:before{content:"\f776"}.fa-window:before{content:"\f40e"}.fa-window-alt:before{content:"\f40f"}.fa-window-close:before{content:"\f410"}.fa-window-frame:before{content:"\f94f"}.fa-window-frame-open:before{content:"\f950"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-windsock:before{content:"\f777"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wreath:before{content:"\f7e2"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:normal;font-display:auto;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"}@font-face{font-family:"Font Awesome 5 Duotone";font-style:normal;font-weight:900;font-display:auto;src:url(../webfonts/fa-duotone-900.eot);src:url(../webfonts/fa-duotone-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-duotone-900.woff2) format("woff2"),url(../webfonts/fa-duotone-900.woff) format("woff"),url(../webfonts/fa-duotone-900.ttf) format("truetype"),url(../webfonts/fa-duotone-900.svg#fontawesome) format("svg")}.fad{position:relative;font-family:"Font Awesome 5 Duotone";font-weight:900}.fad:before{position:absolute;color:var(--fa-primary-color,inherit);opacity:1;opacity:var(--fa-primary-opacity,1)}.fad:after{color:var(--fa-secondary-color,inherit)}.fa-swap-opacity .fad:before,.fad.fa-swap-opacity:before,.fad:after{opacity:.4;opacity:var(--fa-secondary-opacity,.4)}.fa-swap-opacity .fad:after,.fad.fa-swap-opacity:after{opacity:1;opacity:var(--fa-primary-opacity,1)}.fad.fa-inverse{color:#fff}.fad.fa-stack-1x,.fad.fa-stack-2x{position:absolute}.fad.fa-fw:before,.fad.fa-stack-1x:before,.fad.fa-stack-2x:before{left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.fad.fa-abacus:after{content:"\10f640"}.fad.fa-acorn:after{content:"\10f6ae"}.fad.fa-ad:after{content:"\10f641"}.fad.fa-address-book:after{content:"\10f2b9"}.fad.fa-address-card:after{content:"\10f2bb"}.fad.fa-adjust:after{content:"\10f042"}.fad.fa-air-conditioner:after{content:"\10f8f4"}.fad.fa-air-freshener:after{content:"\10f5d0"}.fad.fa-alarm-clock:after{content:"\10f34e"}.fad.fa-alarm-exclamation:after{content:"\10f843"}.fad.fa-alarm-plus:after{content:"\10f844"}.fad.fa-alarm-snooze:after{content:"\10f845"}.fad.fa-album:after{content:"\10f89f"}.fad.fa-album-collection:after{content:"\10f8a0"}.fad.fa-alicorn:after{content:"\10f6b0"}.fad.fa-alien:after{content:"\10f8f5"}.fad.fa-alien-monster:after{content:"\10f8f6"}.fad.fa-align-center:after{content:"\10f037"}.fad.fa-align-justify:after{content:"\10f039"}.fad.fa-align-left:after{content:"\10f036"}.fad.fa-align-right:after{content:"\10f038"}.fad.fa-align-slash:after{content:"\10f846"}.fad.fa-allergies:after{content:"\10f461"}.fad.fa-ambulance:after{content:"\10f0f9"}.fad.fa-american-sign-language-interpreting:after{content:"\10f2a3"}.fad.fa-amp-guitar:after{content:"\10f8a1"}.fad.fa-analytics:after{content:"\10f643"}.fad.fa-anchor:after{content:"\10f13d"}.fad.fa-angel:after{content:"\10f779"}.fad.fa-angle-double-down:after{content:"\10f103"}.fad.fa-angle-double-left:after{content:"\10f100"}.fad.fa-angle-double-right:after{content:"\10f101"}.fad.fa-angle-double-up:after{content:"\10f102"}.fad.fa-angle-down:after{content:"\10f107"}.fad.fa-angle-left:after{content:"\10f104"}.fad.fa-angle-right:after{content:"\10f105"}.fad.fa-angle-up:after{content:"\10f106"}.fad.fa-angry:after{content:"\10f556"}.fad.fa-ankh:after{content:"\10f644"}.fad.fa-apple-alt:after{content:"\10f5d1"}.fad.fa-apple-crate:after{content:"\10f6b1"}.fad.fa-archive:after{content:"\10f187"}.fad.fa-archway:after{content:"\10f557"}.fad.fa-arrow-alt-circle-down:after{content:"\10f358"}.fad.fa-arrow-alt-circle-left:after{content:"\10f359"}.fad.fa-arrow-alt-circle-right:after{content:"\10f35a"}.fad.fa-arrow-alt-circle-up:after{content:"\10f35b"}.fad.fa-arrow-alt-down:after{content:"\10f354"}.fad.fa-arrow-alt-from-bottom:after{content:"\10f346"}.fad.fa-arrow-alt-from-left:after{content:"\10f347"}.fad.fa-arrow-alt-from-right:after{content:"\10f348"}.fad.fa-arrow-alt-from-top:after{content:"\10f349"}.fad.fa-arrow-alt-left:after{content:"\10f355"}.fad.fa-arrow-alt-right:after{content:"\10f356"}.fad.fa-arrow-alt-square-down:after{content:"\10f350"}.fad.fa-arrow-alt-square-left:after{content:"\10f351"}.fad.fa-arrow-alt-square-right:after{content:"\10f352"}.fad.fa-arrow-alt-square-up:after{content:"\10f353"}.fad.fa-arrow-alt-to-bottom:after{content:"\10f34a"}.fad.fa-arrow-alt-to-left:after{content:"\10f34b"}.fad.fa-arrow-alt-to-right:after{content:"\10f34c"}.fad.fa-arrow-alt-to-top:after{content:"\10f34d"}.fad.fa-arrow-alt-up:after{content:"\10f357"}.fad.fa-arrow-circle-down:after{content:"\10f0ab"}.fad.fa-arrow-circle-left:after{content:"\10f0a8"}.fad.fa-arrow-circle-right:after{content:"\10f0a9"}.fad.fa-arrow-circle-up:after{content:"\10f0aa"}.fad.fa-arrow-down:after{content:"\10f063"}.fad.fa-arrow-from-bottom:after{content:"\10f342"}.fad.fa-arrow-from-left:after{content:"\10f343"}.fad.fa-arrow-from-right:after{content:"\10f344"}.fad.fa-arrow-from-top:after{content:"\10f345"}.fad.fa-arrow-left:after{content:"\10f060"}.fad.fa-arrow-right:after{content:"\10f061"}.fad.fa-arrow-square-down:after{content:"\10f339"}.fad.fa-arrow-square-left:after{content:"\10f33a"}.fad.fa-arrow-square-right:after{content:"\10f33b"}.fad.fa-arrow-square-up:after{content:"\10f33c"}.fad.fa-arrow-to-bottom:after{content:"\10f33d"}.fad.fa-arrow-to-left:after{content:"\10f33e"}.fad.fa-arrow-to-right:after{content:"\10f340"}.fad.fa-arrow-to-top:after{content:"\10f341"}.fad.fa-arrow-up:after{content:"\10f062"}.fad.fa-arrows:after{content:"\10f047"}.fad.fa-arrows-alt:after{content:"\10f0b2"}.fad.fa-arrows-alt-h:after{content:"\10f337"}.fad.fa-arrows-alt-v:after{content:"\10f338"}.fad.fa-arrows-h:after{content:"\10f07e"}.fad.fa-arrows-v:after{content:"\10f07d"}.fad.fa-assistive-listening-systems:after{content:"\10f2a2"}.fad.fa-asterisk:after{content:"\10f069"}.fad.fa-at:after{content:"\10f1fa"}.fad.fa-atlas:after{content:"\10f558"}.fad.fa-atom:after{content:"\10f5d2"}.fad.fa-atom-alt:after{content:"\10f5d3"}.fad.fa-audio-description:after{content:"\10f29e"}.fad.fa-award:after{content:"\10f559"}.fad.fa-axe:after{content:"\10f6b2"}.fad.fa-axe-battle:after{content:"\10f6b3"}.fad.fa-baby:after{content:"\10f77c"}.fad.fa-baby-carriage:after{content:"\10f77d"}.fad.fa-backpack:after{content:"\10f5d4"}.fad.fa-backspace:after{content:"\10f55a"}.fad.fa-backward:after{content:"\10f04a"}.fad.fa-bacon:after{content:"\10f7e5"}.fad.fa-badge:after{content:"\10f335"}.fad.fa-badge-check:after{content:"\10f336"}.fad.fa-badge-dollar:after{content:"\10f645"}.fad.fa-badge-percent:after{content:"\10f646"}.fad.fa-badge-sheriff:after{content:"\10f8a2"}.fad.fa-badger-honey:after{content:"\10f6b4"}.fad.fa-bags-shopping:after{content:"\10f847"}.fad.fa-bahai:after{content:"\10f666"}.fad.fa-balance-scale:after{content:"\10f24e"}.fad.fa-balance-scale-left:after{content:"\10f515"}.fad.fa-balance-scale-right:after{content:"\10f516"}.fad.fa-ball-pile:after{content:"\10f77e"}.fad.fa-ballot:after{content:"\10f732"}.fad.fa-ballot-check:after{content:"\10f733"}.fad.fa-ban:after{content:"\10f05e"}.fad.fa-band-aid:after{content:"\10f462"}.fad.fa-banjo:after{content:"\10f8a3"}.fad.fa-barcode:after{content:"\10f02a"}.fad.fa-barcode-alt:after{content:"\10f463"}.fad.fa-barcode-read:after{content:"\10f464"}.fad.fa-barcode-scan:after{content:"\10f465"}.fad.fa-bars:after{content:"\10f0c9"}.fad.fa-baseball:after{content:"\10f432"}.fad.fa-baseball-ball:after{content:"\10f433"}.fad.fa-basketball-ball:after{content:"\10f434"}.fad.fa-basketball-hoop:after{content:"\10f435"}.fad.fa-bat:after{content:"\10f6b5"}.fad.fa-bath:after{content:"\10f2cd"}.fad.fa-battery-bolt:after{content:"\10f376"}.fad.fa-battery-empty:after{content:"\10f244"}.fad.fa-battery-full:after{content:"\10f240"}.fad.fa-battery-half:after{content:"\10f242"}.fad.fa-battery-quarter:after{content:"\10f243"}.fad.fa-battery-slash:after{content:"\10f377"}.fad.fa-battery-three-quarters:after{content:"\10f241"}.fad.fa-bed:after{content:"\10f236"}.fad.fa-bed-alt:after{content:"\10f8f7"}.fad.fa-bed-bunk:after{content:"\10f8f8"}.fad.fa-bed-empty:after{content:"\10f8f9"}.fad.fa-beer:after{content:"\10f0fc"}.fad.fa-bell:after{content:"\10f0f3"}.fad.fa-bell-exclamation:after{content:"\10f848"}.fad.fa-bell-on:after{content:"\10f8fa"}.fad.fa-bell-plus:after{content:"\10f849"}.fad.fa-bell-school:after{content:"\10f5d5"}.fad.fa-bell-school-slash:after{content:"\10f5d6"}.fad.fa-bell-slash:after{content:"\10f1f6"}.fad.fa-bells:after{content:"\10f77f"}.fad.fa-betamax:after{content:"\10f8a4"}.fad.fa-bezier-curve:after{content:"\10f55b"}.fad.fa-bible:after{content:"\10f647"}.fad.fa-bicycle:after{content:"\10f206"}.fad.fa-biking:after{content:"\10f84a"}.fad.fa-biking-mountain:after{content:"\10f84b"}.fad.fa-binoculars:after{content:"\10f1e5"}.fad.fa-biohazard:after{content:"\10f780"}.fad.fa-birthday-cake:after{content:"\10f1fd"}.fad.fa-blanket:after{content:"\10f498"}.fad.fa-blender:after{content:"\10f517"}.fad.fa-blender-phone:after{content:"\10f6b6"}.fad.fa-blind:after{content:"\10f29d"}.fad.fa-blinds:after{content:"\10f8fb"}.fad.fa-blinds-open:after{content:"\10f8fc"}.fad.fa-blinds-raised:after{content:"\10f8fd"}.fad.fa-blog:after{content:"\10f781"}.fad.fa-bold:after{content:"\10f032"}.fad.fa-bolt:after{content:"\10f0e7"}.fad.fa-bomb:after{content:"\10f1e2"}.fad.fa-bone:after{content:"\10f5d7"}.fad.fa-bone-break:after{content:"\10f5d8"}.fad.fa-bong:after{content:"\10f55c"}.fad.fa-book:after{content:"\10f02d"}.fad.fa-book-alt:after{content:"\10f5d9"}.fad.fa-book-dead:after{content:"\10f6b7"}.fad.fa-book-heart:after{content:"\10f499"}.fad.fa-book-medical:after{content:"\10f7e6"}.fad.fa-book-open:after{content:"\10f518"}.fad.fa-book-reader:after{content:"\10f5da"}.fad.fa-book-spells:after{content:"\10f6b8"}.fad.fa-book-user:after{content:"\10f7e7"}.fad.fa-bookmark:after{content:"\10f02e"}.fad.fa-books:after{content:"\10f5db"}.fad.fa-books-medical:after{content:"\10f7e8"}.fad.fa-boombox:after{content:"\10f8a5"}.fad.fa-boot:after{content:"\10f782"}.fad.fa-booth-curtain:after{content:"\10f734"}.fad.fa-border-all:after{content:"\10f84c"}.fad.fa-border-bottom:after{content:"\10f84d"}.fad.fa-border-center-h:after{content:"\10f89c"}.fad.fa-border-center-v:after{content:"\10f89d"}.fad.fa-border-inner:after{content:"\10f84e"}.fad.fa-border-left:after{content:"\10f84f"}.fad.fa-border-none:after{content:"\10f850"}.fad.fa-border-outer:after{content:"\10f851"}.fad.fa-border-right:after{content:"\10f852"}.fad.fa-border-style:after{content:"\10f853"}.fad.fa-border-style-alt:after{content:"\10f854"}.fad.fa-border-top:after{content:"\10f855"}.fad.fa-bow-arrow:after{content:"\10f6b9"}.fad.fa-bowling-ball:after{content:"\10f436"}.fad.fa-bowling-pins:after{content:"\10f437"}.fad.fa-box:after{content:"\10f466"}.fad.fa-box-alt:after{content:"\10f49a"}.fad.fa-box-ballot:after{content:"\10f735"}.fad.fa-box-check:after{content:"\10f467"}.fad.fa-box-fragile:after{content:"\10f49b"}.fad.fa-box-full:after{content:"\10f49c"}.fad.fa-box-heart:after{content:"\10f49d"}.fad.fa-box-open:after{content:"\10f49e"}.fad.fa-box-up:after{content:"\10f49f"}.fad.fa-box-usd:after{content:"\10f4a0"}.fad.fa-boxes:after{content:"\10f468"}.fad.fa-boxes-alt:after{content:"\10f4a1"}.fad.fa-boxing-glove:after{content:"\10f438"}.fad.fa-brackets:after{content:"\10f7e9"}.fad.fa-brackets-curly:after{content:"\10f7ea"}.fad.fa-braille:after{content:"\10f2a1"}.fad.fa-brain:after{content:"\10f5dc"}.fad.fa-bread-loaf:after{content:"\10f7eb"}.fad.fa-bread-slice:after{content:"\10f7ec"}.fad.fa-briefcase:after{content:"\10f0b1"}.fad.fa-briefcase-medical:after{content:"\10f469"}.fad.fa-bring-forward:after{content:"\10f856"}.fad.fa-bring-front:after{content:"\10f857"}.fad.fa-broadcast-tower:after{content:"\10f519"}.fad.fa-broom:after{content:"\10f51a"}.fad.fa-browser:after{content:"\10f37e"}.fad.fa-brush:after{content:"\10f55d"}.fad.fa-bug:after{content:"\10f188"}.fad.fa-building:after{content:"\10f1ad"}.fad.fa-bullhorn:after{content:"\10f0a1"}.fad.fa-bullseye:after{content:"\10f140"}.fad.fa-bullseye-arrow:after{content:"\10f648"}.fad.fa-bullseye-pointer:after{content:"\10f649"}.fad.fa-burger-soda:after{content:"\10f858"}.fad.fa-burn:after{content:"\10f46a"}.fad.fa-burrito:after{content:"\10f7ed"}.fad.fa-bus:after{content:"\10f207"}.fad.fa-bus-alt:after{content:"\10f55e"}.fad.fa-bus-school:after{content:"\10f5dd"}.fad.fa-business-time:after{content:"\10f64a"}.fad.fa-cabinet-filing:after{content:"\10f64b"}.fad.fa-cactus:after{content:"\10f8a7"}.fad.fa-calculator:after{content:"\10f1ec"}.fad.fa-calculator-alt:after{content:"\10f64c"}.fad.fa-calendar:after{content:"\10f133"}.fad.fa-calendar-alt:after{content:"\10f073"}.fad.fa-calendar-check:after{content:"\10f274"}.fad.fa-calendar-day:after{content:"\10f783"}.fad.fa-calendar-edit:after{content:"\10f333"}.fad.fa-calendar-exclamation:after{content:"\10f334"}.fad.fa-calendar-minus:after{content:"\10f272"}.fad.fa-calendar-plus:after{content:"\10f271"}.fad.fa-calendar-star:after{content:"\10f736"}.fad.fa-calendar-times:after{content:"\10f273"}.fad.fa-calendar-week:after{content:"\10f784"}.fad.fa-camcorder:after{content:"\10f8a8"}.fad.fa-camera:after{content:"\10f030"}.fad.fa-camera-alt:after{content:"\10f332"}.fad.fa-camera-home:after{content:"\10f8fe"}.fad.fa-camera-movie:after{content:"\10f8a9"}.fad.fa-camera-polaroid:after{content:"\10f8aa"}.fad.fa-camera-retro:after{content:"\10f083"}.fad.fa-campfire:after{content:"\10f6ba"}.fad.fa-campground:after{content:"\10f6bb"}.fad.fa-candle-holder:after{content:"\10f6bc"}.fad.fa-candy-cane:after{content:"\10f786"}.fad.fa-candy-corn:after{content:"\10f6bd"}.fad.fa-cannabis:after{content:"\10f55f"}.fad.fa-capsules:after{content:"\10f46b"}.fad.fa-car:after{content:"\10f1b9"}.fad.fa-car-alt:after{content:"\10f5de"}.fad.fa-car-battery:after{content:"\10f5df"}.fad.fa-car-building:after{content:"\10f859"}.fad.fa-car-bump:after{content:"\10f5e0"}.fad.fa-car-bus:after{content:"\10f85a"}.fad.fa-car-crash:after{content:"\10f5e1"}.fad.fa-car-garage:after{content:"\10f5e2"}.fad.fa-car-mechanic:after{content:"\10f5e3"}.fad.fa-car-side:after{content:"\10f5e4"}.fad.fa-car-tilt:after{content:"\10f5e5"}.fad.fa-car-wash:after{content:"\10f5e6"}.fad.fa-caravan:after{content:"\10f8ff"}.fad.fa-caravan-alt:after{content:"\10f900"}.fad.fa-caret-circle-down:after{content:"\10f32d"}.fad.fa-caret-circle-left:after{content:"\10f32e"}.fad.fa-caret-circle-right:after{content:"\10f330"}.fad.fa-caret-circle-up:after{content:"\10f331"}.fad.fa-caret-down:after{content:"\10f0d7"}.fad.fa-caret-left:after{content:"\10f0d9"}.fad.fa-caret-right:after{content:"\10f0da"}.fad.fa-caret-square-down:after{content:"\10f150"}.fad.fa-caret-square-left:after{content:"\10f191"}.fad.fa-caret-square-right:after{content:"\10f152"}.fad.fa-caret-square-up:after{content:"\10f151"}.fad.fa-caret-up:after{content:"\10f0d8"}.fad.fa-carrot:after{content:"\10f787"}.fad.fa-cars:after{content:"\10f85b"}.fad.fa-cart-arrow-down:after{content:"\10f218"}.fad.fa-cart-plus:after{content:"\10f217"}.fad.fa-cash-register:after{content:"\10f788"}.fad.fa-cassette-tape:after{content:"\10f8ab"}.fad.fa-cat:after{content:"\10f6be"}.fad.fa-cat-space:after{content:"\10f901"}.fad.fa-cauldron:after{content:"\10f6bf"}.fad.fa-cctv:after{content:"\10f8ac"}.fad.fa-certificate:after{content:"\10f0a3"}.fad.fa-chair:after{content:"\10f6c0"}.fad.fa-chair-office:after{content:"\10f6c1"}.fad.fa-chalkboard:after{content:"\10f51b"}.fad.fa-chalkboard-teacher:after{content:"\10f51c"}.fad.fa-charging-station:after{content:"\10f5e7"}.fad.fa-chart-area:after{content:"\10f1fe"}.fad.fa-chart-bar:after{content:"\10f080"}.fad.fa-chart-line:after{content:"\10f201"}.fad.fa-chart-line-down:after{content:"\10f64d"}.fad.fa-chart-network:after{content:"\10f78a"}.fad.fa-chart-pie:after{content:"\10f200"}.fad.fa-chart-pie-alt:after{content:"\10f64e"}.fad.fa-chart-scatter:after{content:"\10f7ee"}.fad.fa-check:after{content:"\10f00c"}.fad.fa-check-circle:after{content:"\10f058"}.fad.fa-check-double:after{content:"\10f560"}.fad.fa-check-square:after{content:"\10f14a"}.fad.fa-cheese:after{content:"\10f7ef"}.fad.fa-cheese-swiss:after{content:"\10f7f0"}.fad.fa-cheeseburger:after{content:"\10f7f1"}.fad.fa-chess:after{content:"\10f439"}.fad.fa-chess-bishop:after{content:"\10f43a"}.fad.fa-chess-bishop-alt:after{content:"\10f43b"}.fad.fa-chess-board:after{content:"\10f43c"}.fad.fa-chess-clock:after{content:"\10f43d"}.fad.fa-chess-clock-alt:after{content:"\10f43e"}.fad.fa-chess-king:after{content:"\10f43f"}.fad.fa-chess-king-alt:after{content:"\10f440"}.fad.fa-chess-knight:after{content:"\10f441"}.fad.fa-chess-knight-alt:after{content:"\10f442"}.fad.fa-chess-pawn:after{content:"\10f443"}.fad.fa-chess-pawn-alt:after{content:"\10f444"}.fad.fa-chess-queen:after{content:"\10f445"}.fad.fa-chess-queen-alt:after{content:"\10f446"}.fad.fa-chess-rook:after{content:"\10f447"}.fad.fa-chess-rook-alt:after{content:"\10f448"}.fad.fa-chevron-circle-down:after{content:"\10f13a"}.fad.fa-chevron-circle-left:after{content:"\10f137"}.fad.fa-chevron-circle-right:after{content:"\10f138"}.fad.fa-chevron-circle-up:after{content:"\10f139"}.fad.fa-chevron-double-down:after{content:"\10f322"}.fad.fa-chevron-double-left:after{content:"\10f323"}.fad.fa-chevron-double-right:after{content:"\10f324"}.fad.fa-chevron-double-up:after{content:"\10f325"}.fad.fa-chevron-down:after{content:"\10f078"}.fad.fa-chevron-left:after{content:"\10f053"}.fad.fa-chevron-right:after{content:"\10f054"}.fad.fa-chevron-square-down:after{content:"\10f329"}.fad.fa-chevron-square-left:after{content:"\10f32a"}.fad.fa-chevron-square-right:after{content:"\10f32b"}.fad.fa-chevron-square-up:after{content:"\10f32c"}.fad.fa-chevron-up:after{content:"\10f077"}.fad.fa-child:after{content:"\10f1ae"}.fad.fa-chimney:after{content:"\10f78b"}.fad.fa-church:after{content:"\10f51d"}.fad.fa-circle:after{content:"\10f111"}.fad.fa-circle-notch:after{content:"\10f1ce"}.fad.fa-city:after{content:"\10f64f"}.fad.fa-clarinet:after{content:"\10f8ad"}.fad.fa-claw-marks:after{content:"\10f6c2"}.fad.fa-clinic-medical:after{content:"\10f7f2"}.fad.fa-clipboard:after{content:"\10f328"}.fad.fa-clipboard-check:after{content:"\10f46c"}.fad.fa-clipboard-list:after{content:"\10f46d"}.fad.fa-clipboard-list-check:after{content:"\10f737"}.fad.fa-clipboard-prescription:after{content:"\10f5e8"}.fad.fa-clipboard-user:after{content:"\10f7f3"}.fad.fa-clock:after{content:"\10f017"}.fad.fa-clone:after{content:"\10f24d"}.fad.fa-closed-captioning:after{content:"\10f20a"}.fad.fa-cloud:after{content:"\10f0c2"}.fad.fa-cloud-download:after{content:"\10f0ed"}.fad.fa-cloud-download-alt:after{content:"\10f381"}.fad.fa-cloud-drizzle:after{content:"\10f738"}.fad.fa-cloud-hail:after{content:"\10f739"}.fad.fa-cloud-hail-mixed:after{content:"\10f73a"}.fad.fa-cloud-meatball:after{content:"\10f73b"}.fad.fa-cloud-moon:after{content:"\10f6c3"}.fad.fa-cloud-moon-rain:after{content:"\10f73c"}.fad.fa-cloud-music:after{content:"\10f8ae"}.fad.fa-cloud-rain:after{content:"\10f73d"}.fad.fa-cloud-rainbow:after{content:"\10f73e"}.fad.fa-cloud-showers:after{content:"\10f73f"}.fad.fa-cloud-showers-heavy:after{content:"\10f740"}.fad.fa-cloud-sleet:after{content:"\10f741"}.fad.fa-cloud-snow:after{content:"\10f742"}.fad.fa-cloud-sun:after{content:"\10f6c4"}.fad.fa-cloud-sun-rain:after{content:"\10f743"}.fad.fa-cloud-upload:after{content:"\10f0ee"}.fad.fa-cloud-upload-alt:after{content:"\10f382"}.fad.fa-clouds:after{content:"\10f744"}.fad.fa-clouds-moon:after{content:"\10f745"}.fad.fa-clouds-sun:after{content:"\10f746"}.fad.fa-club:after{content:"\10f327"}.fad.fa-cocktail:after{content:"\10f561"}.fad.fa-code:after{content:"\10f121"}.fad.fa-code-branch:after{content:"\10f126"}.fad.fa-code-commit:after{content:"\10f386"}.fad.fa-code-merge:after{content:"\10f387"}.fad.fa-coffee:after{content:"\10f0f4"}.fad.fa-coffee-pot:after{content:"\10f902"}.fad.fa-coffee-togo:after{content:"\10f6c5"}.fad.fa-coffin:after{content:"\10f6c6"}.fad.fa-cog:after{content:"\10f013"}.fad.fa-cogs:after{content:"\10f085"}.fad.fa-coin:after{content:"\10f85c"}.fad.fa-coins:after{content:"\10f51e"}.fad.fa-columns:after{content:"\10f0db"}.fad.fa-comet:after{content:"\10f903"}.fad.fa-comment:after{content:"\10f075"}.fad.fa-comment-alt:after{content:"\10f27a"}.fad.fa-comment-alt-check:after{content:"\10f4a2"}.fad.fa-comment-alt-dollar:after{content:"\10f650"}.fad.fa-comment-alt-dots:after{content:"\10f4a3"}.fad.fa-comment-alt-edit:after{content:"\10f4a4"}.fad.fa-comment-alt-exclamation:after{content:"\10f4a5"}.fad.fa-comment-alt-lines:after{content:"\10f4a6"}.fad.fa-comment-alt-medical:after{content:"\10f7f4"}.fad.fa-comment-alt-minus:after{content:"\10f4a7"}.fad.fa-comment-alt-music:after{content:"\10f8af"}.fad.fa-comment-alt-plus:after{content:"\10f4a8"}.fad.fa-comment-alt-slash:after{content:"\10f4a9"}.fad.fa-comment-alt-smile:after{content:"\10f4aa"}.fad.fa-comment-alt-times:after{content:"\10f4ab"}.fad.fa-comment-check:after{content:"\10f4ac"}.fad.fa-comment-dollar:after{content:"\10f651"}.fad.fa-comment-dots:after{content:"\10f4ad"}.fad.fa-comment-edit:after{content:"\10f4ae"}.fad.fa-comment-exclamation:after{content:"\10f4af"}.fad.fa-comment-lines:after{content:"\10f4b0"}.fad.fa-comment-medical:after{content:"\10f7f5"}.fad.fa-comment-minus:after{content:"\10f4b1"}.fad.fa-comment-music:after{content:"\10f8b0"}.fad.fa-comment-plus:after{content:"\10f4b2"}.fad.fa-comment-slash:after{content:"\10f4b3"}.fad.fa-comment-smile:after{content:"\10f4b4"}.fad.fa-comment-times:after{content:"\10f4b5"}.fad.fa-comments:after{content:"\10f086"}.fad.fa-comments-alt:after{content:"\10f4b6"}.fad.fa-comments-alt-dollar:after{content:"\10f652"}.fad.fa-comments-dollar:after{content:"\10f653"}.fad.fa-compact-disc:after{content:"\10f51f"}.fad.fa-compass:after{content:"\10f14e"}.fad.fa-compass-slash:after{content:"\10f5e9"}.fad.fa-compress:after{content:"\10f066"}.fad.fa-compress-alt:after{content:"\10f422"}.fad.fa-compress-arrows-alt:after{content:"\10f78c"}.fad.fa-compress-wide:after{content:"\10f326"}.fad.fa-computer-classic:after{content:"\10f8b1"}.fad.fa-computer-speaker:after{content:"\10f8b2"}.fad.fa-concierge-bell:after{content:"\10f562"}.fad.fa-construction:after{content:"\10f85d"}.fad.fa-container-storage:after{content:"\10f4b7"}.fad.fa-conveyor-belt:after{content:"\10f46e"}.fad.fa-conveyor-belt-alt:after{content:"\10f46f"}.fad.fa-cookie:after{content:"\10f563"}.fad.fa-cookie-bite:after{content:"\10f564"}.fad.fa-copy:after{content:"\10f0c5"}.fad.fa-copyright:after{content:"\10f1f9"}.fad.fa-corn:after{content:"\10f6c7"}.fad.fa-couch:after{content:"\10f4b8"}.fad.fa-cow:after{content:"\10f6c8"}.fad.fa-cowbell:after{content:"\10f8b3"}.fad.fa-cowbell-more:after{content:"\10f8b4"}.fad.fa-credit-card:after{content:"\10f09d"}.fad.fa-credit-card-blank:after{content:"\10f389"}.fad.fa-credit-card-front:after{content:"\10f38a"}.fad.fa-cricket:after{content:"\10f449"}.fad.fa-croissant:after{content:"\10f7f6"}.fad.fa-crop:after{content:"\10f125"}.fad.fa-crop-alt:after{content:"\10f565"}.fad.fa-cross:after{content:"\10f654"}.fad.fa-crosshairs:after{content:"\10f05b"}.fad.fa-crow:after{content:"\10f520"}.fad.fa-crown:after{content:"\10f521"}.fad.fa-crutch:after{content:"\10f7f7"}.fad.fa-crutches:after{content:"\10f7f8"}.fad.fa-cube:after{content:"\10f1b2"}.fad.fa-cubes:after{content:"\10f1b3"}.fad.fa-curling:after{content:"\10f44a"}.fad.fa-cut:after{content:"\10f0c4"}.fad.fa-dagger:after{content:"\10f6cb"}.fad.fa-database:after{content:"\10f1c0"}.fad.fa-deaf:after{content:"\10f2a4"}.fad.fa-debug:after{content:"\10f7f9"}.fad.fa-deer:after{content:"\10f78e"}.fad.fa-deer-rudolph:after{content:"\10f78f"}.fad.fa-democrat:after{content:"\10f747"}.fad.fa-desktop:after{content:"\10f108"}.fad.fa-desktop-alt:after{content:"\10f390"}.fad.fa-dewpoint:after{content:"\10f748"}.fad.fa-dharmachakra:after{content:"\10f655"}.fad.fa-diagnoses:after{content:"\10f470"}.fad.fa-diamond:after{content:"\10f219"}.fad.fa-dice:after{content:"\10f522"}.fad.fa-dice-d10:after{content:"\10f6cd"}.fad.fa-dice-d12:after{content:"\10f6ce"}.fad.fa-dice-d20:after{content:"\10f6cf"}.fad.fa-dice-d4:after{content:"\10f6d0"}.fad.fa-dice-d6:after{content:"\10f6d1"}.fad.fa-dice-d8:after{content:"\10f6d2"}.fad.fa-dice-five:after{content:"\10f523"}.fad.fa-dice-four:after{content:"\10f524"}.fad.fa-dice-one:after{content:"\10f525"}.fad.fa-dice-six:after{content:"\10f526"}.fad.fa-dice-three:after{content:"\10f527"}.fad.fa-dice-two:after{content:"\10f528"}.fad.fa-digging:after{content:"\10f85e"}.fad.fa-digital-tachograph:after{content:"\10f566"}.fad.fa-diploma:after{content:"\10f5ea"}.fad.fa-directions:after{content:"\10f5eb"}.fad.fa-disc-drive:after{content:"\10f8b5"}.fad.fa-disease:after{content:"\10f7fa"}.fad.fa-divide:after{content:"\10f529"}.fad.fa-dizzy:after{content:"\10f567"}.fad.fa-dna:after{content:"\10f471"}.fad.fa-do-not-enter:after{content:"\10f5ec"}.fad.fa-dog:after{content:"\10f6d3"}.fad.fa-dog-leashed:after{content:"\10f6d4"}.fad.fa-dollar-sign:after{content:"\10f155"}.fad.fa-dolly:after{content:"\10f472"}.fad.fa-dolly-empty:after{content:"\10f473"}.fad.fa-dolly-flatbed:after{content:"\10f474"}.fad.fa-dolly-flatbed-alt:after{content:"\10f475"}.fad.fa-dolly-flatbed-empty:after{content:"\10f476"}.fad.fa-donate:after{content:"\10f4b9"}.fad.fa-door-closed:after{content:"\10f52a"}.fad.fa-door-open:after{content:"\10f52b"}.fad.fa-dot-circle:after{content:"\10f192"}.fad.fa-dove:after{content:"\10f4ba"}.fad.fa-download:after{content:"\10f019"}.fad.fa-drafting-compass:after{content:"\10f568"}.fad.fa-dragon:after{content:"\10f6d5"}.fad.fa-draw-circle:after{content:"\10f5ed"}.fad.fa-draw-polygon:after{content:"\10f5ee"}.fad.fa-draw-square:after{content:"\10f5ef"}.fad.fa-dreidel:after{content:"\10f792"}.fad.fa-drone:after{content:"\10f85f"}.fad.fa-drone-alt:after{content:"\10f860"}.fad.fa-drum:after{content:"\10f569"}.fad.fa-drum-steelpan:after{content:"\10f56a"}.fad.fa-drumstick:after{content:"\10f6d6"}.fad.fa-drumstick-bite:after{content:"\10f6d7"}.fad.fa-dryer:after{content:"\10f861"}.fad.fa-dryer-alt:after{content:"\10f862"}.fad.fa-duck:after{content:"\10f6d8"}.fad.fa-dumbbell:after{content:"\10f44b"}.fad.fa-dumpster:after{content:"\10f793"}.fad.fa-dumpster-fire:after{content:"\10f794"}.fad.fa-dungeon:after{content:"\10f6d9"}.fad.fa-ear:after{content:"\10f5f0"}.fad.fa-ear-muffs:after{content:"\10f795"}.fad.fa-eclipse:after{content:"\10f749"}.fad.fa-eclipse-alt:after{content:"\10f74a"}.fad.fa-edit:after{content:"\10f044"}.fad.fa-egg:after{content:"\10f7fb"}.fad.fa-egg-fried:after{content:"\10f7fc"}.fad.fa-eject:after{content:"\10f052"}.fad.fa-elephant:after{content:"\10f6da"}.fad.fa-ellipsis-h:after{content:"\10f141"}.fad.fa-ellipsis-h-alt:after{content:"\10f39b"}.fad.fa-ellipsis-v:after{content:"\10f142"}.fad.fa-ellipsis-v-alt:after{content:"\10f39c"}.fad.fa-empty-set:after{content:"\10f656"}.fad.fa-engine-warning:after{content:"\10f5f2"}.fad.fa-envelope:after{content:"\10f0e0"}.fad.fa-envelope-open:after{content:"\10f2b6"}.fad.fa-envelope-open-dollar:after{content:"\10f657"}.fad.fa-envelope-open-text:after{content:"\10f658"}.fad.fa-envelope-square:after{content:"\10f199"}.fad.fa-equals:after{content:"\10f52c"}.fad.fa-eraser:after{content:"\10f12d"}.fad.fa-ethernet:after{content:"\10f796"}.fad.fa-euro-sign:after{content:"\10f153"}.fad.fa-exchange:after{content:"\10f0ec"}.fad.fa-exchange-alt:after{content:"\10f362"}.fad.fa-exclamation:after{content:"\10f12a"}.fad.fa-exclamation-circle:after{content:"\10f06a"}.fad.fa-exclamation-square:after{content:"\10f321"}.fad.fa-exclamation-triangle:after{content:"\10f071"}.fad.fa-expand:after{content:"\10f065"}.fad.fa-expand-alt:after{content:"\10f424"}.fad.fa-expand-arrows:after{content:"\10f31d"}.fad.fa-expand-arrows-alt:after{content:"\10f31e"}.fad.fa-expand-wide:after{content:"\10f320"}.fad.fa-external-link:after{content:"\10f08e"}.fad.fa-external-link-alt:after{content:"\10f35d"}.fad.fa-external-link-square:after{content:"\10f14c"}.fad.fa-external-link-square-alt:after{content:"\10f360"}.fad.fa-eye:after{content:"\10f06e"}.fad.fa-eye-dropper:after{content:"\10f1fb"}.fad.fa-eye-evil:after{content:"\10f6db"}.fad.fa-eye-slash:after{content:"\10f070"}.fad.fa-fan:after{content:"\10f863"}.fad.fa-fan-table:after{content:"\10f904"}.fad.fa-farm:after{content:"\10f864"}.fad.fa-fast-backward:after{content:"\10f049"}.fad.fa-fast-forward:after{content:"\10f050"}.fad.fa-faucet:after{content:"\10f905"}.fad.fa-faucet-drip:after{content:"\10f906"}.fad.fa-fax:after{content:"\10f1ac"}.fad.fa-feather:after{content:"\10f52d"}.fad.fa-feather-alt:after{content:"\10f56b"}.fad.fa-female:after{content:"\10f182"}.fad.fa-field-hockey:after{content:"\10f44c"}.fad.fa-fighter-jet:after{content:"\10f0fb"}.fad.fa-file:after{content:"\10f15b"}.fad.fa-file-alt:after{content:"\10f15c"}.fad.fa-file-archive:after{content:"\10f1c6"}.fad.fa-file-audio:after{content:"\10f1c7"}.fad.fa-file-certificate:after{content:"\10f5f3"}.fad.fa-file-chart-line:after{content:"\10f659"}.fad.fa-file-chart-pie:after{content:"\10f65a"}.fad.fa-file-check:after{content:"\10f316"}.fad.fa-file-code:after{content:"\10f1c9"}.fad.fa-file-contract:after{content:"\10f56c"}.fad.fa-file-csv:after{content:"\10f6dd"}.fad.fa-file-download:after{content:"\10f56d"}.fad.fa-file-edit:after{content:"\10f31c"}.fad.fa-file-excel:after{content:"\10f1c3"}.fad.fa-file-exclamation:after{content:"\10f31a"}.fad.fa-file-export:after{content:"\10f56e"}.fad.fa-file-image:after{content:"\10f1c5"}.fad.fa-file-import:after{content:"\10f56f"}.fad.fa-file-invoice:after{content:"\10f570"}.fad.fa-file-invoice-dollar:after{content:"\10f571"}.fad.fa-file-medical:after{content:"\10f477"}.fad.fa-file-medical-alt:after{content:"\10f478"}.fad.fa-file-minus:after{content:"\10f318"}.fad.fa-file-music:after{content:"\10f8b6"}.fad.fa-file-pdf:after{content:"\10f1c1"}.fad.fa-file-plus:after{content:"\10f319"}.fad.fa-file-powerpoint:after{content:"\10f1c4"}.fad.fa-file-prescription:after{content:"\10f572"}.fad.fa-file-search:after{content:"\10f865"}.fad.fa-file-signature:after{content:"\10f573"}.fad.fa-file-spreadsheet:after{content:"\10f65b"}.fad.fa-file-times:after{content:"\10f317"}.fad.fa-file-upload:after{content:"\10f574"}.fad.fa-file-user:after{content:"\10f65c"}.fad.fa-file-video:after{content:"\10f1c8"}.fad.fa-file-word:after{content:"\10f1c2"}.fad.fa-files-medical:after{content:"\10f7fd"}.fad.fa-fill:after{content:"\10f575"}.fad.fa-fill-drip:after{content:"\10f576"}.fad.fa-film:after{content:"\10f008"}.fad.fa-film-alt:after{content:"\10f3a0"}.fad.fa-film-canister:after{content:"\10f8b7"}.fad.fa-filter:after{content:"\10f0b0"}.fad.fa-fingerprint:after{content:"\10f577"}.fad.fa-fire:after{content:"\10f06d"}.fad.fa-fire-alt:after{content:"\10f7e4"}.fad.fa-fire-extinguisher:after{content:"\10f134"}.fad.fa-fire-smoke:after{content:"\10f74b"}.fad.fa-fireplace:after{content:"\10f79a"}.fad.fa-first-aid:after{content:"\10f479"}.fad.fa-fish:after{content:"\10f578"}.fad.fa-fish-cooked:after{content:"\10f7fe"}.fad.fa-fist-raised:after{content:"\10f6de"}.fad.fa-flag:after{content:"\10f024"}.fad.fa-flag-alt:after{content:"\10f74c"}.fad.fa-flag-checkered:after{content:"\10f11e"}.fad.fa-flag-usa:after{content:"\10f74d"}.fad.fa-flame:after{content:"\10f6df"}.fad.fa-flashlight:after{content:"\10f8b8"}.fad.fa-flask:after{content:"\10f0c3"}.fad.fa-flask-poison:after{content:"\10f6e0"}.fad.fa-flask-potion:after{content:"\10f6e1"}.fad.fa-flower:after{content:"\10f7ff"}.fad.fa-flower-daffodil:after{content:"\10f800"}.fad.fa-flower-tulip:after{content:"\10f801"}.fad.fa-flushed:after{content:"\10f579"}.fad.fa-flute:after{content:"\10f8b9"}.fad.fa-flux-capacitor:after{content:"\10f8ba"}.fad.fa-fog:after{content:"\10f74e"}.fad.fa-folder:after{content:"\10f07b"}.fad.fa-folder-minus:after{content:"\10f65d"}.fad.fa-folder-open:after{content:"\10f07c"}.fad.fa-folder-plus:after{content:"\10f65e"}.fad.fa-folder-times:after{content:"\10f65f"}.fad.fa-folder-tree:after{content:"\10f802"}.fad.fa-folders:after{content:"\10f660"}.fad.fa-font:after{content:"\10f031"}.fad.fa-font-awesome-logo-full:after{content:"\10f4e6"}.fad.fa-font-case:after{content:"\10f866"}.fad.fa-football-ball:after{content:"\10f44e"}.fad.fa-football-helmet:after{content:"\10f44f"}.fad.fa-forklift:after{content:"\10f47a"}.fad.fa-forward:after{content:"\10f04e"}.fad.fa-fragile:after{content:"\10f4bb"}.fad.fa-french-fries:after{content:"\10f803"}.fad.fa-frog:after{content:"\10f52e"}.fad.fa-frosty-head:after{content:"\10f79b"}.fad.fa-frown:after{content:"\10f119"}.fad.fa-frown-open:after{content:"\10f57a"}.fad.fa-function:after{content:"\10f661"}.fad.fa-funnel-dollar:after{content:"\10f662"}.fad.fa-futbol:after{content:"\10f1e3"}.fad.fa-galaxy:after{content:"\10f908"}.fad.fa-game-board:after{content:"\10f867"}.fad.fa-game-board-alt:after{content:"\10f868"}.fad.fa-game-console-handheld:after{content:"\10f8bb"}.fad.fa-gamepad:after{content:"\10f11b"}.fad.fa-gamepad-alt:after{content:"\10f8bc"}.fad.fa-garage:after{content:"\10f909"}.fad.fa-garage-car:after{content:"\10f90a"}.fad.fa-garage-open:after{content:"\10f90b"}.fad.fa-gas-pump:after{content:"\10f52f"}.fad.fa-gas-pump-slash:after{content:"\10f5f4"}.fad.fa-gavel:after{content:"\10f0e3"}.fad.fa-gem:after{content:"\10f3a5"}.fad.fa-genderless:after{content:"\10f22d"}.fad.fa-ghost:after{content:"\10f6e2"}.fad.fa-gift:after{content:"\10f06b"}.fad.fa-gift-card:after{content:"\10f663"}.fad.fa-gifts:after{content:"\10f79c"}.fad.fa-gingerbread-man:after{content:"\10f79d"}.fad.fa-glass:after{content:"\10f804"}.fad.fa-glass-champagne:after{content:"\10f79e"}.fad.fa-glass-cheers:after{content:"\10f79f"}.fad.fa-glass-citrus:after{content:"\10f869"}.fad.fa-glass-martini:after{content:"\10f000"}.fad.fa-glass-martini-alt:after{content:"\10f57b"}.fad.fa-glass-whiskey:after{content:"\10f7a0"}.fad.fa-glass-whiskey-rocks:after{content:"\10f7a1"}.fad.fa-glasses:after{content:"\10f530"}.fad.fa-glasses-alt:after{content:"\10f5f5"}.fad.fa-globe:after{content:"\10f0ac"}.fad.fa-globe-africa:after{content:"\10f57c"}.fad.fa-globe-americas:after{content:"\10f57d"}.fad.fa-globe-asia:after{content:"\10f57e"}.fad.fa-globe-europe:after{content:"\10f7a2"}.fad.fa-globe-snow:after{content:"\10f7a3"}.fad.fa-globe-stand:after{content:"\10f5f6"}.fad.fa-golf-ball:after{content:"\10f450"}.fad.fa-golf-club:after{content:"\10f451"}.fad.fa-gopuram:after{content:"\10f664"}.fad.fa-graduation-cap:after{content:"\10f19d"}.fad.fa-gramophone:after{content:"\10f8bd"}.fad.fa-greater-than:after{content:"\10f531"}.fad.fa-greater-than-equal:after{content:"\10f532"}.fad.fa-grimace:after{content:"\10f57f"}.fad.fa-grin:after{content:"\10f580"}.fad.fa-grin-alt:after{content:"\10f581"}.fad.fa-grin-beam:after{content:"\10f582"}.fad.fa-grin-beam-sweat:after{content:"\10f583"}.fad.fa-grin-hearts:after{content:"\10f584"}.fad.fa-grin-squint:after{content:"\10f585"}.fad.fa-grin-squint-tears:after{content:"\10f586"}.fad.fa-grin-stars:after{content:"\10f587"}.fad.fa-grin-tears:after{content:"\10f588"}.fad.fa-grin-tongue:after{content:"\10f589"}.fad.fa-grin-tongue-squint:after{content:"\10f58a"}.fad.fa-grin-tongue-wink:after{content:"\10f58b"}.fad.fa-grin-wink:after{content:"\10f58c"}.fad.fa-grip-horizontal:after{content:"\10f58d"}.fad.fa-grip-lines:after{content:"\10f7a4"}.fad.fa-grip-lines-vertical:after{content:"\10f7a5"}.fad.fa-grip-vertical:after{content:"\10f58e"}.fad.fa-guitar:after{content:"\10f7a6"}.fad.fa-guitar-electric:after{content:"\10f8be"}.fad.fa-guitars:after{content:"\10f8bf"}.fad.fa-h-square:after{content:"\10f0fd"}.fad.fa-h1:after{content:"\10f313"}.fad.fa-h2:after{content:"\10f314"}.fad.fa-h3:after{content:"\10f315"}.fad.fa-h4:after{content:"\10f86a"}.fad.fa-hamburger:after{content:"\10f805"}.fad.fa-hammer:after{content:"\10f6e3"}.fad.fa-hammer-war:after{content:"\10f6e4"}.fad.fa-hamsa:after{content:"\10f665"}.fad.fa-hand-heart:after{content:"\10f4bc"}.fad.fa-hand-holding:after{content:"\10f4bd"}.fad.fa-hand-holding-box:after{content:"\10f47b"}.fad.fa-hand-holding-heart:after{content:"\10f4be"}.fad.fa-hand-holding-magic:after{content:"\10f6e5"}.fad.fa-hand-holding-seedling:after{content:"\10f4bf"}.fad.fa-hand-holding-usd:after{content:"\10f4c0"}.fad.fa-hand-holding-water:after{content:"\10f4c1"}.fad.fa-hand-lizard:after{content:"\10f258"}.fad.fa-hand-middle-finger:after{content:"\10f806"}.fad.fa-hand-paper:after{content:"\10f256"}.fad.fa-hand-peace:after{content:"\10f25b"}.fad.fa-hand-point-down:after{content:"\10f0a7"}.fad.fa-hand-point-left:after{content:"\10f0a5"}.fad.fa-hand-point-right:after{content:"\10f0a4"}.fad.fa-hand-point-up:after{content:"\10f0a6"}.fad.fa-hand-pointer:after{content:"\10f25a"}.fad.fa-hand-receiving:after{content:"\10f47c"}.fad.fa-hand-rock:after{content:"\10f255"}.fad.fa-hand-scissors:after{content:"\10f257"}.fad.fa-hand-spock:after{content:"\10f259"}.fad.fa-hands:after{content:"\10f4c2"}.fad.fa-hands-heart:after{content:"\10f4c3"}.fad.fa-hands-helping:after{content:"\10f4c4"}.fad.fa-hands-usd:after{content:"\10f4c5"}.fad.fa-handshake:after{content:"\10f2b5"}.fad.fa-handshake-alt:after{content:"\10f4c6"}.fad.fa-hanukiah:after{content:"\10f6e6"}.fad.fa-hard-hat:after{content:"\10f807"}.fad.fa-hashtag:after{content:"\10f292"}.fad.fa-hat-chef:after{content:"\10f86b"}.fad.fa-hat-cowboy:after{content:"\10f8c0"}.fad.fa-hat-cowboy-side:after{content:"\10f8c1"}.fad.fa-hat-santa:after{content:"\10f7a7"}.fad.fa-hat-winter:after{content:"\10f7a8"}.fad.fa-hat-witch:after{content:"\10f6e7"}.fad.fa-hat-wizard:after{content:"\10f6e8"}.fad.fa-hdd:after{content:"\10f0a0"}.fad.fa-head-side:after{content:"\10f6e9"}.fad.fa-head-side-brain:after{content:"\10f808"}.fad.fa-head-side-headphones:after{content:"\10f8c2"}.fad.fa-head-side-medical:after{content:"\10f809"}.fad.fa-head-vr:after{content:"\10f6ea"}.fad.fa-heading:after{content:"\10f1dc"}.fad.fa-headphones:after{content:"\10f025"}.fad.fa-headphones-alt:after{content:"\10f58f"}.fad.fa-headset:after{content:"\10f590"}.fad.fa-heart:after{content:"\10f004"}.fad.fa-heart-broken:after{content:"\10f7a9"}.fad.fa-heart-circle:after{content:"\10f4c7"}.fad.fa-heart-rate:after{content:"\10f5f8"}.fad.fa-heart-square:after{content:"\10f4c8"}.fad.fa-heartbeat:after{content:"\10f21e"}.fad.fa-heat:after{content:"\10f90c"}.fad.fa-helicopter:after{content:"\10f533"}.fad.fa-helmet-battle:after{content:"\10f6eb"}.fad.fa-hexagon:after{content:"\10f312"}.fad.fa-highlighter:after{content:"\10f591"}.fad.fa-hiking:after{content:"\10f6ec"}.fad.fa-hippo:after{content:"\10f6ed"}.fad.fa-history:after{content:"\10f1da"}.fad.fa-hockey-mask:after{content:"\10f6ee"}.fad.fa-hockey-puck:after{content:"\10f453"}.fad.fa-hockey-sticks:after{content:"\10f454"}.fad.fa-holly-berry:after{content:"\10f7aa"}.fad.fa-home:after{content:"\10f015"}.fad.fa-home-alt:after{content:"\10f80a"}.fad.fa-home-heart:after{content:"\10f4c9"}.fad.fa-home-lg:after{content:"\10f80b"}.fad.fa-home-lg-alt:after{content:"\10f80c"}.fad.fa-hood-cloak:after{content:"\10f6ef"}.fad.fa-horizontal-rule:after{content:"\10f86c"}.fad.fa-horse:after{content:"\10f6f0"}.fad.fa-horse-head:after{content:"\10f7ab"}.fad.fa-horse-saddle:after{content:"\10f8c3"}.fad.fa-hospital:after{content:"\10f0f8"}.fad.fa-hospital-alt:after{content:"\10f47d"}.fad.fa-hospital-symbol:after{content:"\10f47e"}.fad.fa-hospital-user:after{content:"\10f80d"}.fad.fa-hospitals:after{content:"\10f80e"}.fad.fa-hot-tub:after{content:"\10f593"}.fad.fa-hotdog:after{content:"\10f80f"}.fad.fa-hotel:after{content:"\10f594"}.fad.fa-hourglass:after{content:"\10f254"}.fad.fa-hourglass-end:after{content:"\10f253"}.fad.fa-hourglass-half:after{content:"\10f252"}.fad.fa-hourglass-start:after{content:"\10f251"}.fad.fa-house:after{content:"\10f90d"}.fad.fa-house-damage:after{content:"\10f6f1"}.fad.fa-house-day:after{content:"\10f90e"}.fad.fa-house-flood:after{content:"\10f74f"}.fad.fa-house-leave:after{content:"\10f90f"}.fad.fa-house-night:after{content:"\10f910"}.fad.fa-house-return:after{content:"\10f911"}.fad.fa-house-signal:after{content:"\10f912"}.fad.fa-hryvnia:after{content:"\10f6f2"}.fad.fa-humidity:after{content:"\10f750"}.fad.fa-hurricane:after{content:"\10f751"}.fad.fa-i-cursor:after{content:"\10f246"}.fad.fa-ice-cream:after{content:"\10f810"}.fad.fa-ice-skate:after{content:"\10f7ac"}.fad.fa-icicles:after{content:"\10f7ad"}.fad.fa-icons:after{content:"\10f86d"}.fad.fa-icons-alt:after{content:"\10f86e"}.fad.fa-id-badge:after{content:"\10f2c1"}.fad.fa-id-card:after{content:"\10f2c2"}.fad.fa-id-card-alt:after{content:"\10f47f"}.fad.fa-igloo:after{content:"\10f7ae"}.fad.fa-image:after{content:"\10f03e"}.fad.fa-image-polaroid:after{content:"\10f8c4"}.fad.fa-images:after{content:"\10f302"}.fad.fa-inbox:after{content:"\10f01c"}.fad.fa-inbox-in:after{content:"\10f310"}.fad.fa-inbox-out:after{content:"\10f311"}.fad.fa-indent:after{content:"\10f03c"}.fad.fa-industry:after{content:"\10f275"}.fad.fa-industry-alt:after{content:"\10f3b3"}.fad.fa-infinity:after{content:"\10f534"}.fad.fa-info:after{content:"\10f129"}.fad.fa-info-circle:after{content:"\10f05a"}.fad.fa-info-square:after{content:"\10f30f"}.fad.fa-inhaler:after{content:"\10f5f9"}.fad.fa-integral:after{content:"\10f667"}.fad.fa-intersection:after{content:"\10f668"}.fad.fa-inventory:after{content:"\10f480"}.fad.fa-island-tropical:after{content:"\10f811"}.fad.fa-italic:after{content:"\10f033"}.fad.fa-jack-o-lantern:after{content:"\10f30e"}.fad.fa-jedi:after{content:"\10f669"}.fad.fa-joint:after{content:"\10f595"}.fad.fa-journal-whills:after{content:"\10f66a"}.fad.fa-joystick:after{content:"\10f8c5"}.fad.fa-jug:after{content:"\10f8c6"}.fad.fa-kaaba:after{content:"\10f66b"}.fad.fa-kazoo:after{content:"\10f8c7"}.fad.fa-kerning:after{content:"\10f86f"}.fad.fa-key:after{content:"\10f084"}.fad.fa-key-skeleton:after{content:"\10f6f3"}.fad.fa-keyboard:after{content:"\10f11c"}.fad.fa-keynote:after{content:"\10f66c"}.fad.fa-khanda:after{content:"\10f66d"}.fad.fa-kidneys:after{content:"\10f5fb"}.fad.fa-kiss:after{content:"\10f596"}.fad.fa-kiss-beam:after{content:"\10f597"}.fad.fa-kiss-wink-heart:after{content:"\10f598"}.fad.fa-kite:after{content:"\10f6f4"}.fad.fa-kiwi-bird:after{content:"\10f535"}.fad.fa-knife-kitchen:after{content:"\10f6f5"}.fad.fa-lambda:after{content:"\10f66e"}.fad.fa-lamp:after{content:"\10f4ca"}.fad.fa-lamp-desk:after{content:"\10f914"}.fad.fa-lamp-floor:after{content:"\10f915"}.fad.fa-landmark:after{content:"\10f66f"}.fad.fa-landmark-alt:after{content:"\10f752"}.fad.fa-language:after{content:"\10f1ab"}.fad.fa-laptop:after{content:"\10f109"}.fad.fa-laptop-code:after{content:"\10f5fc"}.fad.fa-laptop-medical:after{content:"\10f812"}.fad.fa-lasso:after{content:"\10f8c8"}.fad.fa-laugh:after{content:"\10f599"}.fad.fa-laugh-beam:after{content:"\10f59a"}.fad.fa-laugh-squint:after{content:"\10f59b"}.fad.fa-laugh-wink:after{content:"\10f59c"}.fad.fa-layer-group:after{content:"\10f5fd"}.fad.fa-layer-minus:after{content:"\10f5fe"}.fad.fa-layer-plus:after{content:"\10f5ff"}.fad.fa-leaf:after{content:"\10f06c"}.fad.fa-leaf-heart:after{content:"\10f4cb"}.fad.fa-leaf-maple:after{content:"\10f6f6"}.fad.fa-leaf-oak:after{content:"\10f6f7"}.fad.fa-lemon:after{content:"\10f094"}.fad.fa-less-than:after{content:"\10f536"}.fad.fa-less-than-equal:after{content:"\10f537"}.fad.fa-level-down:after{content:"\10f149"}.fad.fa-level-down-alt:after{content:"\10f3be"}.fad.fa-level-up:after{content:"\10f148"}.fad.fa-level-up-alt:after{content:"\10f3bf"}.fad.fa-life-ring:after{content:"\10f1cd"}.fad.fa-light-ceiling:after{content:"\10f916"}.fad.fa-light-switch:after{content:"\10f917"}.fad.fa-light-switch-off:after{content:"\10f918"}.fad.fa-light-switch-on:after{content:"\10f919"}.fad.fa-lightbulb:after{content:"\10f0eb"}.fad.fa-lightbulb-dollar:after{content:"\10f670"}.fad.fa-lightbulb-exclamation:after{content:"\10f671"}.fad.fa-lightbulb-on:after{content:"\10f672"}.fad.fa-lightbulb-slash:after{content:"\10f673"}.fad.fa-lights-holiday:after{content:"\10f7b2"}.fad.fa-line-columns:after{content:"\10f870"}.fad.fa-line-height:after{content:"\10f871"}.fad.fa-link:after{content:"\10f0c1"}.fad.fa-lips:after{content:"\10f600"}.fad.fa-lira-sign:after{content:"\10f195"}.fad.fa-list:after{content:"\10f03a"}.fad.fa-list-alt:after{content:"\10f022"}.fad.fa-list-music:after{content:"\10f8c9"}.fad.fa-list-ol:after{content:"\10f0cb"}.fad.fa-list-ul:after{content:"\10f0ca"}.fad.fa-location:after{content:"\10f601"}.fad.fa-location-arrow:after{content:"\10f124"}.fad.fa-location-circle:after{content:"\10f602"}.fad.fa-location-slash:after{content:"\10f603"}.fad.fa-lock:after{content:"\10f023"}.fad.fa-lock-alt:after{content:"\10f30d"}.fad.fa-lock-open:after{content:"\10f3c1"}.fad.fa-lock-open-alt:after{content:"\10f3c2"}.fad.fa-long-arrow-alt-down:after{content:"\10f309"}.fad.fa-long-arrow-alt-left:after{content:"\10f30a"}.fad.fa-long-arrow-alt-right:after{content:"\10f30b"}.fad.fa-long-arrow-alt-up:after{content:"\10f30c"}.fad.fa-long-arrow-down:after{content:"\10f175"}.fad.fa-long-arrow-left:after{content:"\10f177"}.fad.fa-long-arrow-right:after{content:"\10f178"}.fad.fa-long-arrow-up:after{content:"\10f176"}.fad.fa-loveseat:after{content:"\10f4cc"}.fad.fa-low-vision:after{content:"\10f2a8"}.fad.fa-luchador:after{content:"\10f455"}.fad.fa-luggage-cart:after{content:"\10f59d"}.fad.fa-lungs:after{content:"\10f604"}.fad.fa-mace:after{content:"\10f6f8"}.fad.fa-magic:after{content:"\10f0d0"}.fad.fa-magnet:after{content:"\10f076"}.fad.fa-mail-bulk:after{content:"\10f674"}.fad.fa-mailbox:after{content:"\10f813"}.fad.fa-male:after{content:"\10f183"}.fad.fa-mandolin:after{content:"\10f6f9"}.fad.fa-map:after{content:"\10f279"}.fad.fa-map-marked:after{content:"\10f59f"}.fad.fa-map-marked-alt:after{content:"\10f5a0"}.fad.fa-map-marker:after{content:"\10f041"}.fad.fa-map-marker-alt:after{content:"\10f3c5"}.fad.fa-map-marker-alt-slash:after{content:"\10f605"}.fad.fa-map-marker-check:after{content:"\10f606"}.fad.fa-map-marker-edit:after{content:"\10f607"}.fad.fa-map-marker-exclamation:after{content:"\10f608"}.fad.fa-map-marker-minus:after{content:"\10f609"}.fad.fa-map-marker-plus:after{content:"\10f60a"}.fad.fa-map-marker-question:after{content:"\10f60b"}.fad.fa-map-marker-slash:after{content:"\10f60c"}.fad.fa-map-marker-smile:after{content:"\10f60d"}.fad.fa-map-marker-times:after{content:"\10f60e"}.fad.fa-map-pin:after{content:"\10f276"}.fad.fa-map-signs:after{content:"\10f277"}.fad.fa-marker:after{content:"\10f5a1"}.fad.fa-mars:after{content:"\10f222"}.fad.fa-mars-double:after{content:"\10f227"}.fad.fa-mars-stroke:after{content:"\10f229"}.fad.fa-mars-stroke-h:after{content:"\10f22b"}.fad.fa-mars-stroke-v:after{content:"\10f22a"}.fad.fa-mask:after{content:"\10f6fa"}.fad.fa-meat:after{content:"\10f814"}.fad.fa-medal:after{content:"\10f5a2"}.fad.fa-medkit:after{content:"\10f0fa"}.fad.fa-megaphone:after{content:"\10f675"}.fad.fa-meh:after{content:"\10f11a"}.fad.fa-meh-blank:after{content:"\10f5a4"}.fad.fa-meh-rolling-eyes:after{content:"\10f5a5"}.fad.fa-memory:after{content:"\10f538"}.fad.fa-menorah:after{content:"\10f676"}.fad.fa-mercury:after{content:"\10f223"}.fad.fa-meteor:after{content:"\10f753"}.fad.fa-microchip:after{content:"\10f2db"}.fad.fa-microphone:after{content:"\10f130"}.fad.fa-microphone-alt:after{content:"\10f3c9"}.fad.fa-microphone-alt-slash:after{content:"\10f539"}.fad.fa-microphone-slash:after{content:"\10f131"}.fad.fa-microphone-stand:after{content:"\10f8cb"}.fad.fa-microscope:after{content:"\10f610"}.fad.fa-microwave:after{content:"\10f91b"}.fad.fa-mind-share:after{content:"\10f677"}.fad.fa-minus:after{content:"\10f068"}.fad.fa-minus-circle:after{content:"\10f056"}.fad.fa-minus-hexagon:after{content:"\10f307"}.fad.fa-minus-octagon:after{content:"\10f308"}.fad.fa-minus-square:after{content:"\10f146"}.fad.fa-mistletoe:after{content:"\10f7b4"}.fad.fa-mitten:after{content:"\10f7b5"}.fad.fa-mobile:after{content:"\10f10b"}.fad.fa-mobile-alt:after{content:"\10f3cd"}.fad.fa-mobile-android:after{content:"\10f3ce"}.fad.fa-mobile-android-alt:after{content:"\10f3cf"}.fad.fa-money-bill:after{content:"\10f0d6"}.fad.fa-money-bill-alt:after{content:"\10f3d1"}.fad.fa-money-bill-wave:after{content:"\10f53a"}.fad.fa-money-bill-wave-alt:after{content:"\10f53b"}.fad.fa-money-check:after{content:"\10f53c"}.fad.fa-money-check-alt:after{content:"\10f53d"}.fad.fa-money-check-edit:after{content:"\10f872"}.fad.fa-money-check-edit-alt:after{content:"\10f873"}.fad.fa-monitor-heart-rate:after{content:"\10f611"}.fad.fa-monkey:after{content:"\10f6fb"}.fad.fa-monument:after{content:"\10f5a6"}.fad.fa-moon:after{content:"\10f186"}.fad.fa-moon-cloud:after{content:"\10f754"}.fad.fa-moon-stars:after{content:"\10f755"}.fad.fa-mortar-pestle:after{content:"\10f5a7"}.fad.fa-mosque:after{content:"\10f678"}.fad.fa-motorcycle:after{content:"\10f21c"}.fad.fa-mountain:after{content:"\10f6fc"}.fad.fa-mountains:after{content:"\10f6fd"}.fad.fa-mouse:after{content:"\10f8cc"}.fad.fa-mouse-alt:after{content:"\10f8cd"}.fad.fa-mouse-pointer:after{content:"\10f245"}.fad.fa-mp3-player:after{content:"\10f8ce"}.fad.fa-mug:after{content:"\10f874"}.fad.fa-mug-hot:after{content:"\10f7b6"}.fad.fa-mug-marshmallows:after{content:"\10f7b7"}.fad.fa-mug-tea:after{content:"\10f875"}.fad.fa-music:after{content:"\10f001"}.fad.fa-music-alt:after{content:"\10f8cf"}.fad.fa-music-alt-slash:after{content:"\10f8d0"}.fad.fa-music-slash:after{content:"\10f8d1"}.fad.fa-narwhal:after{content:"\10f6fe"}.fad.fa-network-wired:after{content:"\10f6ff"}.fad.fa-neuter:after{content:"\10f22c"}.fad.fa-newspaper:after{content:"\10f1ea"}.fad.fa-not-equal:after{content:"\10f53e"}.fad.fa-notes-medical:after{content:"\10f481"}.fad.fa-object-group:after{content:"\10f247"}.fad.fa-object-ungroup:after{content:"\10f248"}.fad.fa-octagon:after{content:"\10f306"}.fad.fa-oil-can:after{content:"\10f613"}.fad.fa-oil-temp:after{content:"\10f614"}.fad.fa-om:after{content:"\10f679"}.fad.fa-omega:after{content:"\10f67a"}.fad.fa-ornament:after{content:"\10f7b8"}.fad.fa-otter:after{content:"\10f700"}.fad.fa-outdent:after{content:"\10f03b"}.fad.fa-outlet:after{content:"\10f91c"}.fad.fa-oven:after{content:"\10f91d"}.fad.fa-overline:after{content:"\10f876"}.fad.fa-page-break:after{content:"\10f877"}.fad.fa-pager:after{content:"\10f815"}.fad.fa-paint-brush:after{content:"\10f1fc"}.fad.fa-paint-brush-alt:after{content:"\10f5a9"}.fad.fa-paint-roller:after{content:"\10f5aa"}.fad.fa-palette:after{content:"\10f53f"}.fad.fa-pallet:after{content:"\10f482"}.fad.fa-pallet-alt:after{content:"\10f483"}.fad.fa-paper-plane:after{content:"\10f1d8"}.fad.fa-paperclip:after{content:"\10f0c6"}.fad.fa-parachute-box:after{content:"\10f4cd"}.fad.fa-paragraph:after{content:"\10f1dd"}.fad.fa-paragraph-rtl:after{content:"\10f878"}.fad.fa-parking:after{content:"\10f540"}.fad.fa-parking-circle:after{content:"\10f615"}.fad.fa-parking-circle-slash:after{content:"\10f616"}.fad.fa-parking-slash:after{content:"\10f617"}.fad.fa-passport:after{content:"\10f5ab"}.fad.fa-pastafarianism:after{content:"\10f67b"}.fad.fa-paste:after{content:"\10f0ea"}.fad.fa-pause:after{content:"\10f04c"}.fad.fa-pause-circle:after{content:"\10f28b"}.fad.fa-paw:after{content:"\10f1b0"}.fad.fa-paw-alt:after{content:"\10f701"}.fad.fa-paw-claws:after{content:"\10f702"}.fad.fa-peace:after{content:"\10f67c"}.fad.fa-pegasus:after{content:"\10f703"}.fad.fa-pen:after{content:"\10f304"}.fad.fa-pen-alt:after{content:"\10f305"}.fad.fa-pen-fancy:after{content:"\10f5ac"}.fad.fa-pen-nib:after{content:"\10f5ad"}.fad.fa-pen-square:after{content:"\10f14b"}.fad.fa-pencil:after{content:"\10f040"}.fad.fa-pencil-alt:after{content:"\10f303"}.fad.fa-pencil-paintbrush:after{content:"\10f618"}.fad.fa-pencil-ruler:after{content:"\10f5ae"}.fad.fa-pennant:after{content:"\10f456"}.fad.fa-people-carry:after{content:"\10f4ce"}.fad.fa-pepper-hot:after{content:"\10f816"}.fad.fa-percent:after{content:"\10f295"}.fad.fa-percentage:after{content:"\10f541"}.fad.fa-person-booth:after{content:"\10f756"}.fad.fa-person-carry:after{content:"\10f4cf"}.fad.fa-person-dolly:after{content:"\10f4d0"}.fad.fa-person-dolly-empty:after{content:"\10f4d1"}.fad.fa-person-sign:after{content:"\10f757"}.fad.fa-phone:after{content:"\10f095"}.fad.fa-phone-alt:after{content:"\10f879"}.fad.fa-phone-laptop:after{content:"\10f87a"}.fad.fa-phone-office:after{content:"\10f67d"}.fad.fa-phone-plus:after{content:"\10f4d2"}.fad.fa-phone-rotary:after{content:"\10f8d3"}.fad.fa-phone-slash:after{content:"\10f3dd"}.fad.fa-phone-square:after{content:"\10f098"}.fad.fa-phone-square-alt:after{content:"\10f87b"}.fad.fa-phone-volume:after{content:"\10f2a0"}.fad.fa-photo-video:after{content:"\10f87c"}.fad.fa-pi:after{content:"\10f67e"}.fad.fa-piano:after{content:"\10f8d4"}.fad.fa-piano-keyboard:after{content:"\10f8d5"}.fad.fa-pie:after{content:"\10f705"}.fad.fa-pig:after{content:"\10f706"}.fad.fa-piggy-bank:after{content:"\10f4d3"}.fad.fa-pills:after{content:"\10f484"}.fad.fa-pizza:after{content:"\10f817"}.fad.fa-pizza-slice:after{content:"\10f818"}.fad.fa-place-of-worship:after{content:"\10f67f"}.fad.fa-plane:after{content:"\10f072"}.fad.fa-plane-alt:after{content:"\10f3de"}.fad.fa-plane-arrival:after{content:"\10f5af"}.fad.fa-plane-departure:after{content:"\10f5b0"}.fad.fa-planet-moon:after{content:"\10f91f"}.fad.fa-planet-ringed:after{content:"\10f920"}.fad.fa-play:after{content:"\10f04b"}.fad.fa-play-circle:after{content:"\10f144"}.fad.fa-plug:after{content:"\10f1e6"}.fad.fa-plus:after{content:"\10f067"}.fad.fa-plus-circle:after{content:"\10f055"}.fad.fa-plus-hexagon:after{content:"\10f300"}.fad.fa-plus-octagon:after{content:"\10f301"}.fad.fa-plus-square:after{content:"\10f0fe"}.fad.fa-podcast:after{content:"\10f2ce"}.fad.fa-podium:after{content:"\10f680"}.fad.fa-podium-star:after{content:"\10f758"}.fad.fa-police-box:after{content:"\10f921"}.fad.fa-poll:after{content:"\10f681"}.fad.fa-poll-h:after{content:"\10f682"}.fad.fa-poll-people:after{content:"\10f759"}.fad.fa-poo:after{content:"\10f2fe"}.fad.fa-poo-storm:after{content:"\10f75a"}.fad.fa-poop:after{content:"\10f619"}.fad.fa-popcorn:after{content:"\10f819"}.fad.fa-portal-enter:after{content:"\10f922"}.fad.fa-portal-exit:after{content:"\10f923"}.fad.fa-portrait:after{content:"\10f3e0"}.fad.fa-pound-sign:after{content:"\10f154"}.fad.fa-power-off:after{content:"\10f011"}.fad.fa-pray:after{content:"\10f683"}.fad.fa-praying-hands:after{content:"\10f684"}.fad.fa-prescription:after{content:"\10f5b1"}.fad.fa-prescription-bottle:after{content:"\10f485"}.fad.fa-prescription-bottle-alt:after{content:"\10f486"}.fad.fa-presentation:after{content:"\10f685"}.fad.fa-print:after{content:"\10f02f"}.fad.fa-print-search:after{content:"\10f81a"}.fad.fa-print-slash:after{content:"\10f686"}.fad.fa-procedures:after{content:"\10f487"}.fad.fa-project-diagram:after{content:"\10f542"}.fad.fa-projector:after{content:"\10f8d6"}.fad.fa-pumpkin:after{content:"\10f707"}.fad.fa-puzzle-piece:after{content:"\10f12e"}.fad.fa-qrcode:after{content:"\10f029"}.fad.fa-question:after{content:"\10f128"}.fad.fa-question-circle:after{content:"\10f059"}.fad.fa-question-square:after{content:"\10f2fd"}.fad.fa-quidditch:after{content:"\10f458"}.fad.fa-quote-left:after{content:"\10f10d"}.fad.fa-quote-right:after{content:"\10f10e"}.fad.fa-quran:after{content:"\10f687"}.fad.fa-rabbit:after{content:"\10f708"}.fad.fa-rabbit-fast:after{content:"\10f709"}.fad.fa-racquet:after{content:"\10f45a"}.fad.fa-radar:after{content:"\10f924"}.fad.fa-radiation:after{content:"\10f7b9"}.fad.fa-radiation-alt:after{content:"\10f7ba"}.fad.fa-radio:after{content:"\10f8d7"}.fad.fa-radio-alt:after{content:"\10f8d8"}.fad.fa-rainbow:after{content:"\10f75b"}.fad.fa-raindrops:after{content:"\10f75c"}.fad.fa-ram:after{content:"\10f70a"}.fad.fa-ramp-loading:after{content:"\10f4d4"}.fad.fa-random:after{content:"\10f074"}.fad.fa-raygun:after{content:"\10f925"}.fad.fa-receipt:after{content:"\10f543"}.fad.fa-record-vinyl:after{content:"\10f8d9"}.fad.fa-rectangle-landscape:after{content:"\10f2fa"}.fad.fa-rectangle-portrait:after{content:"\10f2fb"}.fad.fa-rectangle-wide:after{content:"\10f2fc"}.fad.fa-recycle:after{content:"\10f1b8"}.fad.fa-redo:after{content:"\10f01e"}.fad.fa-redo-alt:after{content:"\10f2f9"}.fad.fa-refrigerator:after{content:"\10f926"}.fad.fa-registered:after{content:"\10f25d"}.fad.fa-remove-format:after{content:"\10f87d"}.fad.fa-repeat:after{content:"\10f363"}.fad.fa-repeat-1:after{content:"\10f365"}.fad.fa-repeat-1-alt:after{content:"\10f366"}.fad.fa-repeat-alt:after{content:"\10f364"}.fad.fa-reply:after{content:"\10f3e5"}.fad.fa-reply-all:after{content:"\10f122"}.fad.fa-republican:after{content:"\10f75e"}.fad.fa-restroom:after{content:"\10f7bd"}.fad.fa-retweet:after{content:"\10f079"}.fad.fa-retweet-alt:after{content:"\10f361"}.fad.fa-ribbon:after{content:"\10f4d6"}.fad.fa-ring:after{content:"\10f70b"}.fad.fa-rings-wedding:after{content:"\10f81b"}.fad.fa-road:after{content:"\10f018"}.fad.fa-robot:after{content:"\10f544"}.fad.fa-rocket:after{content:"\10f135"}.fad.fa-rocket-launch:after{content:"\10f927"}.fad.fa-route:after{content:"\10f4d7"}.fad.fa-route-highway:after{content:"\10f61a"}.fad.fa-route-interstate:after{content:"\10f61b"}.fad.fa-router:after{content:"\10f8da"}.fad.fa-rss:after{content:"\10f09e"}.fad.fa-rss-square:after{content:"\10f143"}.fad.fa-ruble-sign:after{content:"\10f158"}.fad.fa-ruler:after{content:"\10f545"}.fad.fa-ruler-combined:after{content:"\10f546"}.fad.fa-ruler-horizontal:after{content:"\10f547"}.fad.fa-ruler-triangle:after{content:"\10f61c"}.fad.fa-ruler-vertical:after{content:"\10f548"}.fad.fa-running:after{content:"\10f70c"}.fad.fa-rupee-sign:after{content:"\10f156"}.fad.fa-rv:after{content:"\10f7be"}.fad.fa-sack:after{content:"\10f81c"}.fad.fa-sack-dollar:after{content:"\10f81d"}.fad.fa-sad-cry:after{content:"\10f5b3"}.fad.fa-sad-tear:after{content:"\10f5b4"}.fad.fa-salad:after{content:"\10f81e"}.fad.fa-sandwich:after{content:"\10f81f"}.fad.fa-satellite:after{content:"\10f7bf"}.fad.fa-satellite-dish:after{content:"\10f7c0"}.fad.fa-sausage:after{content:"\10f820"}.fad.fa-save:after{content:"\10f0c7"}.fad.fa-sax-hot:after{content:"\10f8db"}.fad.fa-saxophone:after{content:"\10f8dc"}.fad.fa-scalpel:after{content:"\10f61d"}.fad.fa-scalpel-path:after{content:"\10f61e"}.fad.fa-scanner:after{content:"\10f488"}.fad.fa-scanner-image:after{content:"\10f8f3"}.fad.fa-scanner-keyboard:after{content:"\10f489"}.fad.fa-scanner-touchscreen:after{content:"\10f48a"}.fad.fa-scarecrow:after{content:"\10f70d"}.fad.fa-scarf:after{content:"\10f7c1"}.fad.fa-school:after{content:"\10f549"}.fad.fa-screwdriver:after{content:"\10f54a"}.fad.fa-scroll:after{content:"\10f70e"}.fad.fa-scroll-old:after{content:"\10f70f"}.fad.fa-scrubber:after{content:"\10f2f8"}.fad.fa-scythe:after{content:"\10f710"}.fad.fa-sd-card:after{content:"\10f7c2"}.fad.fa-search:after{content:"\10f002"}.fad.fa-search-dollar:after{content:"\10f688"}.fad.fa-search-location:after{content:"\10f689"}.fad.fa-search-minus:after{content:"\10f010"}.fad.fa-search-plus:after{content:"\10f00e"}.fad.fa-seedling:after{content:"\10f4d8"}.fad.fa-send-back:after{content:"\10f87e"}.fad.fa-send-backward:after{content:"\10f87f"}.fad.fa-sensor:after{content:"\10f928"}.fad.fa-sensor-alert:after{content:"\10f929"}.fad.fa-sensor-fire:after{content:"\10f92a"}.fad.fa-sensor-on:after{content:"\10f92b"}.fad.fa-sensor-smoke:after{content:"\10f92c"}.fad.fa-server:after{content:"\10f233"}.fad.fa-shapes:after{content:"\10f61f"}.fad.fa-share:after{content:"\10f064"}.fad.fa-share-all:after{content:"\10f367"}.fad.fa-share-alt:after{content:"\10f1e0"}.fad.fa-share-alt-square:after{content:"\10f1e1"}.fad.fa-share-square:after{content:"\10f14d"}.fad.fa-sheep:after{content:"\10f711"}.fad.fa-shekel-sign:after{content:"\10f20b"}.fad.fa-shield:after{content:"\10f132"}.fad.fa-shield-alt:after{content:"\10f3ed"}.fad.fa-shield-check:after{content:"\10f2f7"}.fad.fa-shield-cross:after{content:"\10f712"}.fad.fa-ship:after{content:"\10f21a"}.fad.fa-shipping-fast:after{content:"\10f48b"}.fad.fa-shipping-timed:after{content:"\10f48c"}.fad.fa-shish-kebab:after{content:"\10f821"}.fad.fa-shoe-prints:after{content:"\10f54b"}.fad.fa-shopping-bag:after{content:"\10f290"}.fad.fa-shopping-basket:after{content:"\10f291"}.fad.fa-shopping-cart:after{content:"\10f07a"}.fad.fa-shovel:after{content:"\10f713"}.fad.fa-shovel-snow:after{content:"\10f7c3"}.fad.fa-shower:after{content:"\10f2cc"}.fad.fa-shredder:after{content:"\10f68a"}.fad.fa-shuttle-van:after{content:"\10f5b6"}.fad.fa-shuttlecock:after{content:"\10f45b"}.fad.fa-sickle:after{content:"\10f822"}.fad.fa-sigma:after{content:"\10f68b"}.fad.fa-sign:after{content:"\10f4d9"}.fad.fa-sign-in:after{content:"\10f090"}.fad.fa-sign-in-alt:after{content:"\10f2f6"}.fad.fa-sign-language:after{content:"\10f2a7"}.fad.fa-sign-out:after{content:"\10f08b"}.fad.fa-sign-out-alt:after{content:"\10f2f5"}.fad.fa-signal:after{content:"\10f012"}.fad.fa-signal-1:after{content:"\10f68c"}.fad.fa-signal-2:after{content:"\10f68d"}.fad.fa-signal-3:after{content:"\10f68e"}.fad.fa-signal-4:after{content:"\10f68f"}.fad.fa-signal-alt:after{content:"\10f690"}.fad.fa-signal-alt-1:after{content:"\10f691"}.fad.fa-signal-alt-2:after{content:"\10f692"}.fad.fa-signal-alt-3:after{content:"\10f693"}.fad.fa-signal-alt-slash:after{content:"\10f694"}.fad.fa-signal-slash:after{content:"\10f695"}.fad.fa-signal-stream:after{content:"\10f8dd"}.fad.fa-signature:after{content:"\10f5b7"}.fad.fa-sim-card:after{content:"\10f7c4"}.fad.fa-siren:after{content:"\10f92d"}.fad.fa-siren-on:after{content:"\10f92e"}.fad.fa-sitemap:after{content:"\10f0e8"}.fad.fa-skating:after{content:"\10f7c5"}.fad.fa-skeleton:after{content:"\10f620"}.fad.fa-ski-jump:after{content:"\10f7c7"}.fad.fa-ski-lift:after{content:"\10f7c8"}.fad.fa-skiing:after{content:"\10f7c9"}.fad.fa-skiing-nordic:after{content:"\10f7ca"}.fad.fa-skull:after{content:"\10f54c"}.fad.fa-skull-cow:after{content:"\10f8de"}.fad.fa-skull-crossbones:after{content:"\10f714"}.fad.fa-slash:after{content:"\10f715"}.fad.fa-sledding:after{content:"\10f7cb"}.fad.fa-sleigh:after{content:"\10f7cc"}.fad.fa-sliders-h:after{content:"\10f1de"}.fad.fa-sliders-h-square:after{content:"\10f3f0"}.fad.fa-sliders-v:after{content:"\10f3f1"}.fad.fa-sliders-v-square:after{content:"\10f3f2"}.fad.fa-smile:after{content:"\10f118"}.fad.fa-smile-beam:after{content:"\10f5b8"}.fad.fa-smile-plus:after{content:"\10f5b9"}.fad.fa-smile-wink:after{content:"\10f4da"}.fad.fa-smog:after{content:"\10f75f"}.fad.fa-smoke:after{content:"\10f760"}.fad.fa-smoking:after{content:"\10f48d"}.fad.fa-smoking-ban:after{content:"\10f54d"}.fad.fa-sms:after{content:"\10f7cd"}.fad.fa-snake:after{content:"\10f716"}.fad.fa-snooze:after{content:"\10f880"}.fad.fa-snow-blowing:after{content:"\10f761"}.fad.fa-snowboarding:after{content:"\10f7ce"}.fad.fa-snowflake:after{content:"\10f2dc"}.fad.fa-snowflakes:after{content:"\10f7cf"}.fad.fa-snowman:after{content:"\10f7d0"}.fad.fa-snowmobile:after{content:"\10f7d1"}.fad.fa-snowplow:after{content:"\10f7d2"}.fad.fa-socks:after{content:"\10f696"}.fad.fa-solar-panel:after{content:"\10f5ba"}.fad.fa-solar-system:after{content:"\10f92f"}.fad.fa-sort:after{content:"\10f0dc"}.fad.fa-sort-alpha-down:after{content:"\10f15d"}.fad.fa-sort-alpha-down-alt:after{content:"\10f881"}.fad.fa-sort-alpha-up:after{content:"\10f15e"}.fad.fa-sort-alpha-up-alt:after{content:"\10f882"}.fad.fa-sort-alt:after{content:"\10f883"}.fad.fa-sort-amount-down:after{content:"\10f160"}.fad.fa-sort-amount-down-alt:after{content:"\10f884"}.fad.fa-sort-amount-up:after{content:"\10f161"}.fad.fa-sort-amount-up-alt:after{content:"\10f885"}.fad.fa-sort-circle:after{content:"\10f930"}.fad.fa-sort-circle-down:after{content:"\10f931"}.fad.fa-sort-circle-up:after{content:"\10f932"}.fad.fa-sort-down:after{content:"\10f0dd"}.fad.fa-sort-numeric-down:after{content:"\10f162"}.fad.fa-sort-numeric-down-alt:after{content:"\10f886"}.fad.fa-sort-numeric-up:after{content:"\10f163"}.fad.fa-sort-numeric-up-alt:after{content:"\10f887"}.fad.fa-sort-shapes-down:after{content:"\10f888"}.fad.fa-sort-shapes-down-alt:after{content:"\10f889"}.fad.fa-sort-shapes-up:after{content:"\10f88a"}.fad.fa-sort-shapes-up-alt:after{content:"\10f88b"}.fad.fa-sort-size-down:after{content:"\10f88c"}.fad.fa-sort-size-down-alt:after{content:"\10f88d"}.fad.fa-sort-size-up:after{content:"\10f88e"}.fad.fa-sort-size-up-alt:after{content:"\10f88f"}.fad.fa-sort-up:after{content:"\10f0de"}.fad.fa-soup:after{content:"\10f823"}.fad.fa-spa:after{content:"\10f5bb"}.fad.fa-space-shuttle:after{content:"\10f197"}.fad.fa-space-station-moon:after{content:"\10f933"}.fad.fa-space-station-moon-alt:after{content:"\10f934"}.fad.fa-spade:after{content:"\10f2f4"}.fad.fa-sparkles:after{content:"\10f890"}.fad.fa-speaker:after{content:"\10f8df"}.fad.fa-speakers:after{content:"\10f8e0"}.fad.fa-spell-check:after{content:"\10f891"}.fad.fa-spider:after{content:"\10f717"}.fad.fa-spider-black-widow:after{content:"\10f718"}.fad.fa-spider-web:after{content:"\10f719"}.fad.fa-spinner:after{content:"\10f110"}.fad.fa-spinner-third:after{content:"\10f3f4"}.fad.fa-splotch:after{content:"\10f5bc"}.fad.fa-spray-can:after{content:"\10f5bd"}.fad.fa-sprinkler:after{content:"\10f935"}.fad.fa-square:after{content:"\10f0c8"}.fad.fa-square-full:after{content:"\10f45c"}.fad.fa-square-root:after{content:"\10f697"}.fad.fa-square-root-alt:after{content:"\10f698"}.fad.fa-squirrel:after{content:"\10f71a"}.fad.fa-staff:after{content:"\10f71b"}.fad.fa-stamp:after{content:"\10f5bf"}.fad.fa-star:after{content:"\10f005"}.fad.fa-star-and-crescent:after{content:"\10f699"}.fad.fa-star-christmas:after{content:"\10f7d4"}.fad.fa-star-exclamation:after{content:"\10f2f3"}.fad.fa-star-half:after{content:"\10f089"}.fad.fa-star-half-alt:after{content:"\10f5c0"}.fad.fa-star-of-david:after{content:"\10f69a"}.fad.fa-star-of-life:after{content:"\10f621"}.fad.fa-star-shooting:after{content:"\10f936"}.fad.fa-starfighter:after{content:"\10f937"}.fad.fa-starfighter-alt:after{content:"\10f938"}.fad.fa-stars:after{content:"\10f762"}.fad.fa-starship:after{content:"\10f939"}.fad.fa-starship-freighter:after{content:"\10f93a"}.fad.fa-steak:after{content:"\10f824"}.fad.fa-steering-wheel:after{content:"\10f622"}.fad.fa-step-backward:after{content:"\10f048"}.fad.fa-step-forward:after{content:"\10f051"}.fad.fa-stethoscope:after{content:"\10f0f1"}.fad.fa-sticky-note:after{content:"\10f249"}.fad.fa-stocking:after{content:"\10f7d5"}.fad.fa-stomach:after{content:"\10f623"}.fad.fa-stop:after{content:"\10f04d"}.fad.fa-stop-circle:after{content:"\10f28d"}.fad.fa-stopwatch:after{content:"\10f2f2"}.fad.fa-store:after{content:"\10f54e"}.fad.fa-store-alt:after{content:"\10f54f"}.fad.fa-stream:after{content:"\10f550"}.fad.fa-street-view:after{content:"\10f21d"}.fad.fa-stretcher:after{content:"\10f825"}.fad.fa-strikethrough:after{content:"\10f0cc"}.fad.fa-stroopwafel:after{content:"\10f551"}.fad.fa-subscript:after{content:"\10f12c"}.fad.fa-subway:after{content:"\10f239"}.fad.fa-suitcase:after{content:"\10f0f2"}.fad.fa-suitcase-rolling:after{content:"\10f5c1"}.fad.fa-sun:after{content:"\10f185"}.fad.fa-sun-cloud:after{content:"\10f763"}.fad.fa-sun-dust:after{content:"\10f764"}.fad.fa-sun-haze:after{content:"\10f765"}.fad.fa-sunglasses:after{content:"\10f892"}.fad.fa-sunrise:after{content:"\10f766"}.fad.fa-sunset:after{content:"\10f767"}.fad.fa-superscript:after{content:"\10f12b"}.fad.fa-surprise:after{content:"\10f5c2"}.fad.fa-swatchbook:after{content:"\10f5c3"}.fad.fa-swimmer:after{content:"\10f5c4"}.fad.fa-swimming-pool:after{content:"\10f5c5"}.fad.fa-sword:after{content:"\10f71c"}.fad.fa-sword-laser:after{content:"\10f93b"}.fad.fa-sword-laser-alt:after{content:"\10f93c"}.fad.fa-swords:after{content:"\10f71d"}.fad.fa-swords-laser:after{content:"\10f93d"}.fad.fa-synagogue:after{content:"\10f69b"}.fad.fa-sync:after{content:"\10f021"}.fad.fa-sync-alt:after{content:"\10f2f1"}.fad.fa-syringe:after{content:"\10f48e"}.fad.fa-table:after{content:"\10f0ce"}.fad.fa-table-tennis:after{content:"\10f45d"}.fad.fa-tablet:after{content:"\10f10a"}.fad.fa-tablet-alt:after{content:"\10f3fa"}.fad.fa-tablet-android:after{content:"\10f3fb"}.fad.fa-tablet-android-alt:after{content:"\10f3fc"}.fad.fa-tablet-rugged:after{content:"\10f48f"}.fad.fa-tablets:after{content:"\10f490"}.fad.fa-tachometer:after{content:"\10f0e4"}.fad.fa-tachometer-alt:after{content:"\10f3fd"}.fad.fa-tachometer-alt-average:after{content:"\10f624"}.fad.fa-tachometer-alt-fast:after{content:"\10f625"}.fad.fa-tachometer-alt-fastest:after{content:"\10f626"}.fad.fa-tachometer-alt-slow:after{content:"\10f627"}.fad.fa-tachometer-alt-slowest:after{content:"\10f628"}.fad.fa-tachometer-average:after{content:"\10f629"}.fad.fa-tachometer-fast:after{content:"\10f62a"}.fad.fa-tachometer-fastest:after{content:"\10f62b"}.fad.fa-tachometer-slow:after{content:"\10f62c"}.fad.fa-tachometer-slowest:after{content:"\10f62d"}.fad.fa-taco:after{content:"\10f826"}.fad.fa-tag:after{content:"\10f02b"}.fad.fa-tags:after{content:"\10f02c"}.fad.fa-tally:after{content:"\10f69c"}.fad.fa-tanakh:after{content:"\10f827"}.fad.fa-tape:after{content:"\10f4db"}.fad.fa-tasks:after{content:"\10f0ae"}.fad.fa-tasks-alt:after{content:"\10f828"}.fad.fa-taxi:after{content:"\10f1ba"}.fad.fa-teeth:after{content:"\10f62e"}.fad.fa-teeth-open:after{content:"\10f62f"}.fad.fa-telescope:after{content:"\10f93e"}.fad.fa-temperature-down:after{content:"\10f93f"}.fad.fa-temperature-frigid:after{content:"\10f768"}.fad.fa-temperature-high:after{content:"\10f769"}.fad.fa-temperature-hot:after{content:"\10f76a"}.fad.fa-temperature-low:after{content:"\10f76b"}.fad.fa-temperature-up:after{content:"\10f940"}.fad.fa-tenge:after{content:"\10f7d7"}.fad.fa-tennis-ball:after{content:"\10f45e"}.fad.fa-terminal:after{content:"\10f120"}.fad.fa-text:after{content:"\10f893"}.fad.fa-text-height:after{content:"\10f034"}.fad.fa-text-size:after{content:"\10f894"}.fad.fa-text-width:after{content:"\10f035"}.fad.fa-th:after{content:"\10f00a"}.fad.fa-th-large:after{content:"\10f009"}.fad.fa-th-list:after{content:"\10f00b"}.fad.fa-theater-masks:after{content:"\10f630"}.fad.fa-thermometer:after{content:"\10f491"}.fad.fa-thermometer-empty:after{content:"\10f2cb"}.fad.fa-thermometer-full:after{content:"\10f2c7"}.fad.fa-thermometer-half:after{content:"\10f2c9"}.fad.fa-thermometer-quarter:after{content:"\10f2ca"}.fad.fa-thermometer-three-quarters:after{content:"\10f2c8"}.fad.fa-theta:after{content:"\10f69e"}.fad.fa-thumbs-down:after{content:"\10f165"}.fad.fa-thumbs-up:after{content:"\10f164"}.fad.fa-thumbtack:after{content:"\10f08d"}.fad.fa-thunderstorm:after{content:"\10f76c"}.fad.fa-thunderstorm-moon:after{content:"\10f76d"}.fad.fa-thunderstorm-sun:after{content:"\10f76e"}.fad.fa-ticket:after{content:"\10f145"}.fad.fa-ticket-alt:after{content:"\10f3ff"}.fad.fa-tilde:after{content:"\10f69f"}.fad.fa-times:after{content:"\10f00d"}.fad.fa-times-circle:after{content:"\10f057"}.fad.fa-times-hexagon:after{content:"\10f2ee"}.fad.fa-times-octagon:after{content:"\10f2f0"}.fad.fa-times-square:after{content:"\10f2d3"}.fad.fa-tint:after{content:"\10f043"}.fad.fa-tint-slash:after{content:"\10f5c7"}.fad.fa-tire:after{content:"\10f631"}.fad.fa-tire-flat:after{content:"\10f632"}.fad.fa-tire-pressure-warning:after{content:"\10f633"}.fad.fa-tire-rugged:after{content:"\10f634"}.fad.fa-tired:after{content:"\10f5c8"}.fad.fa-toggle-off:after{content:"\10f204"}.fad.fa-toggle-on:after{content:"\10f205"}.fad.fa-toilet:after{content:"\10f7d8"}.fad.fa-toilet-paper:after{content:"\10f71e"}.fad.fa-toilet-paper-alt:after{content:"\10f71f"}.fad.fa-tombstone:after{content:"\10f720"}.fad.fa-tombstone-alt:after{content:"\10f721"}.fad.fa-toolbox:after{content:"\10f552"}.fad.fa-tools:after{content:"\10f7d9"}.fad.fa-tooth:after{content:"\10f5c9"}.fad.fa-toothbrush:after{content:"\10f635"}.fad.fa-torah:after{content:"\10f6a0"}.fad.fa-torii-gate:after{content:"\10f6a1"}.fad.fa-tornado:after{content:"\10f76f"}.fad.fa-tractor:after{content:"\10f722"}.fad.fa-trademark:after{content:"\10f25c"}.fad.fa-traffic-cone:after{content:"\10f636"}.fad.fa-traffic-light:after{content:"\10f637"}.fad.fa-traffic-light-go:after{content:"\10f638"}.fad.fa-traffic-light-slow:after{content:"\10f639"}.fad.fa-traffic-light-stop:after{content:"\10f63a"}.fad.fa-trailer:after{content:"\10f941"}.fad.fa-train:after{content:"\10f238"}.fad.fa-tram:after{content:"\10f7da"}.fad.fa-transgender:after{content:"\10f224"}.fad.fa-transgender-alt:after{content:"\10f225"}.fad.fa-transporter:after{content:"\10f942"}.fad.fa-transporter-1:after{content:"\10f943"}.fad.fa-transporter-2:after{content:"\10f944"}.fad.fa-transporter-3:after{content:"\10f945"}.fad.fa-transporter-empty:after{content:"\10f946"}.fad.fa-trash:after{content:"\10f1f8"}.fad.fa-trash-alt:after{content:"\10f2ed"}.fad.fa-trash-restore:after{content:"\10f829"}.fad.fa-trash-restore-alt:after{content:"\10f82a"}.fad.fa-trash-undo:after{content:"\10f895"}.fad.fa-trash-undo-alt:after{content:"\10f896"}.fad.fa-treasure-chest:after{content:"\10f723"}.fad.fa-tree:after{content:"\10f1bb"}.fad.fa-tree-alt:after{content:"\10f400"}.fad.fa-tree-christmas:after{content:"\10f7db"}.fad.fa-tree-decorated:after{content:"\10f7dc"}.fad.fa-tree-large:after{content:"\10f7dd"}.fad.fa-tree-palm:after{content:"\10f82b"}.fad.fa-trees:after{content:"\10f724"}.fad.fa-triangle:after{content:"\10f2ec"}.fad.fa-triangle-music:after{content:"\10f8e2"}.fad.fa-trophy:after{content:"\10f091"}.fad.fa-trophy-alt:after{content:"\10f2eb"}.fad.fa-truck:after{content:"\10f0d1"}.fad.fa-truck-container:after{content:"\10f4dc"}.fad.fa-truck-couch:after{content:"\10f4dd"}.fad.fa-truck-loading:after{content:"\10f4de"}.fad.fa-truck-monster:after{content:"\10f63b"}.fad.fa-truck-moving:after{content:"\10f4df"}.fad.fa-truck-pickup:after{content:"\10f63c"}.fad.fa-truck-plow:after{content:"\10f7de"}.fad.fa-truck-ramp:after{content:"\10f4e0"}.fad.fa-trumpet:after{content:"\10f8e3"}.fad.fa-tshirt:after{content:"\10f553"}.fad.fa-tty:after{content:"\10f1e4"}.fad.fa-turkey:after{content:"\10f725"}.fad.fa-turntable:after{content:"\10f8e4"}.fad.fa-turtle:after{content:"\10f726"}.fad.fa-tv:after{content:"\10f26c"}.fad.fa-tv-alt:after{content:"\10f8e5"}.fad.fa-tv-music:after{content:"\10f8e6"}.fad.fa-tv-retro:after{content:"\10f401"}.fad.fa-typewriter:after{content:"\10f8e7"}.fad.fa-ufo:after{content:"\10f947"}.fad.fa-ufo-beam:after{content:"\10f948"}.fad.fa-umbrella:after{content:"\10f0e9"}.fad.fa-umbrella-beach:after{content:"\10f5ca"}.fad.fa-underline:after{content:"\10f0cd"}.fad.fa-undo:after{content:"\10f0e2"}.fad.fa-undo-alt:after{content:"\10f2ea"}.fad.fa-unicorn:after{content:"\10f727"}.fad.fa-union:after{content:"\10f6a2"}.fad.fa-universal-access:after{content:"\10f29a"}.fad.fa-university:after{content:"\10f19c"}.fad.fa-unlink:after{content:"\10f127"}.fad.fa-unlock:after{content:"\10f09c"}.fad.fa-unlock-alt:after{content:"\10f13e"}.fad.fa-upload:after{content:"\10f093"}.fad.fa-usb-drive:after{content:"\10f8e9"}.fad.fa-usd-circle:after{content:"\10f2e8"}.fad.fa-usd-square:after{content:"\10f2e9"}.fad.fa-user:after{content:"\10f007"}.fad.fa-user-alien:after{content:"\10f94a"}.fad.fa-user-alt:after{content:"\10f406"}.fad.fa-user-alt-slash:after{content:"\10f4fa"}.fad.fa-user-astronaut:after{content:"\10f4fb"}.fad.fa-user-chart:after{content:"\10f6a3"}.fad.fa-user-check:after{content:"\10f4fc"}.fad.fa-user-circle:after{content:"\10f2bd"}.fad.fa-user-clock:after{content:"\10f4fd"}.fad.fa-user-cog:after{content:"\10f4fe"}.fad.fa-user-cowboy:after{content:"\10f8ea"}.fad.fa-user-crown:after{content:"\10f6a4"}.fad.fa-user-edit:after{content:"\10f4ff"}.fad.fa-user-friends:after{content:"\10f500"}.fad.fa-user-graduate:after{content:"\10f501"}.fad.fa-user-hard-hat:after{content:"\10f82c"}.fad.fa-user-headset:after{content:"\10f82d"}.fad.fa-user-injured:after{content:"\10f728"}.fad.fa-user-lock:after{content:"\10f502"}.fad.fa-user-md:after{content:"\10f0f0"}.fad.fa-user-md-chat:after{content:"\10f82e"}.fad.fa-user-minus:after{content:"\10f503"}.fad.fa-user-music:after{content:"\10f8eb"}.fad.fa-user-ninja:after{content:"\10f504"}.fad.fa-user-nurse:after{content:"\10f82f"}.fad.fa-user-plus:after{content:"\10f234"}.fad.fa-user-robot:after{content:"\10f94b"}.fad.fa-user-secret:after{content:"\10f21b"}.fad.fa-user-shield:after{content:"\10f505"}.fad.fa-user-slash:after{content:"\10f506"}.fad.fa-user-tag:after{content:"\10f507"}.fad.fa-user-tie:after{content:"\10f508"}.fad.fa-user-times:after{content:"\10f235"}.fad.fa-user-visor:after{content:"\10f94c"}.fad.fa-users:after{content:"\10f0c0"}.fad.fa-users-class:after{content:"\10f63d"}.fad.fa-users-cog:after{content:"\10f509"}.fad.fa-users-crown:after{content:"\10f6a5"}.fad.fa-users-medical:after{content:"\10f830"}.fad.fa-utensil-fork:after{content:"\10f2e3"}.fad.fa-utensil-knife:after{content:"\10f2e4"}.fad.fa-utensil-spoon:after{content:"\10f2e5"}.fad.fa-utensils:after{content:"\10f2e7"}.fad.fa-utensils-alt:after{content:"\10f2e6"}.fad.fa-vacuum:after{content:"\10f94d"}.fad.fa-vacuum-robot:after{content:"\10f94e"}.fad.fa-value-absolute:after{content:"\10f6a6"}.fad.fa-vector-square:after{content:"\10f5cb"}.fad.fa-venus:after{content:"\10f221"}.fad.fa-venus-double:after{content:"\10f226"}.fad.fa-venus-mars:after{content:"\10f228"}.fad.fa-vhs:after{content:"\10f8ec"}.fad.fa-vial:after{content:"\10f492"}.fad.fa-vials:after{content:"\10f493"}.fad.fa-video:after{content:"\10f03d"}.fad.fa-video-plus:after{content:"\10f4e1"}.fad.fa-video-slash:after{content:"\10f4e2"}.fad.fa-vihara:after{content:"\10f6a7"}.fad.fa-violin:after{content:"\10f8ed"}.fad.fa-voicemail:after{content:"\10f897"}.fad.fa-volcano:after{content:"\10f770"}.fad.fa-volleyball-ball:after{content:"\10f45f"}.fad.fa-volume:after{content:"\10f6a8"}.fad.fa-volume-down:after{content:"\10f027"}.fad.fa-volume-mute:after{content:"\10f6a9"}.fad.fa-volume-off:after{content:"\10f026"}.fad.fa-volume-slash:after{content:"\10f2e2"}.fad.fa-volume-up:after{content:"\10f028"}.fad.fa-vote-nay:after{content:"\10f771"}.fad.fa-vote-yea:after{content:"\10f772"}.fad.fa-vr-cardboard:after{content:"\10f729"}.fad.fa-wagon-covered:after{content:"\10f8ee"}.fad.fa-walker:after{content:"\10f831"}.fad.fa-walkie-talkie:after{content:"\10f8ef"}.fad.fa-walking:after{content:"\10f554"}.fad.fa-wallet:after{content:"\10f555"}.fad.fa-wand:after{content:"\10f72a"}.fad.fa-wand-magic:after{content:"\10f72b"}.fad.fa-warehouse:after{content:"\10f494"}.fad.fa-warehouse-alt:after{content:"\10f495"}.fad.fa-washer:after{content:"\10f898"}.fad.fa-watch:after{content:"\10f2e1"}.fad.fa-watch-calculator:after{content:"\10f8f0"}.fad.fa-watch-fitness:after{content:"\10f63e"}.fad.fa-water:after{content:"\10f773"}.fad.fa-water-lower:after{content:"\10f774"}.fad.fa-water-rise:after{content:"\10f775"}.fad.fa-wave-sine:after{content:"\10f899"}.fad.fa-wave-square:after{content:"\10f83e"}.fad.fa-wave-triangle:after{content:"\10f89a"}.fad.fa-waveform:after{content:"\10f8f1"}.fad.fa-waveform-path:after{content:"\10f8f2"}.fad.fa-webcam:after{content:"\10f832"}.fad.fa-webcam-slash:after{content:"\10f833"}.fad.fa-weight:after{content:"\10f496"}.fad.fa-weight-hanging:after{content:"\10f5cd"}.fad.fa-whale:after{content:"\10f72c"}.fad.fa-wheat:after{content:"\10f72d"}.fad.fa-wheelchair:after{content:"\10f193"}.fad.fa-whistle:after{content:"\10f460"}.fad.fa-wifi:after{content:"\10f1eb"}.fad.fa-wifi-1:after{content:"\10f6aa"}.fad.fa-wifi-2:after{content:"\10f6ab"}.fad.fa-wifi-slash:after{content:"\10f6ac"}.fad.fa-wind:after{content:"\10f72e"}.fad.fa-wind-turbine:after{content:"\10f89b"}.fad.fa-wind-warning:after{content:"\10f776"}.fad.fa-window:after{content:"\10f40e"}.fad.fa-window-alt:after{content:"\10f40f"}.fad.fa-window-close:after{content:"\10f410"}.fad.fa-window-frame:after{content:"\10f94f"}.fad.fa-window-frame-open:after{content:"\10f950"}.fad.fa-window-maximize:after{content:"\10f2d0"}.fad.fa-window-minimize:after{content:"\10f2d1"}.fad.fa-window-restore:after{content:"\10f2d2"}.fad.fa-windsock:after{content:"\10f777"}.fad.fa-wine-bottle:after{content:"\10f72f"}.fad.fa-wine-glass:after{content:"\10f4e3"}.fad.fa-wine-glass-alt:after{content:"\10f5ce"}.fad.fa-won-sign:after{content:"\10f159"}.fad.fa-wreath:after{content:"\10f7e2"}.fad.fa-wrench:after{content:"\10f0ad"}.fad.fa-x-ray:after{content:"\10f497"}.fad.fa-yen-sign:after{content:"\10f157"}.fad.fa-yin-yang:after{content:"\10f6ad"}@font-face{font-family:"Font Awesome 5 Pro";font-style:normal;font-weight:300;font-display:auto;src:url(../webfonts/fa-light-300.eot);src:url(../webfonts/fa-light-300.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-light-300.woff2) format("woff2"),url(../webfonts/fa-light-300.woff) format("woff"),url(../webfonts/fa-light-300.ttf) format("truetype"),url(../webfonts/fa-light-300.svg#fontawesome) format("svg")}.fal{font-weight:300}@font-face{font-family:"Font Awesome 5 Pro";font-style:normal;font-weight:400;font-display:auto;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.fal,.far{font-family:"Font Awesome 5 Pro"}.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Pro";font-style:normal;font-weight:900;font-display:auto;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:"Font Awesome 5 Pro";font-weight:900} \ No newline at end of file diff --git a/static/assets/css/fontawesome/webfonts/fa-brands-400.eot b/static/assets/css/fontawesome/webfonts/fa-brands-400.eot new file mode 100644 index 0000000..ff42eeb Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-brands-400.eot differ diff --git a/static/assets/css/fontawesome/webfonts/fa-brands-400.svg b/static/assets/css/fontawesome/webfonts/fa-brands-400.svg new file mode 100644 index 0000000..3613b35 --- /dev/null +++ b/static/assets/css/fontawesome/webfonts/fa-brands-400.svg @@ -0,0 +1,3535 @@ + + + + + +Created by FontForge 20190801 at Tue Dec 10 16:08:44 2019 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/assets/css/fontawesome/webfonts/fa-brands-400.ttf b/static/assets/css/fontawesome/webfonts/fa-brands-400.ttf new file mode 100644 index 0000000..79b6bae Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-brands-400.ttf differ diff --git a/static/assets/css/fontawesome/webfonts/fa-brands-400.woff b/static/assets/css/fontawesome/webfonts/fa-brands-400.woff new file mode 100644 index 0000000..56d4bbb Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-brands-400.woff differ diff --git a/static/assets/css/fontawesome/webfonts/fa-brands-400.woff2 b/static/assets/css/fontawesome/webfonts/fa-brands-400.woff2 new file mode 100644 index 0000000..8a83663 Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-brands-400.woff2 differ diff --git a/static/assets/css/fontawesome/webfonts/fa-duotone-900.eot b/static/assets/css/fontawesome/webfonts/fa-duotone-900.eot new file mode 100644 index 0000000..6ca4482 Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-duotone-900.eot differ diff --git a/static/assets/css/fontawesome/webfonts/fa-duotone-900.svg b/static/assets/css/fontawesome/webfonts/fa-duotone-900.svg new file mode 100644 index 0000000..43d3417 --- /dev/null +++ b/static/assets/css/fontawesome/webfonts/fa-duotone-900.svg @@ -0,0 +1,14692 @@ + + + + + +Created by FontForge 20190801 at Tue Dec 10 16:08:45 2019 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/assets/css/fontawesome/webfonts/fa-duotone-900.woff b/static/assets/css/fontawesome/webfonts/fa-duotone-900.woff new file mode 100644 index 0000000..de2ce75 Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-duotone-900.woff differ diff --git a/static/assets/css/fontawesome/webfonts/fa-duotone-900.woff2 b/static/assets/css/fontawesome/webfonts/fa-duotone-900.woff2 new file mode 100644 index 0000000..0d57b19 Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-duotone-900.woff2 differ diff --git a/static/assets/css/fontawesome/webfonts/fa-light-300.eot b/static/assets/css/fontawesome/webfonts/fa-light-300.eot new file mode 100644 index 0000000..5051b87 Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-light-300.eot differ diff --git a/static/assets/css/fontawesome/webfonts/fa-light-300.svg b/static/assets/css/fontawesome/webfonts/fa-light-300.svg new file mode 100644 index 0000000..48908c4 --- /dev/null +++ b/static/assets/css/fontawesome/webfonts/fa-light-300.svg @@ -0,0 +1,11936 @@ + + + + + +Created by FontForge 20190801 at Tue Dec 10 16:08:46 2019 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/assets/css/fontawesome/webfonts/fa-light-300.ttf b/static/assets/css/fontawesome/webfonts/fa-light-300.ttf new file mode 100644 index 0000000..34489d0 Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-light-300.ttf differ diff --git a/static/assets/css/fontawesome/webfonts/fa-light-300.woff b/static/assets/css/fontawesome/webfonts/fa-light-300.woff new file mode 100644 index 0000000..414c107 Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-light-300.woff differ diff --git a/static/assets/css/fontawesome/webfonts/fa-light-300.woff2 b/static/assets/css/fontawesome/webfonts/fa-light-300.woff2 new file mode 100644 index 0000000..d49e7e2 Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-light-300.woff2 differ diff --git a/static/assets/css/fontawesome/webfonts/fa-regular-400.eot b/static/assets/css/fontawesome/webfonts/fa-regular-400.eot new file mode 100644 index 0000000..4c6662f Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-regular-400.eot differ diff --git a/static/assets/css/fontawesome/webfonts/fa-regular-400.svg b/static/assets/css/fontawesome/webfonts/fa-regular-400.svg new file mode 100644 index 0000000..32aae12 --- /dev/null +++ b/static/assets/css/fontawesome/webfonts/fa-regular-400.svg @@ -0,0 +1,10905 @@ + + + + + +Created by FontForge 20190801 at Tue Dec 10 16:08:46 2019 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/assets/css/fontawesome/webfonts/fa-regular-400.ttf b/static/assets/css/fontawesome/webfonts/fa-regular-400.ttf new file mode 100644 index 0000000..2da2b23 Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-regular-400.ttf differ diff --git a/static/assets/css/fontawesome/webfonts/fa-regular-400.woff b/static/assets/css/fontawesome/webfonts/fa-regular-400.woff new file mode 100644 index 0000000..ae20cd5 Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-regular-400.woff differ diff --git a/static/assets/css/fontawesome/webfonts/fa-regular-400.woff2 b/static/assets/css/fontawesome/webfonts/fa-regular-400.woff2 new file mode 100644 index 0000000..783cfcf Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-regular-400.woff2 differ diff --git a/static/assets/css/fontawesome/webfonts/fa-solid-900.eot b/static/assets/css/fontawesome/webfonts/fa-solid-900.eot new file mode 100644 index 0000000..cbcc72f Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-solid-900.eot differ diff --git a/static/assets/css/fontawesome/webfonts/fa-solid-900.svg b/static/assets/css/fontawesome/webfonts/fa-solid-900.svg new file mode 100644 index 0000000..190c4c8 --- /dev/null +++ b/static/assets/css/fontawesome/webfonts/fa-solid-900.svg @@ -0,0 +1,9297 @@ + + + + + +Created by FontForge 20190801 at Tue Dec 10 16:08:45 2019 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/assets/css/fontawesome/webfonts/fa-solid-900.ttf b/static/assets/css/fontawesome/webfonts/fa-solid-900.ttf new file mode 100644 index 0000000..18e30d4 Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-solid-900.ttf differ diff --git a/static/assets/css/fontawesome/webfonts/fa-solid-900.woff b/static/assets/css/fontawesome/webfonts/fa-solid-900.woff new file mode 100644 index 0000000..c0e39e2 Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-solid-900.woff differ diff --git a/static/assets/css/fontawesome/webfonts/fa-solid-900.woff2 b/static/assets/css/fontawesome/webfonts/fa-solid-900.woff2 new file mode 100644 index 0000000..2524b30 Binary files /dev/null and b/static/assets/css/fontawesome/webfonts/fa-solid-900.woff2 differ diff --git a/static/assets/css/reset-css.css b/static/assets/css/reset-css.css new file mode 100644 index 0000000..6f12183 --- /dev/null +++ b/static/assets/css/reset-css.css @@ -0,0 +1,264 @@ +a, abbr, acronym, address, applet, article, aside, audio, b, big, blockquote, body, canvas, caption, center, cite, code, dd, del, details, dfn, div, dl, dt, em, embed, fieldset, figcaption, figure, footer, form, h1, h2, h3, h4, h5, h6, header, hgroup, html, i, iframe, img, ins, kbd, label, legend, li, mark, menu, nav, object, ol, output, p, pre, q, ruby, s, samp, section, small, span, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, time, tr, tt, u, ul, var, video{ + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section{ + display: block +} + +body{ + line-height: 1; + margin: 0 +} + +ol, ul{ + list-style: none +} + +blockquote, q{ + quotes: none +} + +blockquote:after, blockquote:before, q:after, q:before{ + content: ''; + content: none +} + +table{ + border-collapse: collapse; + border-spacing: 0 +} + +html{ + line-height: 1.15; + -webkit-text-size-adjust: 100% +} + +h1{ + font-size: 2em; + margin: .67em 0 +} + +hr{ + box-sizing: content-box; + height: 0; + overflow: visible +} + +pre{ + font-family: monospace, monospace; + font-size: 1em +} + +a{ + background-color: transparent +} + +abbr[title]{ + border-bottom: none; + text-decoration: underline; + text-decoration: underline dotted +} + +b, strong{ + font-weight: bolder +} + +code, kbd, samp{ + font-family: monospace, monospace; + font-size: 1em +} + +small{ + font-size: 80% +} + +sub, sup{ + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline +} + +sub{ + bottom: -.25em +} + +sup{ + top: -.5em +} + +img{ + border-style: none +} + +button, input, optgroup, select, textarea{ + font-family: inherit; + font-size: 100%; + line-height: 1.15; + margin: 0 +} + +button, input{ + overflow: visible +} + +button, select{ + text-transform: none +} + +[type=button], [type=reset], [type=submit], button{ + -webkit-appearance: button +} + +[type=button]::-moz-focus-inner, [type=reset]::-moz-focus-inner, [type=submit]::-moz-focus-inner, button::-moz-focus-inner{ + border-style: none; + padding: 0 +} + +[type=button]:-moz-focusring, [type=reset]:-moz-focusring, [type=submit]:-moz-focusring, button:-moz-focusring{ + outline: 1px dotted ButtonText +} + +fieldset{ + padding: .35em .75em .625em +} + +legend{ + box-sizing: border-box; + color: inherit; + display: table; + max-width: 100%; + padding: 0; + white-space: normal +} + +progress{ + vertical-align: baseline +} + +textarea{ + overflow: auto +} + +[type=checkbox], [type=radio]{ + box-sizing: border-box; + padding: 0 +} + +[type=number]::-webkit-inner-spin-button, [type=number]::-webkit-outer-spin-button{ + height: auto +} + +[type=search]{ + -webkit-appearance: textfield; + outline-offset: -2px +} + +[type=search]::-webkit-search-decoration{ + -webkit-appearance: none +} + +::-webkit-file-upload-button{ + -webkit-appearance: button; + font: inherit +} + +details{ + display: block +} + +summary{ + display: list-item +} + +template{ + display: none +} + +[hidden]{ + display: none +} + +::selection{ + background: #468fd2; + color: #fff +} + +::-webkit-selection{ + background: #468fd2; + color: #fff +} + +::-moz-selection{ + background: #468fd2; + color: #fff +} + +a{ + text-decoration: none +} + +h1{ + font-size: 32px; +} + +h2{ + font-size: 24px; +} + +h3{ + font-size: 18.72px; +} + +h4{ + font-size: 16px; +} + +h5{ + font-size: 13.28px; +} + +h6{ + font-size: 10.72px; +} + +.clear{ + clear: both; + display: block; + overflow: hidden; + visibility: hidden; + width: 0; + height: 0 +} + +.clearfix{ + zoom: 1 +} + +.clearfix:after, .clearfix:before, .row:after, .row:before{ + content: '\0020'; + display: block; + overflow: hidden; + visibility: hidden; + width: 0; + height: 0 +} + +.clearfix:after, .row:after{ + clear: both +} + +.relativePos{ + position: relative; + width: 100%; + height: 100% +} diff --git a/static/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.eot b/static/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.eot new file mode 100644 index 0000000..1bad4dd Binary files /dev/null and b/static/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.eot differ diff --git a/static/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.ttf b/static/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.ttf new file mode 100644 index 0000000..926ea50 Binary files /dev/null and b/static/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.ttf differ diff --git a/static/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.woff b/static/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.woff new file mode 100644 index 0000000..e29e1b4 Binary files /dev/null and b/static/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.woff differ diff --git a/static/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.woff2 b/static/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.woff2 new file mode 100644 index 0000000..5c7209a Binary files /dev/null and b/static/assets/fonts/IranYekan-webgfonts/bold/iranyekanwebbold.woff2 differ diff --git a/static/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.eot b/static/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.eot new file mode 100644 index 0000000..00c2977 Binary files /dev/null and b/static/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.eot differ diff --git a/static/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.ttf b/static/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.ttf new file mode 100644 index 0000000..8e2ff0b Binary files /dev/null and b/static/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.ttf differ diff --git a/static/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.woff b/static/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.woff new file mode 100644 index 0000000..dffe8ee Binary files /dev/null and b/static/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.woff differ diff --git a/static/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.woff2 b/static/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.woff2 new file mode 100644 index 0000000..e9a8ee7 Binary files /dev/null and b/static/assets/fonts/IranYekan-webgfonts/light/iranyekanweblight.woff2 differ diff --git a/static/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.eot b/static/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.eot new file mode 100644 index 0000000..4d31645 Binary files /dev/null and b/static/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.eot differ diff --git a/static/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.ttf b/static/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.ttf new file mode 100644 index 0000000..c109c68 Binary files /dev/null and b/static/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.ttf differ diff --git a/static/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.woff b/static/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.woff new file mode 100644 index 0000000..3f1756d Binary files /dev/null and b/static/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.woff differ diff --git a/static/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.woff2 b/static/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.woff2 new file mode 100644 index 0000000..3acdbf5 Binary files /dev/null and b/static/assets/fonts/IranYekan-webgfonts/regular/iranyekanwebregular.woff2 differ diff --git a/static/assets/img/FAQ/hero.jpg b/static/assets/img/FAQ/hero.jpg new file mode 100644 index 0000000..fe13a17 Binary files /dev/null and b/static/assets/img/FAQ/hero.jpg differ diff --git a/static/assets/img/about/s3.jpg b/static/assets/img/about/s3.jpg new file mode 100644 index 0000000..d6b74c5 Binary files /dev/null and b/static/assets/img/about/s3.jpg differ diff --git a/static/assets/img/about/s5.jpg b/static/assets/img/about/s5.jpg new file mode 100644 index 0000000..d0f310b Binary files /dev/null and b/static/assets/img/about/s5.jpg differ diff --git a/static/assets/img/agents/agents-hero.jpg b/static/assets/img/agents/agents-hero.jpg new file mode 100644 index 0000000..b896c3c Binary files /dev/null and b/static/assets/img/agents/agents-hero.jpg differ diff --git a/static/assets/img/agents/representations-hero.jpg b/static/assets/img/agents/representations-hero.jpg new file mode 100644 index 0000000..a093894 Binary files /dev/null and b/static/assets/img/agents/representations-hero.jpg differ diff --git a/static/assets/img/auth/bg.jpg b/static/assets/img/auth/bg.jpg new file mode 100644 index 0000000..4fc3fbf Binary files /dev/null and b/static/assets/img/auth/bg.jpg differ diff --git a/static/assets/img/auth/formbg.jpg b/static/assets/img/auth/formbg.jpg new file mode 100644 index 0000000..cb7eff6 Binary files /dev/null and b/static/assets/img/auth/formbg.jpg differ diff --git a/static/assets/img/avatars/1.jpg b/static/assets/img/avatars/1.jpg new file mode 100644 index 0000000..0b08703 Binary files /dev/null and b/static/assets/img/avatars/1.jpg differ diff --git a/static/assets/img/avatars/2.jpg b/static/assets/img/avatars/2.jpg new file mode 100644 index 0000000..e736709 Binary files /dev/null and b/static/assets/img/avatars/2.jpg differ diff --git a/static/assets/img/avatars/3.jpg b/static/assets/img/avatars/3.jpg new file mode 100644 index 0000000..caf9a7e Binary files /dev/null and b/static/assets/img/avatars/3.jpg differ diff --git a/static/assets/img/avatars/4.jpg b/static/assets/img/avatars/4.jpg new file mode 100644 index 0000000..97f6769 Binary files /dev/null and b/static/assets/img/avatars/4.jpg differ diff --git a/static/assets/img/avatars/5.jpg b/static/assets/img/avatars/5.jpg new file mode 100644 index 0000000..82b025f Binary files /dev/null and b/static/assets/img/avatars/5.jpg differ diff --git a/static/assets/img/avatars/6.jpg b/static/assets/img/avatars/6.jpg new file mode 100644 index 0000000..1d2b884 Binary files /dev/null and b/static/assets/img/avatars/6.jpg differ diff --git a/static/assets/img/avatars/7.jpg b/static/assets/img/avatars/7.jpg new file mode 100644 index 0000000..2903cd2 Binary files /dev/null and b/static/assets/img/avatars/7.jpg differ diff --git a/static/assets/img/avatars/8.jpg b/static/assets/img/avatars/8.jpg new file mode 100644 index 0000000..3a5eba9 Binary files /dev/null and b/static/assets/img/avatars/8.jpg differ diff --git a/static/assets/img/avatars/avatar.png b/static/assets/img/avatars/avatar.png new file mode 100644 index 0000000..e16488e Binary files /dev/null and b/static/assets/img/avatars/avatar.png differ diff --git a/static/assets/img/contact/bg.jpg b/static/assets/img/contact/bg.jpg new file mode 100644 index 0000000..c6f216f Binary files /dev/null and b/static/assets/img/contact/bg.jpg differ diff --git a/static/assets/img/download/android.svg b/static/assets/img/download/android.svg new file mode 100644 index 0000000..1e31489 --- /dev/null +++ b/static/assets/img/download/android.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/static/assets/img/download/hero.jpg b/static/assets/img/download/hero.jpg new file mode 100644 index 0000000..4ea813e Binary files /dev/null and b/static/assets/img/download/hero.jpg differ diff --git a/static/assets/img/download/ios.svg b/static/assets/img/download/ios.svg new file mode 100644 index 0000000..78d7943 --- /dev/null +++ b/static/assets/img/download/ios.svg @@ -0,0 +1,1071 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/assets/img/download/linux.png b/static/assets/img/download/linux.png new file mode 100644 index 0000000..c0288ab Binary files /dev/null and b/static/assets/img/download/linux.png differ diff --git a/static/assets/img/download/mac.png b/static/assets/img/download/mac.png new file mode 100644 index 0000000..6ebaf86 Binary files /dev/null and b/static/assets/img/download/mac.png differ diff --git a/static/assets/img/download/windows.png b/static/assets/img/download/windows.png new file mode 100644 index 0000000..1b47220 Binary files /dev/null and b/static/assets/img/download/windows.png differ diff --git a/static/assets/img/favicon.png b/static/assets/img/favicon.png new file mode 100644 index 0000000..d9c8a21 Binary files /dev/null and b/static/assets/img/favicon.png differ diff --git a/static/assets/img/favicon_white.png b/static/assets/img/favicon_white.png new file mode 100644 index 0000000..53f5614 Binary files /dev/null and b/static/assets/img/favicon_white.png differ diff --git a/static/assets/img/footer/androidApp.png b/static/assets/img/footer/androidApp.png new file mode 100644 index 0000000..2eb8c2d Binary files /dev/null and b/static/assets/img/footer/androidApp.png differ diff --git a/static/assets/img/footer/aparat.svg b/static/assets/img/footer/aparat.svg new file mode 100644 index 0000000..cfe5d64 --- /dev/null +++ b/static/assets/img/footer/aparat.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/static/assets/img/footer/apple.png b/static/assets/img/footer/apple.png new file mode 100644 index 0000000..1b5d60a Binary files /dev/null and b/static/assets/img/footer/apple.png differ diff --git a/static/assets/img/footer/guarantee.svg b/static/assets/img/footer/guarantee.svg new file mode 100644 index 0000000..cae888b --- /dev/null +++ b/static/assets/img/footer/guarantee.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/static/assets/img/footer/instagram.svg b/static/assets/img/footer/instagram.svg new file mode 100644 index 0000000..a760a62 --- /dev/null +++ b/static/assets/img/footer/instagram.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/assets/img/footer/learning.svg b/static/assets/img/footer/learning.svg new file mode 100644 index 0000000..4e3ab63 --- /dev/null +++ b/static/assets/img/footer/learning.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/static/assets/img/footer/nintendo.png b/static/assets/img/footer/nintendo.png new file mode 100644 index 0000000..5dc991b Binary files /dev/null and b/static/assets/img/footer/nintendo.png differ diff --git a/static/assets/img/footer/panatech.png b/static/assets/img/footer/panatech.png new file mode 100644 index 0000000..8dc65a6 Binary files /dev/null and b/static/assets/img/footer/panatech.png differ diff --git a/static/assets/img/footer/pwaApp.png b/static/assets/img/footer/pwaApp.png new file mode 100644 index 0000000..99a1607 Binary files /dev/null and b/static/assets/img/footer/pwaApp.png differ diff --git a/static/assets/img/footer/repair.svg b/static/assets/img/footer/repair.svg new file mode 100644 index 0000000..47667a6 --- /dev/null +++ b/static/assets/img/footer/repair.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/static/assets/img/footer/service.svg b/static/assets/img/footer/service.svg new file mode 100644 index 0000000..2618083 --- /dev/null +++ b/static/assets/img/footer/service.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/static/assets/img/footer/software.svg b/static/assets/img/footer/software.svg new file mode 100644 index 0000000..6e050b0 --- /dev/null +++ b/static/assets/img/footer/software.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/static/assets/img/footer/sony.png b/static/assets/img/footer/sony.png new file mode 100644 index 0000000..19829c5 Binary files /dev/null and b/static/assets/img/footer/sony.png differ diff --git a/static/assets/img/footer/support.svg b/static/assets/img/footer/support.svg new file mode 100644 index 0000000..4673f07 --- /dev/null +++ b/static/assets/img/footer/support.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/static/assets/img/footer/verity.png b/static/assets/img/footer/verity.png new file mode 100644 index 0000000..0ada453 Binary files /dev/null and b/static/assets/img/footer/verity.png differ diff --git a/static/assets/img/footer/whatsapp.svg b/static/assets/img/footer/whatsapp.svg new file mode 100644 index 0000000..54cd6d9 --- /dev/null +++ b/static/assets/img/footer/whatsapp.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/assets/img/home/bg.jpg b/static/assets/img/home/bg.jpg new file mode 100644 index 0000000..97a41c7 Binary files /dev/null and b/static/assets/img/home/bg.jpg differ diff --git a/static/assets/img/learning/hero.jpg b/static/assets/img/learning/hero.jpg new file mode 100644 index 0000000..9004c3c Binary files /dev/null and b/static/assets/img/learning/hero.jpg differ diff --git a/static/assets/img/learning/pic.jpg b/static/assets/img/learning/pic.jpg new file mode 100644 index 0000000..bc2556c Binary files /dev/null and b/static/assets/img/learning/pic.jpg differ diff --git a/static/assets/img/lottery/lottery.jpg b/static/assets/img/lottery/lottery.jpg new file mode 100644 index 0000000..673bd72 Binary files /dev/null and b/static/assets/img/lottery/lottery.jpg differ diff --git a/static/assets/img/lottery/lottery2.png b/static/assets/img/lottery/lottery2.png new file mode 100644 index 0000000..a15fc56 Binary files /dev/null and b/static/assets/img/lottery/lottery2.png differ diff --git a/static/assets/img/panatech-alt.png b/static/assets/img/panatech-alt.png new file mode 100644 index 0000000..616565e Binary files /dev/null and b/static/assets/img/panatech-alt.png differ diff --git a/static/assets/img/panatech-alt_backup.png b/static/assets/img/panatech-alt_backup.png new file mode 100644 index 0000000..39e820c Binary files /dev/null and b/static/assets/img/panatech-alt_backup.png differ diff --git a/static/assets/img/panatech-small.png b/static/assets/img/panatech-small.png new file mode 100644 index 0000000..7739130 Binary files /dev/null and b/static/assets/img/panatech-small.png differ diff --git a/static/assets/img/panatech-small_backup.png b/static/assets/img/panatech-small_backup.png new file mode 100644 index 0000000..e9f4a9d Binary files /dev/null and b/static/assets/img/panatech-small_backup.png differ diff --git a/static/assets/img/panatech.png b/static/assets/img/panatech.png new file mode 100644 index 0000000..e3e0445 Binary files /dev/null and b/static/assets/img/panatech.png differ diff --git a/static/assets/img/panatech_backup.png b/static/assets/img/panatech_backup.png new file mode 100644 index 0000000..fc57dd0 Binary files /dev/null and b/static/assets/img/panatech_backup.png differ diff --git a/static/assets/img/tipaxQR.jpg b/static/assets/img/tipaxQR.jpg new file mode 100644 index 0000000..d99f072 Binary files /dev/null and b/static/assets/img/tipaxQR.jpg differ diff --git a/static/assets/img/verity-alt.png b/static/assets/img/verity-alt.png new file mode 100644 index 0000000..4a0038e Binary files /dev/null and b/static/assets/img/verity-alt.png differ diff --git a/static/assets/img/verity-alt_backup.png b/static/assets/img/verity-alt_backup.png new file mode 100644 index 0000000..d41260e Binary files /dev/null and b/static/assets/img/verity-alt_backup.png differ diff --git a/static/assets/img/verity-small.png b/static/assets/img/verity-small.png new file mode 100644 index 0000000..e99b465 Binary files /dev/null and b/static/assets/img/verity-small.png differ diff --git a/static/assets/img/verity-small_backup.png b/static/assets/img/verity-small_backup.png new file mode 100644 index 0000000..b592d5d Binary files /dev/null and b/static/assets/img/verity-small_backup.png differ diff --git a/static/assets/img/verity.png b/static/assets/img/verity.png new file mode 100644 index 0000000..f0f4272 Binary files /dev/null and b/static/assets/img/verity.png differ diff --git a/static/assets/img/verity_backup.png b/static/assets/img/verity_backup.png new file mode 100644 index 0000000..066280c Binary files /dev/null and b/static/assets/img/verity_backup.png differ diff --git a/static/assets/img/warranty-terms/hero.jpg b/static/assets/img/warranty-terms/hero.jpg new file mode 100644 index 0000000..6ca5964 Binary files /dev/null and b/static/assets/img/warranty-terms/hero.jpg differ diff --git a/static/assets/img/warranty-terms/pic.jpg b/static/assets/img/warranty-terms/pic.jpg new file mode 100644 index 0000000..80f68ba Binary files /dev/null and b/static/assets/img/warranty-terms/pic.jpg differ diff --git a/static/assets/js/jQuery.print.min.js b/static/assets/js/jQuery.print.min.js new file mode 100644 index 0000000..811cb88 --- /dev/null +++ b/static/assets/js/jQuery.print.min.js @@ -0,0 +1,6 @@ +/* @license + * jQuery.print, version 1.6.0 + * (c) Sathvik Ponangi, Doers' Guild + * Licence: CC-By (http://creativecommons.org/licenses/by/3.0/) + *--------------------------------------------------------------------------*/ +!function(e){"use strict";function t(t,n,r){for(var o=e(t),i=o.clone(n,r),a=o.find("textarea").add(o.filter("textarea")),l=i.find("textarea").add(i.filter("textarea")),c=o.find("select").add(o.filter("select")),d=i.find("select").add(i.filter("select")),f=0,s=a.length;f").html(n)}return r}function r(t,n,r){var o=e.Deferred();try{var i=(t=t.contentWindow||t.contentDocument||t).document||t.contentDocument||t;r.doctype&&i.write(r.doctype),i.write(n),i.close();var a=!1,l=function(){if(!a){t.focus();try{t.document.execCommand("print",!1,null)||t.print(),e("body").focus()}catch(e){t.print()}t.close(),a=!0,o.resolve()}};e(t).on("load",l),setTimeout(l,r.timeout)}catch(e){o.reject(e)}return o}function o(e,t){return r(window.open(),e,t).always(function(){try{t.deferred.resolve()}catch(e){console.warn("Error notifying deferred",e)}})}function i(e){return!!("object"==typeof Node?e instanceof Node:e&&"object"==typeof e&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName)}e.print=e.fn.print=function(){var a,l,c=this;c instanceof e&&(c=c.get(0)),i(c)?(l=e(c),arguments.length>0&&(a=arguments[0])):arguments.length>0?i((l=e(arguments[0]))[0])?arguments.length>1&&(a=arguments[1]):(a=arguments[0],l=e("html")):l=e("html");var d={globalStyles:!0,mediaPrint:!1,stylesheet:null,noPrintSelector:".no-print",iframe:!0,append:null,prepend:null,manuallyCopyFormValues:!0,deferred:e.Deferred(),timeout:750,title:null,doctype:""};a=e.extend({},d,a||{});var f=e("");a.globalStyles?f=e("style, link, meta, base, title"):a.mediaPrint&&(f=e("link[media=print]")),a.stylesheet&&(f=e.merge(f,e('')));var s=t(l);if((s=e("").append(s)).find(a.noPrintSelector).remove(),s.append(t(f)),a.title){var p=e("title",s);0===p.length&&(p=e(""),s.append(p)),p.text(a.title)}s.append(n(a.append)),s.prepend(n(a.prepend)),a.manuallyCopyFormValues&&(s.find("input").each(function(){var t=e(this);t.is("[type='radio']")||t.is("[type='checkbox']")?t.prop("checked")&&t.attr("checked","checked"):t.attr("value",t.val())}),s.find("select").each(function(){e(this).find(":selected").attr("selected","selected")}),s.find("textarea").each(function(){var t=e(this);t.text(t.val())}));var u,h,m,y,v=s.html();try{a.deferred.notify("generated_markup",v,s)}catch(e){console.warn("Error notifying deferred",e)}if(s.remove(),a.iframe)try{u=v,m=e((h=a).iframe+""),0===(y=m.length)&&(m=e('<iframe height="0" width="0" border="0" wmode="Opaque"/>').prependTo("body").css({position:"absolute",top:-999,left:-999})),r(m.get(0),u,h).done(function(){setTimeout(function(){0===y&&m.remove()},1e3)}).fail(function(e){console.error("Failed to print from iframe",e),o(u,h)}).always(function(){try{h.deferred.resolve()}catch(e){console.warn("Error notifying deferred",e)}})}catch(e){console.error("Failed to print from iframe",e.stack,e.message),o(v,a)}else o(v,a);return this}}(jQuery); \ No newline at end of file diff --git a/static/bigIcon.png b/static/bigIcon.png new file mode 100644 index 0000000..3b04ffc Binary files /dev/null and b/static/bigIcon.png differ diff --git a/store/admin.js b/store/admin.js new file mode 100644 index 0000000..805979e --- /dev/null +++ b/store/admin.js @@ -0,0 +1,31 @@ +export const state = () => ({ + sidebarShow: 'responsive', + sidebarMinimize: false, + adminWS: false, + unreadCuMsgs: 0, + unreadTickets: 0, + newCustomers: 0, + newRepresentations: 0, + newPieceRequests: 0, + newOldPieceRequests: 0, + newBufferRequests: 0, + newGuaranteeReports: 0, + verityProducts: [], + panatechProducts: [], + iranProvinces: [], + iranCities: [] +}) + +export const mutations = { + toggleSidebarDesktop(state) { + const sidebarOpened = [true, 'responsive'].includes(state.sidebarShow) + state.sidebarShow = sidebarOpened ? false : 'responsive' + }, + toggleSidebarMobile(state) { + const sidebarClosed = [false, 'responsive'].includes(state.sidebarShow) + state.sidebarShow = sidebarClosed ? true : 'responsive' + }, + set(state, [variable, value]) { + state[variable] = value + } +} diff --git a/store/front.js b/store/front.js new file mode 100644 index 0000000..9e8e8cb --- /dev/null +++ b/store/front.js @@ -0,0 +1,108 @@ +export const state = () => ({ + mobileMenu: false, + // websockets statuses + userWS: false, + agentWS: false, + // notifications count + unreadTickets: 0, + agentInbox: 0, + draftsCount: 0, + // announcements + newUserAnnosCount: 0, + newAgentAnnosCount: 0, + userAnnouncements: [], + agentAnnouncements: [], + // arpa products + verityProducts: [], + panatechProducts: [], + // agents + agentAssetCategories: [ + { + title: 'مدارک عضویت در اتحادیه صنفی:', + description: 'عضویت در اتحادیه صنفی مرتبط یا نمایندگی مجاز خدمات یا ارائه جواز کسب.', + fieldName: 'tradeUnion' + }, + { + title: 'تخصص:', + description: 'شایستگی ، حسن شهرت و تجربه کافی در ارائه خدمات پس از فروش کاالی مرتبط.', + fieldName: 'expertise' + }, + { + title: 'مالکیت:', + description: 'سرقفلی یا اجاره نامه معتبر مغازه یا دفترکار در شهر.', + fieldName: 'ownership' + }, + { + title: 'تعمیرگاه مناسب:', + description: 'دارابودن امکانات و تجهیزات سرویس، تعمیر و نگهداری دستگاه های مرتبط.', + fieldName: 'repairShop' + }, + { + title: 'نیروی کار:', + description: 'داشتن کارمند اداری مسلط به امور اداری و کامپیوتر.', + fieldName: 'itEmployee' + }, + { + title: 'کارشناس تعمیر:', + description: 'داشتن کارشناس فنی مجرب تعمیر و سرویس دستگاه های مرتبط.', + fieldName: 'itExpert' + }, + { + title: 'تضامین مالی:', + description: 'رائه تضامین مالی مورد نظر شرکت آسان سرویس. ', + fieldName: 'financialGuarantees' + } + ], + surveyOptions: [ + { + title: 'میزان رضایت شما از محصول خریداری شده از شرکت آسان سرویس چقدر است؟', + fieldName: 'purchasedProduct' + }, + { + title: 'میزان رضایت شما از سهولت انجام فرآیند ثبت گارانتی و پیگیری محصوالت در سایت آسان سرویس به چه اندازه است؟', + fieldName: 'guaranteeWorkFlow' + }, + { + title: 'از پاسخگویی پرسنل واحد گارانتی آسان سرویس تا چه میزان رضایت دارید؟', + fieldName: 'employeeResponsibility' + }, + { + title: 'از کیفیت خدماتی که دریافت کردید تا چه میزان رضایت دارید؟', + fieldName: 'serviceQuality' + }, + { + title: 'میزان رضایت شما از مدت زمان انجام کارتان تا چه میزان است؟', + fieldName: 'serviceTime' + }, + { + title: 'چنانچه کالای شما جز کالاهای تعمیری میباشد، میزان رضایت شما از کیفیت تعمیرات چقدر است؟', + fieldName: 'repairQuality' + }, + { + title: 'میزان رضایت شما از اجرت تعمیرات و یا مابه الفتاوت پرداختی کالای تعویضی چقدر است؟', + fieldName: 'coast' + } + ], + surveyOptionsValues: new Map().set(1, 'خیلی کم').set(2, 'کم').set(3, 'متوسط').set(4, 'زیاد').set(5, 'خیلی زیاد') +}) + +export const getters = { + agentAssetCategories(state) { + return state.agentAssetCategories + }, + surveyOptions(state) { + return state.surveyOptions + }, + surveyOptionsValues(state) { + return state.surveyOptionsValues + } +} + +export const mutations = { + toggleMobileMenu(state) { + state.mobileMenu = !state.mobileMenu + }, + set(state, [param, payload]) { + state[param] = payload + } +} diff --git a/utils/adminPanelIcons.js b/utils/adminPanelIcons.js new file mode 100644 index 0000000..75e4f04 --- /dev/null +++ b/utils/adminPanelIcons.js @@ -0,0 +1,163 @@ +import { + cibFacebook, + cibTwitter, + cibLinkedin, + cibFlickr, + cibTumblr, + cibXing, + cibGithub, + cibStackoverflow, + cibYoutube, + cibDribbble, + cibInstagram, + cibPinterest, + cibVk, + cibYahoo, + cibBehance, + cibReddit, + cibVimeo, + cibCcMastercard, + cibCcVisa, + cibStripe, + cibPaypal, + cibGooglePay, + cibCcAmex, + cifUs, + cifBr, + cifIn, + cifFr, + cifEs, + cifPl, + cilArrowRight, + cilBan, + cilBasket, + cilBell, + cilCalculator, + cilCalendar, + cilCloudDownload, + cilChartPie, + cilCheck, + cilChevronBottom, + cilChevronTop, + cilCheckCircle, + cilCommentSquare, + cilCursor, + cilDrop, + cilDollar, + cilEnvelopeClosed, + cilEnvelopeOpen, + cilEuro, + cilGlobeAlt, + cilGrid, + cilFile, + cilJustifyCenter, + cilLaptop, + cilLayers, + cilLightbulb, + cilList, + cilLocationPin, + cilLockLocked, + cilMagnifyingGlass, + cilMoon, + cilOptions, + cilPencil, + cilPeople, + cilPuzzle, + cilSettings, + cilShieldAlt, + cilSpeech, + cilSpeedometer, + cilStar, + cilTask, + cilUser, + cilUserFemale, + cilUserFollow, + cilXCircle +} from '@coreui/icons' + +import { logo } from './adminPanelLogo' + +export const iconsSet = Object.assign( + {}, + { logo }, + { + cilArrowRight, + cilBan, + cilBasket, + cilBell, + cilCalculator, + cilCalendar, + cilCloudDownload, + cilChartPie, + cilCheck, + cilChevronBottom, + cilChevronTop, + cilCheckCircle, + cilCommentSquare, + cilCursor, + cilDrop, + cilDollar, + cilEnvelopeClosed, + cilEnvelopeOpen, + cilEuro, + cilGlobeAlt, + cilGrid, + cilFile, + cilJustifyCenter, + cilLaptop, + cilLayers, + cilLightbulb, + cilList, + cilLocationPin, + cilLockLocked, + cilMagnifyingGlass, + cilMoon, + cilOptions, + cilPencil, + cilPeople, + cilPuzzle, + cilSettings, + cilShieldAlt, + cilSpeech, + cilSpeedometer, + cilStar, + cilTask, + cilUser, + cilUserFemale, + cilUserFollow, + cilXCircle + }, + { + cifUs, + cifBr, + cifIn, + cifFr, + cifEs, + cifPl + }, + { + cibFacebook, + cibTwitter, + cibLinkedin, + cibFlickr, + cibTumblr, + cibXing, + cibGithub, + cibStackoverflow, + cibYoutube, + cibDribbble, + cibInstagram, + cibPinterest, + cibVk, + cibYahoo, + cibBehance, + cibReddit, + cibVimeo, + cibCcMastercard, + cibCcVisa, + cibStripe, + cibPaypal, + cibGooglePay, + cibCcAmex + } +) diff --git a/utils/adminPanelLogo.js b/utils/adminPanelLogo.js new file mode 100644 index 0000000..3a0d4da --- /dev/null +++ b/utils/adminPanelLogo.js @@ -0,0 +1,32 @@ +// Example of SVG converted to js array, so it can be used with CIcon. +// the first argument is two last values of svg viewBox, +// the second argument is the SVG content stripped of SVG tags +export const logo = [ + '556 134', + ` + <g> + <g style="fill:#1bbd93;"> + <path d="M347.9818,90.0869l-11.84-43.52-.0644-.1924q0-.5112.6406-.5117h1.2793a.66.66,0,0,1,.7051.5762l10.623,39.68c.042.0859.0859.1279.1289.1279.041,0,.084-.042.127-.1279l10.625-39.68a.657.657,0,0,1,.7031-.5762h1.2168a.54.54,0,0,1,.5762.7041l-11.9043,43.52a.6584.6584,0,0,1-.7041.5761h-1.4082A.6577.6577,0,0,1,347.9818,90.0869Z"/> + <path d="M382.2786,89.5751a10.9023,10.9023,0,0,1-4.3515-4.5439,14.4586,14.4586,0,0,1-1.5362-6.7842V46.5029a.5656.5656,0,0,1,.64-.64h1.2168a.5659.5659,0,0,1,.64.64v32a10.5488,10.5488,0,0,0,2.72,7.5527,10.36,10.36,0,0,0,14.3359,0,10.5493,10.5493,0,0,0,2.7207-7.5527v-32a.5655.5655,0,0,1,.64-.64h1.2159a.5666.5666,0,0,1,.6406.64V78.247a13.01,13.01,0,0,1-3.3926,9.376,11.8974,11.8974,0,0,1-9.0234,3.5527A12.8481,12.8481,0,0,1,382.2786,89.5751Z"/> + <path d="M439.5843,48.1035H419.5521a.2263.2263,0,0,0-.2559.2558V66.8554a.2259.2259,0,0,0,.2559.2559h13.8242a.5665.5665,0,0,1,.6406.64v.96a.5665.5665,0,0,1-.6406.6406H419.5521a.2263.2263,0,0,0-.2559.2559v18.56a.2259.2259,0,0,0,.2559.2559h20.0322a.5665.5665,0,0,1,.64.6406v.96a.5655.5655,0,0,1-.64.64H417.4407a.5654.5654,0,0,1-.6406-.64v-43.52a.5658.5658,0,0,1,.6406-.64h22.1436a.5659.5659,0,0,1,.64.64v.96A.5658.5658,0,0,1,439.5843,48.1035Z"/> + <path d="M454.5921,89.5117a2.8385,2.8385,0,0,1-.8-2.0489,2.9193,2.9193,0,0,1,.8-2.1113,2.7518,2.7518,0,0,1,2.0791-.832,2.8465,2.8465,0,0,1,2.9443,2.9433,2.7561,2.7561,0,0,1-.832,2.08,2.9208,2.9208,0,0,1-2.1123.8008A2.7521,2.7521,0,0,1,454.5921,89.5117Z"/> + <path d="M474.931,88.0078a11.3087,11.3087,0,0,1-3.2-8.4161v-5.44a.5655.5655,0,0,1,.64-.64h1.2158a.5662.5662,0,0,1,.6407.64v5.5039a9.1421,9.1421,0,0,0,2.5283,6.72,8.9734,8.9734,0,0,0,6.6875,2.5606,8.7916,8.7916,0,0,0,9.28-9.28V46.5029a.5655.5655,0,0,1,.64-.64h1.2158a.5656.5656,0,0,1,.64.64V79.5917a11.2541,11.2541,0,0,1-3.2315,8.4161,13.0621,13.0621,0,0,1-17.0556,0Z"/> + <path d="M512.8753,88.1035a10.4847,10.4847,0,0,1-3.36-8.128v-1.792a.5665.5665,0,0,1,.6406-.6406h1.0879a.5666.5666,0,0,1,.64.6406v1.6a8.5461,8.5461,0,0,0,2.752,6.6563,10.5361,10.5361,0,0,0,7.36,2.4961,9.8741,9.8741,0,0,0,6.9766-2.3682,8.2188,8.2188,0,0,0,2.56-6.3359,8.3952,8.3952,0,0,0-1.12-4.416,11.3752,11.3752,0,0,0-3.3281-3.3926,71.6866,71.6866,0,0,0-6.1758-3.7119,71.0151,71.0151,0,0,1-6.24-3.84,12.1824,12.1824,0,0,1-3.4238-3.68,10.2659,10.2659,0,0,1-1.28-5.3437,9.86,9.86,0,0,1,3.0723-7.7441,12.0126,12.0126,0,0,1,8.3193-2.752q5.6969,0,8.9609,3.1035a10.8247,10.8247,0,0,1,3.2637,8.2246v1.6a.5658.5658,0,0,1-.6406.64h-1.1514a.5651.5651,0,0,1-.64-.64V56.8076a8.8643,8.8643,0,0,0-2.6241-6.6885,9.9936,9.9936,0,0,0-7.2324-2.5274,9.37,9.37,0,0,0-6.5283,2.1436,7.8253,7.8253,0,0,0-2.3672,6.1123,7.8088,7.8088,0,0,0,1.0235,4.16,10.3978,10.3978,0,0,0,3.0078,3.039,63.0249,63.0249,0,0,0,5.9521,3.4883,70.7955,70.7955,0,0,1,6.72,4.2559,13.4613,13.4613,0,0,1,3.6485,3.9365,10.044,10.044,0,0,1,1.28,5.1836,10.7185,10.7185,0,0,1-3.2647,8.1924q-3.2637,3.0717-8.832,3.0722Q516.2342,91.1757,512.8753,88.1035Z"/> + </g> + <g style="fill:currentColor;"> + <g> + <path d="M99.367,36.0577l-39-22.5167a12,12,0,0,0-12,0l-39,22.5166a12.0337,12.0337,0,0,0-6,10.3924V91.4833a12.0331,12.0331,0,0,0,6,10.3923l39,22.5167a12,12,0,0,0,12,0l39-22.5167a12.0333,12.0333,0,0,0,6-10.3923V46.45A12.0336,12.0336,0,0,0,99.367,36.0577Zm-2,55.4256a4,4,0,0,1-2,3.4641l-39,22.5167a4.0006,4.0006,0,0,1-4,0l-39-22.5167a4,4,0,0,1-2-3.4641V46.45a4,4,0,0,1,2-3.4642l39-22.5166a4,4,0,0,1,4,0l39,22.5166a4,4,0,0,1,2,3.4642Z"/> + <path d="M77.3886,82.0046h-2.866a4.0007,4.0007,0,0,0-1.9247.4934L55.3172,91.9833,35.367,80.4648V57.4872l19.95-11.5185L72.606,55.4236a3.9993,3.9993,0,0,0,1.9192.4906h2.8632a2,2,0,0,0,2-2V51.2024a2,2,0,0,0-1.04-1.7547L59.16,38.9521a8.0389,8.0389,0,0,0-7.8427.09L31.3665,50.56a8.0245,8.0245,0,0,0-3.9995,6.9287v22.976a8,8,0,0,0,4,6.9283l19.95,11.5186a8.0427,8.0427,0,0,0,7.8432.0879l19.19-10.5312a2,2,0,0,0,1.0378-1.7533v-2.71A2,2,0,0,0,77.3886,82.0046Z"/> + </g> + <g> + <path d="M172.1117,45.3618a15.0166,15.0166,0,0,0-15,14.9995V77.6387a15,15,0,0,0,30,0V60.3613A15.0167,15.0167,0,0,0,172.1117,45.3618Zm7,32.2769a7,7,0,0,1-14,0V60.3613a7,7,0,0,1,14,0Z"/> + <path d="M135.4458,53.4211a7.01,7.01,0,0,1,7.8681,6.0752.9892.9892,0,0,0,.9842.865h6.03a1.0108,1.0108,0,0,0,.9987-1.0971,15.0182,15.0182,0,0,0-15.7161-13.8837A15.2881,15.2881,0,0,0,121.367,60.7968V77.2037A15.288,15.288,0,0,0,135.6112,92.62a15.0182,15.0182,0,0,0,15.7161-13.8842,1.0107,1.0107,0,0,0-.9987-1.0971h-6.03a.9892.9892,0,0,0-.9842.865,7.0106,7.0106,0,0,1-7.868,6.0757,7.1642,7.1642,0,0,1-6.0789-7.1849V60.6057A7.1638,7.1638,0,0,1,135.4458,53.4211Z"/> + <path d="M218.2891,72.9277a12.1584,12.1584,0,0,0,7.1843-11.0771V58.1494A12.1494,12.1494,0,0,0,213.324,46H196.367a1,1,0,0,0-1,1V91a1,1,0,0,0,1,1h6a1,1,0,0,0,1-1V74h6.6215l7.9154,17.4138a1,1,0,0,0,.91.5862h6.5912a1,1,0,0,0,.91-1.4138Zm-.8157-11.0771A4.1538,4.1538,0,0,1,213.3245,66h-9.8511V54h9.8511a4.1538,4.1538,0,0,1,4.1489,4.1494Z"/> + <path d="M260.367,46h-26a1,1,0,0,0-1,1V91a1,1,0,0,0,1,1h26a1,1,0,0,0,1-1V85a1,1,0,0,0-1-1h-19V72h13a1,1,0,0,0,1-1V65a1,1,0,0,0-1-1h-13V54h19a1,1,0,0,0,1-1V47A1,1,0,0,0,260.367,46Z"/> + <path d="M298.367,46h-6a1,1,0,0,0-1,1V69.6475a7.0066,7.0066,0,1,1-14,0V47a1,1,0,0,0-1-1h-6a1,1,0,0,0-1,1V69.6475a15.0031,15.0031,0,1,0,30,0V47A1,1,0,0,0,298.367,46Z"/> + <rect x="307.367" y="46" width="8" height="38" rx="1"/> + </g> + </g> + </g> +` +]