commit aba62601548fe54ff0560962ef4dbd768153f898
Author: yujialong <479214531@qq.com>
Date:   Tue Aug 10 17:26:09 2021 +0800

    重构完成

diff --git a/.browserslistrc b/.browserslistrc
new file mode 100644
index 0000000..9dee646
--- /dev/null
+++ b/.browserslistrc
@@ -0,0 +1,3 @@
+> 1%
+last 2 versions
+not ie <= 8
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1c3aae3
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,22 @@
+.DS_Store
+node_modules
+/dist
+example.html
+favicon.ico
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw*
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 0000000..c5f454b
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,6 @@
+{
+	"tabWidth": 4,
+	"singleQuote": true,
+	"trailingComma": "none",
+	"printWidth": 140
+}
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..1ef7d3e
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2016-2019 vue-manage-system
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..57fdcd9
--- /dev/null
+++ b/README.md
@@ -0,0 +1,23 @@
+# 该项目是前端项目基础模板
+## 拉取该项目就可以直接上手开发.
+
+---
+
+### 注意事项:
+1. api里面存放接口地址
+2. assets里面存放静态文件,注意图片跟svg最好分开,方便后期管理
+3. components存放公共组件
+4. layouts存放页面布局组件,注意导航跟头部是分开的,放在一起太臃肿
+5. libs存放工具包.封装了cookie,localStorate,sessionStorage的增删改查; auth是用来生成角色权限里控制的按钮,生成后添加到store里面; route是做动态路由的,同时把生成的路由集合添加到store里面
+6. mixins可以自定义mixin
+7. pages存放页面,一个模块为一个文件夹,默认有个list文件夹,默认跳转到list,要添加子模块的话直接建list的同级文件夹,里面统一命名index.vue
+8. plugins里面aliplayer是阿里云播放器,按需引用; auth是按钮级别的鉴权; filters可以自定义filter; requests是全局请求配置文件; throttle为防抖
+9. router为路由,跟pages一样,一个模块为一个文件夹,存放在modules里面; permission为路由全局控制; route里引用modules里面定义的路由模块,每加一个模块就要在这里引用
+10. store存放store模块,直接在modules里定义文件就会自动引用,一个模块为一个文件夹,模块之间勿混淆使用
+11. styles存放全局scss. default里设置项目主题色; font存放字体文件; layout存放布局样式; lib里面有定义工具class,可以直接引用里面的class; pages为页面的公用样式; common为全局公共样式; var可以定义mixin和全局变量
+
+---
+
+#### 全局配置都放在setting.js里面,项目参数,比如默认密码,平台id,都放在这里,页面里直接引入该文件即可
+
+#### vue.config.js里要定义固定端口,不然项目启动多了会乱,每开一个项目就开一个新的端口,每个项目端口不要冲突
\ No newline at end of file
diff --git a/babel.config.js b/babel.config.js
new file mode 100644
index 0000000..ba17966
--- /dev/null
+++ b/babel.config.js
@@ -0,0 +1,5 @@
+module.exports = {
+  presets: [
+    '@vue/app'
+  ]
+}
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..38de21f
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,13615 @@
+{
+  "name": "vue-manage-system",
+  "version": "4.2.0",
+  "lockfileVersion": 1,
+  "requires": true,
+  "dependencies": {
+    "@babel/code-frame": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
+      "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
+      "dev": true,
+      "requires": {
+        "@babel/highlight": "^7.0.0"
+      }
+    },
+    "@babel/core": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.4.tgz",
+      "integrity": "sha512-+bYbx56j4nYBmpsWtnPUsKW3NdnYxbqyfrP2w9wILBuHzdfIKz9prieZK0DFPyIzkjYVUe4QkusGL07r5pXznQ==",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "^7.5.5",
+        "@babel/generator": "^7.7.4",
+        "@babel/helpers": "^7.7.4",
+        "@babel/parser": "^7.7.4",
+        "@babel/template": "^7.7.4",
+        "@babel/traverse": "^7.7.4",
+        "@babel/types": "^7.7.4",
+        "convert-source-map": "^1.7.0",
+        "debug": "^4.1.0",
+        "json5": "^2.1.0",
+        "lodash": "^4.17.13",
+        "resolve": "^1.3.2",
+        "semver": "^5.4.1",
+        "source-map": "^0.5.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "4.1.1",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+          "dev": true
+        }
+      }
+    },
+    "@babel/generator": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.4.tgz",
+      "integrity": "sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.7.4",
+        "jsesc": "^2.5.1",
+        "lodash": "^4.17.13",
+        "source-map": "^0.5.0"
+      }
+    },
+    "@babel/helper-annotate-as-pure": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.4.tgz",
+      "integrity": "sha512-2BQmQgECKzYKFPpiycoF9tlb5HA4lrVyAmLLVK177EcQAqjVLciUb2/R+n1boQ9y5ENV3uz2ZqiNw7QMBBw1Og==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.7.4"
+      }
+    },
+    "@babel/helper-builder-binary-assignment-operator-visitor": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.4.tgz",
+      "integrity": "sha512-Biq/d/WtvfftWZ9Uf39hbPBYDUo986m5Bb4zhkeYDGUllF43D+nUe5M6Vuo6/8JDK/0YX/uBdeoQpyaNhNugZQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-explode-assignable-expression": "^7.7.4",
+        "@babel/types": "^7.7.4"
+      }
+    },
+    "@babel/helper-call-delegate": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.7.4.tgz",
+      "integrity": "sha512-8JH9/B7J7tCYJ2PpWVpw9JhPuEVHztagNVuQAFBVFYluRMlpG7F1CgKEgGeL6KFqcsIa92ZYVj6DSc0XwmN1ZA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-hoist-variables": "^7.7.4",
+        "@babel/traverse": "^7.7.4",
+        "@babel/types": "^7.7.4"
+      }
+    },
+    "@babel/helper-create-class-features-plugin": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.7.4.tgz",
+      "integrity": "sha512-l+OnKACG4uiDHQ/aJT8dwpR+LhCJALxL0mJ6nzjB25e5IPwqV1VOsY7ah6UB1DG+VOXAIMtuC54rFJGiHkxjgA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-function-name": "^7.7.4",
+        "@babel/helper-member-expression-to-functions": "^7.7.4",
+        "@babel/helper-optimise-call-expression": "^7.7.4",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-replace-supers": "^7.7.4",
+        "@babel/helper-split-export-declaration": "^7.7.4"
+      }
+    },
+    "@babel/helper-create-regexp-features-plugin": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz",
+      "integrity": "sha512-Mt+jBKaxL0zfOIWrfQpnfYCN7/rS6GKx6CCCfuoqVVd+17R8zNDlzVYmIi9qyb2wOk002NsmSTDymkIygDUH7A==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-regex": "^7.4.4",
+        "regexpu-core": "^4.6.0"
+      }
+    },
+    "@babel/helper-define-map": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.7.4.tgz",
+      "integrity": "sha512-v5LorqOa0nVQUvAUTUF3KPastvUt/HzByXNamKQ6RdJRTV7j8rLL+WB5C/MzzWAwOomxDhYFb1wLLxHqox86lg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-function-name": "^7.7.4",
+        "@babel/types": "^7.7.4",
+        "lodash": "^4.17.13"
+      }
+    },
+    "@babel/helper-explode-assignable-expression": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.4.tgz",
+      "integrity": "sha512-2/SicuFrNSXsZNBxe5UGdLr+HZg+raWBLE9vC98bdYOKX/U6PY0mdGlYUJdtTDPSU0Lw0PNbKKDpwYHJLn2jLg==",
+      "dev": true,
+      "requires": {
+        "@babel/traverse": "^7.7.4",
+        "@babel/types": "^7.7.4"
+      }
+    },
+    "@babel/helper-function-name": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz",
+      "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-get-function-arity": "^7.7.4",
+        "@babel/template": "^7.7.4",
+        "@babel/types": "^7.7.4"
+      }
+    },
+    "@babel/helper-get-function-arity": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz",
+      "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.7.4"
+      }
+    },
+    "@babel/helper-hoist-variables": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.4.tgz",
+      "integrity": "sha512-wQC4xyvc1Jo/FnLirL6CEgPgPCa8M74tOdjWpRhQYapz5JC7u3NYU1zCVoVAGCE3EaIP9T1A3iW0WLJ+reZlpQ==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.7.4"
+      }
+    },
+    "@babel/helper-member-expression-to-functions": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.4.tgz",
+      "integrity": "sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.7.4"
+      }
+    },
+    "@babel/helper-module-imports": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz",
+      "integrity": "sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.7.4"
+      }
+    },
+    "@babel/helper-module-transforms": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.7.4.tgz",
+      "integrity": "sha512-ehGBu4mXrhs0FxAqN8tWkzF8GSIGAiEumu4ONZ/hD9M88uHcD+Yu2ttKfOCgwzoesJOJrtQh7trI5YPbRtMmnA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "^7.7.4",
+        "@babel/helper-simple-access": "^7.7.4",
+        "@babel/helper-split-export-declaration": "^7.7.4",
+        "@babel/template": "^7.7.4",
+        "@babel/types": "^7.7.4",
+        "lodash": "^4.17.13"
+      }
+    },
+    "@babel/helper-optimise-call-expression": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.4.tgz",
+      "integrity": "sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.7.4"
+      }
+    },
+    "@babel/helper-plugin-utils": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz",
+      "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==",
+      "dev": true
+    },
+    "@babel/helper-regex": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz",
+      "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==",
+      "dev": true,
+      "requires": {
+        "lodash": "^4.17.13"
+      }
+    },
+    "@babel/helper-remap-async-to-generator": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.4.tgz",
+      "integrity": "sha512-Sk4xmtVdM9sA/jCI80f+KS+Md+ZHIpjuqmYPk1M7F/upHou5e4ReYmExAiu6PVe65BhJPZA2CY9x9k4BqE5klw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.7.4",
+        "@babel/helper-wrap-function": "^7.7.4",
+        "@babel/template": "^7.7.4",
+        "@babel/traverse": "^7.7.4",
+        "@babel/types": "^7.7.4"
+      }
+    },
+    "@babel/helper-replace-supers": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.7.4.tgz",
+      "integrity": "sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-member-expression-to-functions": "^7.7.4",
+        "@babel/helper-optimise-call-expression": "^7.7.4",
+        "@babel/traverse": "^7.7.4",
+        "@babel/types": "^7.7.4"
+      }
+    },
+    "@babel/helper-simple-access": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.7.4.tgz",
+      "integrity": "sha512-zK7THeEXfan7UlWsG2A6CI/L9jVnI5+xxKZOdej39Y0YtDYKx9raHk5F2EtK9K8DHRTihYwg20ADt9S36GR78A==",
+      "dev": true,
+      "requires": {
+        "@babel/template": "^7.7.4",
+        "@babel/types": "^7.7.4"
+      }
+    },
+    "@babel/helper-split-export-declaration": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz",
+      "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.7.4"
+      }
+    },
+    "@babel/helper-wrap-function": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.7.4.tgz",
+      "integrity": "sha512-VsfzZt6wmsocOaVU0OokwrIytHND55yvyT4BPB9AIIgwr8+x7617hetdJTsuGwygN5RC6mxA9EJztTjuwm2ofg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-function-name": "^7.7.4",
+        "@babel/template": "^7.7.4",
+        "@babel/traverse": "^7.7.4",
+        "@babel/types": "^7.7.4"
+      }
+    },
+    "@babel/helpers": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.7.4.tgz",
+      "integrity": "sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg==",
+      "dev": true,
+      "requires": {
+        "@babel/template": "^7.7.4",
+        "@babel/traverse": "^7.7.4",
+        "@babel/types": "^7.7.4"
+      }
+    },
+    "@babel/highlight": {
+      "version": "7.5.0",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
+      "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.0.0",
+        "esutils": "^2.0.2",
+        "js-tokens": "^4.0.0"
+      }
+    },
+    "@babel/parser": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.4.tgz",
+      "integrity": "sha512-jIwvLO0zCL+O/LmEJQjWA75MQTWwx3c3u2JOTDK5D3/9egrWRRA0/0hk9XXywYnXZVVpzrBYeIQTmhwUaePI9g==",
+      "dev": true
+    },
+    "@babel/plugin-proposal-async-generator-functions": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.4.tgz",
+      "integrity": "sha512-1ypyZvGRXriY/QP668+s8sFr2mqinhkRDMPSQLNghCQE+GAkFtp+wkHVvg2+Hdki8gwP+NFzJBJ/N1BfzCCDEw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-remap-async-to-generator": "^7.7.4",
+        "@babel/plugin-syntax-async-generators": "^7.7.4"
+      }
+    },
+    "@babel/plugin-proposal-class-properties": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.7.4.tgz",
+      "integrity": "sha512-EcuXeV4Hv1X3+Q1TsuOmyyxeTRiSqurGJ26+I/FW1WbymmRRapVORm6x1Zl3iDIHyRxEs+VXWp6qnlcfcJSbbw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-class-features-plugin": "^7.7.4",
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-proposal-decorators": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.7.4.tgz",
+      "integrity": "sha512-GftcVDcLCwVdzKmwOBDjATd548+IE+mBo7ttgatqNDR7VG7GqIuZPtRWlMLHbhTXhcnFZiGER8iIYl1n/imtsg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-class-features-plugin": "^7.7.4",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-syntax-decorators": "^7.7.4"
+      }
+    },
+    "@babel/plugin-proposal-json-strings": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.7.4.tgz",
+      "integrity": "sha512-wQvt3akcBTfLU/wYoqm/ws7YOAQKu8EVJEvHip/mzkNtjaclQoCCIqKXFP5/eyfnfbQCDV3OLRIK3mIVyXuZlw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-syntax-json-strings": "^7.7.4"
+      }
+    },
+    "@babel/plugin-proposal-object-rest-spread": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.4.tgz",
+      "integrity": "sha512-rnpnZR3/iWKmiQyJ3LKJpSwLDcX/nSXhdLk4Aq/tXOApIvyu7qoabrige0ylsAJffaUC51WiBu209Q0U+86OWQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-syntax-object-rest-spread": "^7.7.4"
+      }
+    },
+    "@babel/plugin-proposal-optional-catch-binding": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.7.4.tgz",
+      "integrity": "sha512-DyM7U2bnsQerCQ+sejcTNZh8KQEUuC3ufzdnVnSiUv/qoGJp2Z3hanKL18KDhsBT5Wj6a7CMT5mdyCNJsEaA9w==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-syntax-optional-catch-binding": "^7.7.4"
+      }
+    },
+    "@babel/plugin-proposal-unicode-property-regex": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.4.tgz",
+      "integrity": "sha512-cHgqHgYvffluZk85dJ02vloErm3Y6xtH+2noOBOJ2kXOJH3aVCDnj5eR/lVNlTnYu4hndAPJD3rTFjW3qee0PA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-regexp-features-plugin": "^7.7.4",
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-syntax-async-generators": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.7.4.tgz",
+      "integrity": "sha512-Li4+EjSpBgxcsmeEF8IFcfV/+yJGxHXDirDkEoyFjumuwbmfCVHUt0HuowD/iGM7OhIRyXJH9YXxqiH6N815+g==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-syntax-decorators": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.7.4.tgz",
+      "integrity": "sha512-0oNLWNH4k5ZbBVfAwiTU53rKFWIeTh6ZlaWOXWJc4ywxs0tjz5fc3uZ6jKAnZSxN98eXVgg7bJIuzjX+3SXY+A==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-syntax-dynamic-import": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz",
+      "integrity": "sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-syntax-json-strings": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.7.4.tgz",
+      "integrity": "sha512-QpGupahTQW1mHRXddMG5srgpHWqRLwJnJZKXTigB9RPFCCGbDGCgBeM/iC82ICXp414WeYx/tD54w7M2qRqTMg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-syntax-jsx": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.7.4.tgz",
+      "integrity": "sha512-wuy6fiMe9y7HeZBWXYCGt2RGxZOj0BImZ9EyXJVnVGBKO/Br592rbR3rtIQn0eQhAk9vqaKP5n8tVqEFBQMfLg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-syntax-object-rest-spread": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.7.4.tgz",
+      "integrity": "sha512-mObR+r+KZq0XhRVS2BrBKBpr5jqrqzlPvS9C9vuOf5ilSwzloAl7RPWLrgKdWS6IreaVrjHxTjtyqFiOisaCwg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-syntax-optional-catch-binding": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.7.4.tgz",
+      "integrity": "sha512-4ZSuzWgFxqHRE31Glu+fEr/MirNZOMYmD/0BhBWyLyOOQz/gTAl7QmWm2hX1QxEIXsr2vkdlwxIzTyiYRC4xcQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-arrow-functions": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz",
+      "integrity": "sha512-zUXy3e8jBNPiffmqkHRNDdZM2r8DWhCB7HhcoyZjiK1TxYEluLHAvQuYnTT+ARqRpabWqy/NHkO6e3MsYB5YfA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-async-to-generator": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.4.tgz",
+      "integrity": "sha512-zpUTZphp5nHokuy8yLlyafxCJ0rSlFoSHypTUWgpdwoDXWQcseaect7cJ8Ppk6nunOM6+5rPMkod4OYKPR5MUg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "^7.7.4",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-remap-async-to-generator": "^7.7.4"
+      }
+    },
+    "@babel/plugin-transform-block-scoped-functions": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.7.4.tgz",
+      "integrity": "sha512-kqtQzwtKcpPclHYjLK//3lH8OFsCDuDJBaFhVwf8kqdnF6MN4l618UDlcA7TfRs3FayrHj+svYnSX8MC9zmUyQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-block-scoping": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.7.4.tgz",
+      "integrity": "sha512-2VBe9u0G+fDt9B5OV5DQH4KBf5DoiNkwFKOz0TCvBWvdAN2rOykCTkrL+jTLxfCAm76l9Qo5OqL7HBOx2dWggg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "lodash": "^4.17.13"
+      }
+    },
+    "@babel/plugin-transform-classes": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.4.tgz",
+      "integrity": "sha512-sK1mjWat7K+buWRuImEzjNf68qrKcrddtpQo3swi9j7dUcG6y6R6+Di039QN2bD1dykeswlagupEmpOatFHHUg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.7.4",
+        "@babel/helper-define-map": "^7.7.4",
+        "@babel/helper-function-name": "^7.7.4",
+        "@babel/helper-optimise-call-expression": "^7.7.4",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-replace-supers": "^7.7.4",
+        "@babel/helper-split-export-declaration": "^7.7.4",
+        "globals": "^11.1.0"
+      }
+    },
+    "@babel/plugin-transform-computed-properties": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.7.4.tgz",
+      "integrity": "sha512-bSNsOsZnlpLLyQew35rl4Fma3yKWqK3ImWMSC/Nc+6nGjC9s5NFWAer1YQ899/6s9HxO2zQC1WoFNfkOqRkqRQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-destructuring": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.7.4.tgz",
+      "integrity": "sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-dotall-regex": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.4.tgz",
+      "integrity": "sha512-mk0cH1zyMa/XHeb6LOTXTbG7uIJ8Rrjlzu91pUx/KS3JpcgaTDwMS8kM+ar8SLOvlL2Lofi4CGBAjCo3a2x+lw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-regexp-features-plugin": "^7.7.4",
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-duplicate-keys": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.7.4.tgz",
+      "integrity": "sha512-g1y4/G6xGWMD85Tlft5XedGaZBCIVN+/P0bs6eabmcPP9egFleMAo65OOjlhcz1njpwagyY3t0nsQC9oTFegJA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-exponentiation-operator": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.7.4.tgz",
+      "integrity": "sha512-MCqiLfCKm6KEA1dglf6Uqq1ElDIZwFuzz1WH5mTf8k2uQSxEJMbOIEh7IZv7uichr7PMfi5YVSrr1vz+ipp7AQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.7.4",
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-for-of": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.7.4.tgz",
+      "integrity": "sha512-zZ1fD1B8keYtEcKF+M1TROfeHTKnijcVQm0yO/Yu1f7qoDoxEIc/+GX6Go430Bg84eM/xwPFp0+h4EbZg7epAA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-function-name": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.4.tgz",
+      "integrity": "sha512-E/x09TvjHNhsULs2IusN+aJNRV5zKwxu1cpirZyRPw+FyyIKEHPXTsadj48bVpc1R5Qq1B5ZkzumuFLytnbT6g==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-function-name": "^7.7.4",
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-literals": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.7.4.tgz",
+      "integrity": "sha512-X2MSV7LfJFm4aZfxd0yLVFrEXAgPqYoDG53Br/tCKiKYfX0MjVjQeWPIhPHHsCqzwQANq+FLN786fF5rgLS+gw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-modules-amd": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.7.4.tgz",
+      "integrity": "sha512-/542/5LNA18YDtg1F+QHvvUSlxdvjZoD/aldQwkq+E3WCkbEjNSN9zdrOXaSlfg3IfGi22ijzecklF/A7kVZFQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-transforms": "^7.7.4",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "babel-plugin-dynamic-import-node": "^2.3.0"
+      }
+    },
+    "@babel/plugin-transform-modules-commonjs": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.4.tgz",
+      "integrity": "sha512-k8iVS7Jhc367IcNF53KCwIXtKAH7czev866ThsTgy8CwlXjnKZna2VHwChglzLleYrcHz1eQEIJlGRQxB53nqA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-transforms": "^7.7.4",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-simple-access": "^7.7.4",
+        "babel-plugin-dynamic-import-node": "^2.3.0"
+      }
+    },
+    "@babel/plugin-transform-modules-systemjs": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.4.tgz",
+      "integrity": "sha512-y2c96hmcsUi6LrMqvmNDPBBiGCiQu0aYqpHatVVu6kD4mFEXKjyNxd/drc18XXAf9dv7UXjrZwBVmTTGaGP8iw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-hoist-variables": "^7.7.4",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "babel-plugin-dynamic-import-node": "^2.3.0"
+      }
+    },
+    "@babel/plugin-transform-modules-umd": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.4.tgz",
+      "integrity": "sha512-u2B8TIi0qZI4j8q4C51ktfO7E3cQ0qnaXFI1/OXITordD40tt17g/sXqgNNCcMTcBFKrUPcGDx+TBJuZxLx7tw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-transforms": "^7.7.4",
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-named-capturing-groups-regex": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.4.tgz",
+      "integrity": "sha512-jBUkiqLKvUWpv9GLSuHUFYdmHg0ujC1JEYoZUfeOOfNydZXp1sXObgyPatpcwjWgsdBGsagWW0cdJpX/DO2jMw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-regexp-features-plugin": "^7.7.4"
+      }
+    },
+    "@babel/plugin-transform-new-target": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.7.4.tgz",
+      "integrity": "sha512-CnPRiNtOG1vRodnsyGX37bHQleHE14B9dnnlgSeEs3ek3fHN1A1SScglTCg1sfbe7sRQ2BUcpgpTpWSfMKz3gg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-object-super": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.7.4.tgz",
+      "integrity": "sha512-ho+dAEhC2aRnff2JCA0SAK7V2R62zJd/7dmtoe7MHcso4C2mS+vZjn1Pb1pCVZvJs1mgsvv5+7sT+m3Bysb6eg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-replace-supers": "^7.7.4"
+      }
+    },
+    "@babel/plugin-transform-parameters": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.4.tgz",
+      "integrity": "sha512-VJwhVePWPa0DqE9vcfptaJSzNDKrWU/4FbYCjZERtmqEs05g3UMXnYMZoXja7JAJ7Y7sPZipwm/pGApZt7wHlw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-call-delegate": "^7.7.4",
+        "@babel/helper-get-function-arity": "^7.7.4",
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-regenerator": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.4.tgz",
+      "integrity": "sha512-e7MWl5UJvmPEwFJTwkBlPmqixCtr9yAASBqff4ggXTNicZiwbF8Eefzm6NVgfiBp7JdAGItecnctKTgH44q2Jw==",
+      "dev": true,
+      "requires": {
+        "regenerator-transform": "^0.14.0"
+      }
+    },
+    "@babel/plugin-transform-runtime": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.7.4.tgz",
+      "integrity": "sha512-O8kSkS5fP74Ad/8pfsCMGa8sBRdLxYoSReaARRNSz3FbFQj3z/QUvoUmJ28gn9BO93YfnXc3j+Xyaqe8cKDNBQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "^7.7.4",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "resolve": "^1.8.1",
+        "semver": "^5.5.1"
+      }
+    },
+    "@babel/plugin-transform-shorthand-properties": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.7.4.tgz",
+      "integrity": "sha512-q+suddWRfIcnyG5YiDP58sT65AJDZSUhXQDZE3r04AuqD6d/XLaQPPXSBzP2zGerkgBivqtQm9XKGLuHqBID6Q==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-spread": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.7.4.tgz",
+      "integrity": "sha512-8OSs0FLe5/80cndziPlg4R0K6HcWSM0zyNhHhLsmw/Nc5MaA49cAsnoJ/t/YZf8qkG7fD+UjTRaApVDB526d7Q==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-sticky-regex": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.7.4.tgz",
+      "integrity": "sha512-Ls2NASyL6qtVe1H1hXts9yuEeONV2TJZmplLONkMPUG158CtmnrzW5Q5teibM5UVOFjG0D3IC5mzXR6pPpUY7A==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-regex": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-template-literals": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.7.4.tgz",
+      "integrity": "sha512-sA+KxLwF3QwGj5abMHkHgshp9+rRz+oY9uoRil4CyLtgEuE/88dpkeWgNk5qKVsJE9iSfly3nvHapdRiIS2wnQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.7.4",
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-typeof-symbol": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.7.4.tgz",
+      "integrity": "sha512-KQPUQ/7mqe2m0B8VecdyaW5XcQYaePyl9R7IsKd+irzj6jvbhoGnRE+M0aNkyAzI07VfUQ9266L5xMARitV3wg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-unicode-regex": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz",
+      "integrity": "sha512-N77UUIV+WCvE+5yHw+oks3m18/umd7y392Zv7mYTpFqHtkpcc+QUz+gLJNTWVlWROIWeLqY0f3OjZxV5TcXnRw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-regexp-features-plugin": "^7.7.4",
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/preset-env": {
+      "version": "7.3.4",
+      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.3.4.tgz",
+      "integrity": "sha512-2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "^7.0.0",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-proposal-async-generator-functions": "^7.2.0",
+        "@babel/plugin-proposal-json-strings": "^7.2.0",
+        "@babel/plugin-proposal-object-rest-spread": "^7.3.4",
+        "@babel/plugin-proposal-optional-catch-binding": "^7.2.0",
+        "@babel/plugin-proposal-unicode-property-regex": "^7.2.0",
+        "@babel/plugin-syntax-async-generators": "^7.2.0",
+        "@babel/plugin-syntax-json-strings": "^7.2.0",
+        "@babel/plugin-syntax-object-rest-spread": "^7.2.0",
+        "@babel/plugin-syntax-optional-catch-binding": "^7.2.0",
+        "@babel/plugin-transform-arrow-functions": "^7.2.0",
+        "@babel/plugin-transform-async-to-generator": "^7.3.4",
+        "@babel/plugin-transform-block-scoped-functions": "^7.2.0",
+        "@babel/plugin-transform-block-scoping": "^7.3.4",
+        "@babel/plugin-transform-classes": "^7.3.4",
+        "@babel/plugin-transform-computed-properties": "^7.2.0",
+        "@babel/plugin-transform-destructuring": "^7.2.0",
+        "@babel/plugin-transform-dotall-regex": "^7.2.0",
+        "@babel/plugin-transform-duplicate-keys": "^7.2.0",
+        "@babel/plugin-transform-exponentiation-operator": "^7.2.0",
+        "@babel/plugin-transform-for-of": "^7.2.0",
+        "@babel/plugin-transform-function-name": "^7.2.0",
+        "@babel/plugin-transform-literals": "^7.2.0",
+        "@babel/plugin-transform-modules-amd": "^7.2.0",
+        "@babel/plugin-transform-modules-commonjs": "^7.2.0",
+        "@babel/plugin-transform-modules-systemjs": "^7.3.4",
+        "@babel/plugin-transform-modules-umd": "^7.2.0",
+        "@babel/plugin-transform-named-capturing-groups-regex": "^7.3.0",
+        "@babel/plugin-transform-new-target": "^7.0.0",
+        "@babel/plugin-transform-object-super": "^7.2.0",
+        "@babel/plugin-transform-parameters": "^7.2.0",
+        "@babel/plugin-transform-regenerator": "^7.3.4",
+        "@babel/plugin-transform-shorthand-properties": "^7.2.0",
+        "@babel/plugin-transform-spread": "^7.2.0",
+        "@babel/plugin-transform-sticky-regex": "^7.2.0",
+        "@babel/plugin-transform-template-literals": "^7.2.0",
+        "@babel/plugin-transform-typeof-symbol": "^7.2.0",
+        "@babel/plugin-transform-unicode-regex": "^7.2.0",
+        "browserslist": "^4.3.4",
+        "invariant": "^2.2.2",
+        "js-levenshtein": "^1.1.3",
+        "semver": "^5.3.0"
+      }
+    },
+    "@babel/runtime": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.4.tgz",
+      "integrity": "sha512-r24eVUUr0QqNZa+qrImUk8fn5SPhHq+IfYvIoIMg0do3GdK9sMdiLKP3GYVVaxpPKORgm8KRKaNTEhAjgIpLMw==",
+      "dev": true,
+      "requires": {
+        "regenerator-runtime": "^0.13.2"
+      },
+      "dependencies": {
+        "regenerator-runtime": {
+          "version": "0.13.3",
+          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz",
+          "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==",
+          "dev": true
+        }
+      }
+    },
+    "@babel/runtime-corejs2": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.7.4.tgz",
+      "integrity": "sha512-hKNcmHQbBSJFnZ82ewYtWDZ3fXkP/l1XcfRtm7c8gHPM/DMecJtFFBEp7KMLZTuHwwb7RfemHdsEnd7L916Z6A==",
+      "dev": true,
+      "requires": {
+        "core-js": "^2.6.5",
+        "regenerator-runtime": "^0.13.2"
+      },
+      "dependencies": {
+        "regenerator-runtime": {
+          "version": "0.13.3",
+          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz",
+          "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==",
+          "dev": true
+        }
+      }
+    },
+    "@babel/runtime-corejs3": {
+      "version": "7.14.9",
+      "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.14.9.tgz",
+      "integrity": "sha512-64RiH2ON4/y8qYtoa8rUiyam/tUVyGqRyNYhe+vCRGmjnV4bUlZvY+mwd0RrmLoCpJpdq3RsrNqKb7SJdw/4kw==",
+      "optional": true,
+      "requires": {
+        "core-js-pure": "^3.16.0",
+        "regenerator-runtime": "^0.13.4"
+      },
+      "dependencies": {
+        "regenerator-runtime": {
+          "version": "0.13.9",
+          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
+          "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==",
+          "optional": true
+        }
+      }
+    },
+    "@babel/template": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz",
+      "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "^7.0.0",
+        "@babel/parser": "^7.7.4",
+        "@babel/types": "^7.7.4"
+      }
+    },
+    "@babel/traverse": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz",
+      "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "^7.5.5",
+        "@babel/generator": "^7.7.4",
+        "@babel/helper-function-name": "^7.7.4",
+        "@babel/helper-split-export-declaration": "^7.7.4",
+        "@babel/parser": "^7.7.4",
+        "@babel/types": "^7.7.4",
+        "debug": "^4.1.0",
+        "globals": "^11.1.0",
+        "lodash": "^4.17.13"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "4.1.1",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+          "dev": true
+        }
+      }
+    },
+    "@babel/types": {
+      "version": "7.7.4",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz",
+      "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==",
+      "dev": true,
+      "requires": {
+        "esutils": "^2.0.2",
+        "lodash": "^4.17.13",
+        "to-fast-properties": "^2.0.0"
+      }
+    },
+    "@hapi/address": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz",
+      "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==",
+      "dev": true
+    },
+    "@hapi/bourne": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz",
+      "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==",
+      "dev": true
+    },
+    "@hapi/hoek": {
+      "version": "8.5.0",
+      "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.0.tgz",
+      "integrity": "sha512-7XYT10CZfPsH7j9F1Jmg1+d0ezOux2oM2GfArAzLwWe4mE2Dr3hVjsAL6+TFY49RRJlCdJDMw3nJsLFroTc8Kw==",
+      "dev": true
+    },
+    "@hapi/joi": {
+      "version": "15.1.1",
+      "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz",
+      "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==",
+      "dev": true,
+      "requires": {
+        "@hapi/address": "2.x.x",
+        "@hapi/bourne": "1.x.x",
+        "@hapi/hoek": "8.x.x",
+        "@hapi/topo": "3.x.x"
+      }
+    },
+    "@hapi/topo": {
+      "version": "3.1.6",
+      "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz",
+      "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==",
+      "dev": true,
+      "requires": {
+        "@hapi/hoek": "^8.3.0"
+      }
+    },
+    "@intervolga/optimize-cssnano-plugin": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz",
+      "integrity": "sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA==",
+      "dev": true,
+      "requires": {
+        "cssnano": "^4.0.0",
+        "cssnano-preset-default": "^4.0.0",
+        "postcss": "^7.0.0"
+      }
+    },
+    "@mrmlnc/readdir-enhanced": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+      "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+      "dev": true,
+      "requires": {
+        "call-me-maybe": "^1.0.1",
+        "glob-to-regexp": "^0.3.0"
+      }
+    },
+    "@nodelib/fs.stat": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
+      "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
+      "dev": true
+    },
+    "@soda/friendly-errors-webpack-plugin": {
+      "version": "1.7.1",
+      "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.1.tgz",
+      "integrity": "sha512-cWKrGaFX+rfbMrAxVv56DzhPNqOJPZuNIS2HGMELtgGzb+vsMzyig9mml5gZ/hr2BGtSLV+dP2LUEuAL8aG2mQ==",
+      "dev": true,
+      "requires": {
+        "chalk": "^1.1.3",
+        "error-stack-parser": "^2.0.0",
+        "string-width": "^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=",
+          "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
+        }
+      }
+    },
+    "@types/color-name": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
+      "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
+      "dev": true
+    },
+    "@types/events": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
+      "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==",
+      "dev": true
+    },
+    "@types/glob": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz",
+      "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==",
+      "dev": true,
+      "requires": {
+        "@types/events": "*",
+        "@types/minimatch": "*",
+        "@types/node": "*"
+      }
+    },
+    "@types/json-schema": {
+      "version": "7.0.7",
+      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz",
+      "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA=="
+    },
+    "@types/minimatch": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+      "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+      "dev": true
+    },
+    "@types/node": {
+      "version": "12.12.14",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.14.tgz",
+      "integrity": "sha512-u/SJDyXwuihpwjXy7hOOghagLEV1KdAST6syfnOk6QZAMzZuWZqXy5aYYZbh8Jdpd4escVFP0MvftHNDb9pruA==",
+      "dev": true
+    },
+    "@types/normalize-package-data": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+      "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==",
+      "dev": true
+    },
+    "@types/q": {
+      "version": "1.5.2",
+      "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz",
+      "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==",
+      "dev": true
+    },
+    "@types/raf": {
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.0.tgz",
+      "integrity": "sha512-taW5/WYqo36N7V39oYyHP9Ipfd5pNFvGTIQsNGj86xV88YQ7GnI30/yMfKDF7Zgin0m3e+ikX88FvImnK4RjGw==",
+      "optional": true
+    },
+    "@vue/babel-helper-vue-jsx-merge-props": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0.tgz",
+      "integrity": "sha512-6tyf5Cqm4m6v7buITuwS+jHzPlIPxbFzEhXR5JGZpbrvOcp1hiQKckd305/3C7C36wFekNTQSxAtgeM0j0yoUw==",
+      "dev": true
+    },
+    "@vue/babel-plugin-transform-vue-jsx": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.1.2.tgz",
+      "integrity": "sha512-YfdaoSMvD1nj7+DsrwfTvTnhDXI7bsuh+Y5qWwvQXlD24uLgnsoww3qbiZvWf/EoviZMrvqkqN4CBw0W3BWUTQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "^7.0.0",
+        "@babel/plugin-syntax-jsx": "^7.2.0",
+        "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0",
+        "html-tags": "^2.0.0",
+        "lodash.kebabcase": "^4.1.1",
+        "svg-tags": "^1.0.0"
+      }
+    },
+    "@vue/babel-preset-app": {
+      "version": "3.12.1",
+      "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-3.12.1.tgz",
+      "integrity": "sha512-Zjy5jQaikV1Pz+ri0YgXFS7q4/5wCxB5tRkDOEIt5+4105u0Feb/pvH20nVL6nx9GyXrECFfcm7Yxr/z++OaPQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "^7.0.0",
+        "@babel/plugin-proposal-class-properties": "^7.0.0",
+        "@babel/plugin-proposal-decorators": "^7.1.0",
+        "@babel/plugin-syntax-dynamic-import": "^7.0.0",
+        "@babel/plugin-syntax-jsx": "^7.0.0",
+        "@babel/plugin-transform-runtime": "^7.4.0",
+        "@babel/preset-env": "^7.0.0 < 7.4.0",
+        "@babel/runtime": "^7.0.0",
+        "@babel/runtime-corejs2": "^7.2.0",
+        "@vue/babel-preset-jsx": "^1.0.0",
+        "babel-plugin-dynamic-import-node": "^2.2.0",
+        "babel-plugin-module-resolver": "3.2.0",
+        "core-js": "^2.6.5"
+      }
+    },
+    "@vue/babel-preset-jsx": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.1.2.tgz",
+      "integrity": "sha512-zDpVnFpeC9YXmvGIDSsKNdL7qCG2rA3gjywLYHPCKDT10erjxF4U+6ay9X6TW5fl4GsDlJp9bVfAVQAAVzxxvQ==",
+      "dev": true,
+      "requires": {
+        "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0",
+        "@vue/babel-plugin-transform-vue-jsx": "^1.1.2",
+        "@vue/babel-sugar-functional-vue": "^1.1.2",
+        "@vue/babel-sugar-inject-h": "^1.1.2",
+        "@vue/babel-sugar-v-model": "^1.1.2",
+        "@vue/babel-sugar-v-on": "^1.1.2"
+      }
+    },
+    "@vue/babel-sugar-functional-vue": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.1.2.tgz",
+      "integrity": "sha512-YhmdJQSVEFF5ETJXzrMpj0nkCXEa39TvVxJTuVjzvP2rgKhdMmQzlJuMv/HpadhZaRVMCCF3AEjjJcK5q/cYzQ==",
+      "dev": true,
+      "requires": {
+        "@babel/plugin-syntax-jsx": "^7.2.0"
+      }
+    },
+    "@vue/babel-sugar-inject-h": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.1.2.tgz",
+      "integrity": "sha512-VRSENdTvD5htpnVp7i7DNuChR5rVMcORdXjvv5HVvpdKHzDZAYiLSD+GhnhxLm3/dMuk8pSzV+k28ECkiN5m8w==",
+      "dev": true,
+      "requires": {
+        "@babel/plugin-syntax-jsx": "^7.2.0"
+      }
+    },
+    "@vue/babel-sugar-v-model": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.1.2.tgz",
+      "integrity": "sha512-vLXPvNq8vDtt0u9LqFdpGM9W9IWDmCmCyJXuozlq4F4UYVleXJ2Fa+3JsnTZNJcG+pLjjfnEGHci2339Kj5sGg==",
+      "dev": true,
+      "requires": {
+        "@babel/plugin-syntax-jsx": "^7.2.0",
+        "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0",
+        "@vue/babel-plugin-transform-vue-jsx": "^1.1.2",
+        "camelcase": "^5.0.0",
+        "html-tags": "^2.0.0",
+        "svg-tags": "^1.0.0"
+      }
+    },
+    "@vue/babel-sugar-v-on": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.1.2.tgz",
+      "integrity": "sha512-T8ZCwC8Jp2uRtcZ88YwZtZXe7eQrJcfRq0uTFy6ShbwYJyz5qWskRFoVsdTi9o0WEhmQXxhQUewodOSCUPVmsQ==",
+      "dev": true,
+      "requires": {
+        "@babel/plugin-syntax-jsx": "^7.2.0",
+        "@vue/babel-plugin-transform-vue-jsx": "^1.1.2",
+        "camelcase": "^5.0.0"
+      }
+    },
+    "@vue/cli-overlay": {
+      "version": "3.12.1",
+      "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-3.12.1.tgz",
+      "integrity": "sha512-Bym92EN+lj+cNRN2ozbYyH+V8DMXWGbCDUk+hiJ4EYDBZfBkZKvalk1/mOBFwyxiopnnbOEBAAhL/UuMQ1xARg==",
+      "dev": true
+    },
+    "@vue/cli-plugin-babel": {
+      "version": "3.12.1",
+      "resolved": "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-3.12.1.tgz",
+      "integrity": "sha512-Zetvz8PikLCGomeKOKu8pC9YQ7cfxs7pGpvEOzaxGdhMnebhjAYR6i6dOB57A6N5lhxQksXCtYTv26QgfiIpdg==",
+      "dev": true,
+      "requires": {
+        "@babel/core": "^7.0.0",
+        "@vue/babel-preset-app": "^3.12.1",
+        "@vue/cli-shared-utils": "^3.12.1",
+        "babel-loader": "^8.0.5",
+        "webpack": "^4.0.0"
+      }
+    },
+    "@vue/cli-service": {
+      "version": "3.12.1",
+      "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-3.12.1.tgz",
+      "integrity": "sha512-PDxNrTGnSKzeV1ruFlsRIAO8JcPizwT0EJXq9GeyooU+p+sOkv7aKkCBJQVYNjZapD1NOGWx6CvAAC/wAW+gew==",
+      "dev": true,
+      "requires": {
+        "@intervolga/optimize-cssnano-plugin": "^1.0.5",
+        "@soda/friendly-errors-webpack-plugin": "^1.7.1",
+        "@vue/cli-overlay": "^3.12.1",
+        "@vue/cli-shared-utils": "^3.12.1",
+        "@vue/component-compiler-utils": "^3.0.0",
+        "@vue/preload-webpack-plugin": "^1.1.0",
+        "@vue/web-component-wrapper": "^1.2.0",
+        "acorn": "^6.1.1",
+        "acorn-walk": "^6.1.1",
+        "address": "^1.0.3",
+        "autoprefixer": "^9.5.1",
+        "browserslist": "^4.5.4",
+        "cache-loader": "^2.0.1",
+        "case-sensitive-paths-webpack-plugin": "^2.2.0",
+        "chalk": "^2.4.2",
+        "cli-highlight": "^2.1.0",
+        "clipboardy": "^2.0.0",
+        "cliui": "^5.0.0",
+        "copy-webpack-plugin": "^4.6.0",
+        "css-loader": "^1.0.1",
+        "cssnano": "^4.1.10",
+        "current-script-polyfill": "^1.0.0",
+        "debug": "^4.1.1",
+        "default-gateway": "^5.0.2",
+        "dotenv": "^7.0.0",
+        "dotenv-expand": "^5.1.0",
+        "escape-string-regexp": "^1.0.5",
+        "file-loader": "^3.0.1",
+        "fs-extra": "^7.0.1",
+        "globby": "^9.2.0",
+        "hash-sum": "^1.0.2",
+        "html-webpack-plugin": "^3.2.0",
+        "launch-editor-middleware": "^2.2.1",
+        "lodash.defaultsdeep": "^4.6.1",
+        "lodash.mapvalues": "^4.6.0",
+        "lodash.transform": "^4.6.0",
+        "mini-css-extract-plugin": "^0.8.0",
+        "minimist": "^1.2.0",
+        "ora": "^3.4.0",
+        "portfinder": "^1.0.20",
+        "postcss-loader": "^3.0.0",
+        "read-pkg": "^5.0.0",
+        "semver": "^6.0.0",
+        "slash": "^2.0.0",
+        "source-map-url": "^0.4.0",
+        "ssri": "^6.0.1",
+        "string.prototype.padend": "^3.0.0",
+        "terser-webpack-plugin": "^1.2.3",
+        "thread-loader": "^2.1.2",
+        "url-loader": "^1.1.2",
+        "vue-loader": "^15.7.0",
+        "webpack": "^4.0.0",
+        "webpack-bundle-analyzer": "^3.3.0",
+        "webpack-chain": "^4.11.0",
+        "webpack-dev-server": "^3.4.1",
+        "webpack-merge": "^4.2.1"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "4.1.1",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+          "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
+        }
+      }
+    },
+    "@vue/cli-shared-utils": {
+      "version": "3.12.1",
+      "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-3.12.1.tgz",
+      "integrity": "sha512-jFblzRFjutGwu5utOKdVlPlsbA1lBUNNQlAThzNqej+JtTKJjnvjlhjKX0Gq0oOny5FjKWhoyfQ74p9h1qE6JQ==",
+      "dev": true,
+      "requires": {
+        "@hapi/joi": "^15.0.1",
+        "chalk": "^2.4.1",
+        "execa": "^1.0.0",
+        "launch-editor": "^2.2.1",
+        "lru-cache": "^5.1.1",
+        "node-ipc": "^9.1.1",
+        "open": "^6.3.0",
+        "ora": "^3.4.0",
+        "request": "^2.87.0",
+        "request-promise-native": "^1.0.7",
+        "semver": "^6.0.0",
+        "string.prototype.padstart": "^3.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==",
+          "dev": true
+        }
+      }
+    },
+    "@vue/component-compiler-utils": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.0.2.tgz",
+      "integrity": "sha512-BSnY2PmW4QwU1AOcGSNYAmEPLjdQ9itl1YpLCWtpwMA5Jy/aqWNuzZ9+ZZ8h6yZJ53W95tVkEP6yrXJ/zUHdEA==",
+      "dev": true,
+      "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": "^5.0.0",
+        "prettier": "^1.18.2",
+        "source-map": "~0.6.1",
+        "vue-template-es2015-compiler": "^1.9.0"
+      },
+      "dependencies": {
+        "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==",
+          "dev": true,
+          "requires": {
+            "pseudomap": "^1.0.2",
+            "yallist": "^2.1.2"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        },
+        "yallist": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+          "dev": true
+        }
+      }
+    },
+    "@vue/preload-webpack-plugin": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.1.tgz",
+      "integrity": "sha512-8VCoJeeH8tCkzhkpfOkt+abALQkS11OIHhte5MBzYaKMTqK0A3ZAKEUVAffsOklhEv7t0yrQt696Opnu9oAx+w==",
+      "dev": true
+    },
+    "@vue/web-component-wrapper": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.2.0.tgz",
+      "integrity": "sha512-Xn/+vdm9CjuC9p3Ae+lTClNutrVhsXpzxvoTXXtoys6kVRX9FkueSUAqSWAyZntmVLlR4DosBV4pH8y5Z/HbUw==",
+      "dev": true
+    },
+    "@webassemblyjs/ast": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz",
+      "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/helper-module-context": "1.8.5",
+        "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+        "@webassemblyjs/wast-parser": "1.8.5"
+      }
+    },
+    "@webassemblyjs/floating-point-hex-parser": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz",
+      "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-api-error": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz",
+      "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-buffer": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz",
+      "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-code-frame": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz",
+      "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/wast-printer": "1.8.5"
+      }
+    },
+    "@webassemblyjs/helper-fsm": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz",
+      "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-module-context": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz",
+      "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.8.5",
+        "mamacro": "^0.0.3"
+      }
+    },
+    "@webassemblyjs/helper-wasm-bytecode": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz",
+      "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-wasm-section": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz",
+      "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.8.5",
+        "@webassemblyjs/helper-buffer": "1.8.5",
+        "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+        "@webassemblyjs/wasm-gen": "1.8.5"
+      }
+    },
+    "@webassemblyjs/ieee754": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz",
+      "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==",
+      "dev": true,
+      "requires": {
+        "@xtuc/ieee754": "^1.2.0"
+      }
+    },
+    "@webassemblyjs/leb128": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz",
+      "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==",
+      "dev": true,
+      "requires": {
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "@webassemblyjs/utf8": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz",
+      "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==",
+      "dev": true
+    },
+    "@webassemblyjs/wasm-edit": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz",
+      "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.8.5",
+        "@webassemblyjs/helper-buffer": "1.8.5",
+        "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+        "@webassemblyjs/helper-wasm-section": "1.8.5",
+        "@webassemblyjs/wasm-gen": "1.8.5",
+        "@webassemblyjs/wasm-opt": "1.8.5",
+        "@webassemblyjs/wasm-parser": "1.8.5",
+        "@webassemblyjs/wast-printer": "1.8.5"
+      }
+    },
+    "@webassemblyjs/wasm-gen": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz",
+      "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.8.5",
+        "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+        "@webassemblyjs/ieee754": "1.8.5",
+        "@webassemblyjs/leb128": "1.8.5",
+        "@webassemblyjs/utf8": "1.8.5"
+      }
+    },
+    "@webassemblyjs/wasm-opt": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz",
+      "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.8.5",
+        "@webassemblyjs/helper-buffer": "1.8.5",
+        "@webassemblyjs/wasm-gen": "1.8.5",
+        "@webassemblyjs/wasm-parser": "1.8.5"
+      }
+    },
+    "@webassemblyjs/wasm-parser": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz",
+      "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.8.5",
+        "@webassemblyjs/helper-api-error": "1.8.5",
+        "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+        "@webassemblyjs/ieee754": "1.8.5",
+        "@webassemblyjs/leb128": "1.8.5",
+        "@webassemblyjs/utf8": "1.8.5"
+      }
+    },
+    "@webassemblyjs/wast-parser": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz",
+      "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.8.5",
+        "@webassemblyjs/floating-point-hex-parser": "1.8.5",
+        "@webassemblyjs/helper-api-error": "1.8.5",
+        "@webassemblyjs/helper-code-frame": "1.8.5",
+        "@webassemblyjs/helper-fsm": "1.8.5",
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "@webassemblyjs/wast-printer": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz",
+      "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.8.5",
+        "@webassemblyjs/wast-parser": "1.8.5",
+        "@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==",
+      "dev": true
+    },
+    "@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==",
+      "dev": true
+    },
+    "abbrev": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
+    },
+    "accepts": {
+      "version": "1.3.7",
+      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+      "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+      "dev": true,
+      "requires": {
+        "mime-types": "~2.1.24",
+        "negotiator": "0.6.2"
+      }
+    },
+    "acorn": {
+      "version": "6.4.0",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz",
+      "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==",
+      "dev": true
+    },
+    "acorn-walk": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz",
+      "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==",
+      "dev": true
+    },
+    "address": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz",
+      "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==",
+      "dev": true
+    },
+    "ajv": {
+      "version": "6.10.2",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
+      "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
+      "requires": {
+        "fast-deep-equal": "^2.0.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==",
+      "dev": true
+    },
+    "ajv-keywords": {
+      "version": "3.4.1",
+      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz",
+      "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ=="
+    },
+    "alphanum-sort": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
+      "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
+      "dev": true
+    },
+    "amdefine": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+      "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
+    },
+    "ansi-colors": {
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
+      "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==",
+      "dev": true
+    },
+    "ansi-cyan": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz",
+      "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=",
+      "requires": {
+        "ansi-wrap": "0.1.0"
+      }
+    },
+    "ansi-gray": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
+      "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=",
+      "requires": {
+        "ansi-wrap": "0.1.0"
+      }
+    },
+    "ansi-html": {
+      "version": "0.0.7",
+      "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
+      "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=",
+      "dev": true
+    },
+    "ansi-red": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz",
+      "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=",
+      "requires": {
+        "ansi-wrap": "0.1.0"
+      }
+    },
+    "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
+    },
+    "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"
+      }
+    },
+    "ansi-wrap": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
+      "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768="
+    },
+    "any-promise": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+      "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=",
+      "dev": true
+    },
+    "anymatch": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+      "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+      "dev": 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=",
+          "dev": true,
+          "requires": {
+            "remove-trailing-separator": "^1.0.1"
+          }
+        }
+      }
+    },
+    "aproba": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+      "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
+    },
+    "arch": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz",
+      "integrity": "sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==",
+      "dev": true
+    },
+    "archy": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+      "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA="
+    },
+    "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==",
+      "requires": {
+        "delegates": "^1.0.0",
+        "readable-stream": "^2.0.6"
+      }
+    },
+    "argparse": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+      "dev": true,
+      "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-differ": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
+      "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE="
+    },
+    "array-each": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
+      "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8="
+    },
+    "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="
+    },
+    "array-flatten": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+      "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+      "dev": true
+    },
+    "array-slice": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
+      "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w=="
+    },
+    "array-union": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+      "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+      "dev": true,
+      "requires": {
+        "array-uniq": "^1.0.1"
+      }
+    },
+    "array-uniq": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+      "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
+    },
+    "array-unique": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+      "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+    },
+    "asn1": {
+      "version": "0.2.4",
+      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+      "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+      "requires": {
+        "safer-buffer": "~2.1.0"
+      }
+    },
+    "asn1.js": {
+      "version": "4.10.1",
+      "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+      "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.0.0",
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0"
+      }
+    },
+    "assert": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
+      "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
+      "dev": true,
+      "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=",
+          "dev": true
+        },
+        "util": {
+          "version": "0.10.3",
+          "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+          "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+          "dev": true,
+          "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="
+    },
+    "assign-symbols": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+      "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
+    },
+    "async": {
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
+      "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
+      "dev": true,
+      "requires": {
+        "lodash": "^4.17.14"
+      }
+    },
+    "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==",
+      "dev": true
+    },
+    "async-foreach": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
+      "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI="
+    },
+    "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==",
+      "dev": true
+    },
+    "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="
+    },
+    "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.7.3",
+      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.3.tgz",
+      "integrity": "sha512-8T5Y1C5Iyj6PgkPSFd0ODvK9DIleuPKUPYniNxybS47g2k2wFgLZ46lGQHlBuGKIAEV8fbCDfKCCRS1tvOgc3Q==",
+      "dev": true,
+      "requires": {
+        "browserslist": "^4.8.0",
+        "caniuse-lite": "^1.0.30001012",
+        "chalk": "^2.4.2",
+        "normalize-range": "^0.1.2",
+        "num2fraction": "^1.2.2",
+        "postcss": "^7.0.23",
+        "postcss-value-parser": "^4.0.2"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "4.0.2",
+          "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz",
+          "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==",
+          "dev": true
+        }
+      }
+    },
+    "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="
+    },
+    "aws4": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.0.tgz",
+      "integrity": "sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A=="
+    },
+    "axios": {
+      "version": "0.18.1",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.1.tgz",
+      "integrity": "sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==",
+      "requires": {
+        "follow-redirects": "1.5.10",
+        "is-buffer": "^2.0.2"
+      }
+    },
+    "babel-code-frame": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+      "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+      "dev": true,
+      "requires": {
+        "chalk": "^1.1.3",
+        "esutils": "^2.0.2",
+        "js-tokens": "^3.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"
+          }
+        },
+        "js-tokens": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+          "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+          "dev": true
+        },
+        "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
+        }
+      }
+    },
+    "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.0.6",
+      "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz",
+      "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==",
+      "dev": true,
+      "requires": {
+        "find-cache-dir": "^2.0.0",
+        "loader-utils": "^1.0.2",
+        "mkdirp": "^0.5.1",
+        "pify": "^4.0.1"
+      }
+    },
+    "babel-plugin-dynamic-import-node": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz",
+      "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==",
+      "dev": true,
+      "requires": {
+        "object.assign": "^4.1.0"
+      }
+    },
+    "babel-plugin-module-resolver": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz",
+      "integrity": "sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA==",
+      "dev": true,
+      "requires": {
+        "find-babel-config": "^1.1.0",
+        "glob": "^7.1.2",
+        "pkg-up": "^2.0.0",
+        "reselect": "^3.0.1",
+        "resolve": "^1.4.0"
+      }
+    },
+    "babel-plugin-syntax-dynamic-import": {
+      "version": "6.18.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz",
+      "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo="
+    },
+    "babel-polyfill": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
+      "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
+      "requires": {
+        "babel-runtime": "^6.26.0",
+        "core-js": "^2.5.0",
+        "regenerator-runtime": "^0.10.5"
+      }
+    },
+    "babel-runtime": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+      "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+      "requires": {
+        "core-js": "^2.4.0",
+        "regenerator-runtime": "^0.11.0"
+      },
+      "dependencies": {
+        "regenerator-runtime": {
+          "version": "0.11.1",
+          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+          "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
+        }
+      }
+    },
+    "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-arraybuffer": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz",
+      "integrity": "sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ=="
+    },
+    "base64-js": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
+      "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
+      "dev": true
+    },
+    "batch": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
+      "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
+      "dev": true
+    },
+    "bcrypt-pbkdf": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+      "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+      "requires": {
+        "tweetnacl": "^0.14.3"
+      }
+    },
+    "beeper": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz",
+      "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak="
+    },
+    "bfj": {
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz",
+      "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==",
+      "dev": true,
+      "requires": {
+        "bluebird": "^3.5.5",
+        "check-types": "^8.0.3",
+        "hoopy": "^0.1.4",
+        "tryer": "^1.0.1"
+      }
+    },
+    "big.js": {
+      "version": "5.2.2",
+      "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+      "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
+    },
+    "binary-extensions": {
+      "version": "1.13.1",
+      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+      "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
+      "dev": true
+    },
+    "block-stream": {
+      "version": "0.0.9",
+      "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
+      "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+      "requires": {
+        "inherits": "~2.0.0"
+      }
+    },
+    "bluebird": {
+      "version": "3.7.2",
+      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
+      "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
+      "dev": true
+    },
+    "bn.js": {
+      "version": "4.11.8",
+      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+      "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+      "dev": true
+    },
+    "body-parser": {
+      "version": "1.19.0",
+      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+      "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+      "dev": true,
+      "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==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "qs": {
+          "version": "6.7.0",
+          "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+          "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+          "dev": true
+        }
+      }
+    },
+    "bonjour": {
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
+      "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
+      "dev": true,
+      "requires": {
+        "array-flatten": "^2.1.0",
+        "deep-equal": "^1.0.1",
+        "dns-equal": "^1.0.0",
+        "dns-txt": "^2.0.2",
+        "multicast-dns": "^6.0.1",
+        "multicast-dns-service-types": "^1.1.0"
+      },
+      "dependencies": {
+        "array-flatten": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
+          "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
+          "dev": true
+        }
+      }
+    },
+    "boolbase": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+      "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+      "dev": true
+    },
+    "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": "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"
+          }
+        }
+      }
+    },
+    "brorand": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+      "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+      "dev": true
+    },
+    "browserify-aes": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+      "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+      "dev": true,
+      "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==",
+      "dev": true,
+      "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==",
+      "dev": true,
+      "requires": {
+        "cipher-base": "^1.0.1",
+        "des.js": "^1.0.0",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.1.2"
+      }
+    },
+    "browserify-rsa": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+      "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.1.0",
+        "randombytes": "^2.0.1"
+      }
+    },
+    "browserify-sign": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
+      "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.1.1",
+        "browserify-rsa": "^4.0.0",
+        "create-hash": "^1.1.0",
+        "create-hmac": "^1.1.2",
+        "elliptic": "^6.0.0",
+        "inherits": "^2.0.1",
+        "parse-asn1": "^5.0.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==",
+      "dev": true,
+      "requires": {
+        "pako": "~1.0.5"
+      }
+    },
+    "browserslist": {
+      "version": "4.8.0",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.0.tgz",
+      "integrity": "sha512-HYnxc/oLRWvJ3TsGegR0SRL/UDnknGq2s/a8dYYEO+kOQ9m9apKoS5oiathLKZdh/e9uE+/J3j92qPlGD/vTqA==",
+      "dev": true,
+      "requires": {
+        "caniuse-lite": "^1.0.30001012",
+        "electron-to-chromium": "^1.3.317",
+        "node-releases": "^1.1.41"
+      }
+    },
+    "btoa": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz",
+      "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g=="
+    },
+    "buffer": {
+      "version": "4.9.2",
+      "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
+      "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
+      "dev": true,
+      "requires": {
+        "base64-js": "^1.0.2",
+        "ieee754": "^1.1.4",
+        "isarray": "^1.0.0"
+      }
+    },
+    "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==",
+      "dev": true
+    },
+    "buffer-indexof": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz",
+      "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==",
+      "dev": true
+    },
+    "buffer-xor": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+      "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+      "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=",
+      "dev": true
+    },
+    "bytes": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+      "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+      "dev": true
+    },
+    "cacache": {
+      "version": "12.0.3",
+      "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz",
+      "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==",
+      "dev": true,
+      "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"
+      }
+    },
+    "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": "2.0.1",
+      "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-2.0.1.tgz",
+      "integrity": "sha512-V99T3FOynmGx26Zom+JrVBytLBsmUCzVG2/4NnUKgvXN4bEV42R1ERl1IyiH/cvFIDA1Ytq2lPZ9tXDSahcQpQ==",
+      "dev": true,
+      "requires": {
+        "loader-utils": "^1.1.0",
+        "mkdirp": "^0.5.1",
+        "neo-async": "^2.6.0",
+        "normalize-path": "^3.0.0",
+        "schema-utils": "^1.0.0"
+      }
+    },
+    "call-me-maybe": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+      "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+      "dev": true
+    },
+    "caller-callsite": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
+      "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
+      "dev": true,
+      "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=",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "camel-case": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
+      "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
+      "dev": true,
+      "requires": {
+        "no-case": "^2.2.0",
+        "upper-case": "^1.1.1"
+      }
+    },
+    "camelcase": {
+      "version": "5.3.1",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+      "dev": true
+    },
+    "camelcase-keys": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+      "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+      "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="
+        }
+      }
+    },
+    "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==",
+      "dev": true,
+      "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.30001012",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001012.tgz",
+      "integrity": "sha512-7RR4Uh04t9K1uYRWzOJmzplgEOAXbfK72oVNokCdMzA67trrhPzy93ahKk1AWHiA0c58tD2P+NHqxrA8FZ+Trg=="
+    },
+    "canvg": {
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.7.tgz",
+      "integrity": "sha512-4sq6iL5Q4VOXS3PL1BapiXIZItpxYyANVzsAKpTPS5oq4u3SKbGfUcbZh2gdLCQ3jWpG/y5wRkMlBBAJhXeiZA==",
+      "optional": true,
+      "requires": {
+        "@babel/runtime-corejs3": "^7.9.6",
+        "@types/raf": "^3.4.0",
+        "raf": "^3.4.1",
+        "rgbcolor": "^1.0.1",
+        "stackblur-canvas": "^2.0.0",
+        "svg-pathdata": "^5.0.5"
+      }
+    },
+    "case-sensitive-paths-webpack-plugin": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.2.0.tgz",
+      "integrity": "sha512-u5ElzokS8A1pm9vM3/iDgTcI3xqHxuCao94Oz8etI3cf0Tio0p8izkDYbTIn09uP3yUUr6+veaE6IkjnTYS46g==",
+      "dev": true
+    },
+    "caseless": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
+    },
+    "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"
+      }
+    },
+    "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==",
+      "dev": true
+    },
+    "chokidar": {
+      "version": "2.1.8",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+      "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+      "dev": 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"
+      }
+    },
+    "chownr": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz",
+      "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==",
+      "dev": true
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "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.1",
+      "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz",
+      "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==",
+      "dev": true,
+      "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==",
+          "dev": true
+        }
+      }
+    },
+    "cli-cursor": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+      "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+      "dev": true,
+      "requires": {
+        "restore-cursor": "^2.0.0"
+      }
+    },
+    "cli-highlight": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.4.tgz",
+      "integrity": "sha512-s7Zofobm20qriqDoU9sXptQx0t2R9PEgac92mENNm7xaEe1hn71IIMsXMK+6encA6WRCWWxIGQbipr3q998tlQ==",
+      "dev": true,
+      "requires": {
+        "chalk": "^3.0.0",
+        "highlight.js": "^9.6.0",
+        "mz": "^2.4.0",
+        "parse5": "^5.1.1",
+        "parse5-htmlparser2-tree-adapter": "^5.1.1",
+        "yargs": "^15.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.0.tgz",
+          "integrity": "sha512-7kFQgnEaMdRtwf6uSfUnVr9gSGC7faurn+J/Mv90/W+iTtN0405/nLdopfMWwchyxhbGYl6TC4Sccn9TUkGAgg==",
+          "dev": true,
+          "requires": {
+            "@types/color-name": "^1.1.1",
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
+          "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
+          "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
+        },
+        "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
+        },
+        "supports-color": {
+          "version": "7.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
+          "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "cli-spinners": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.2.0.tgz",
+      "integrity": "sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ==",
+      "dev": true
+    },
+    "clipboardy": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.1.0.tgz",
+      "integrity": "sha512-2pzOUxWcLlXWtn+Jd6js3o12TysNOOVes/aQfg+MT/35vrxWzedHlLwyoJpXjsFKWm95BTNEcMGD9+a7mKzZkQ==",
+      "dev": true,
+      "requires": {
+        "arch": "^2.1.1",
+        "execa": "^1.0.0"
+      }
+    },
+    "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": {
+        "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"
+          }
+        },
+        "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": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+      "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18="
+    },
+    "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"
+      }
+    },
+    "clone-stats": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+      "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE="
+    },
+    "coa": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz",
+      "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==",
+      "dev": true,
+      "requires": {
+        "@types/q": "^1.5.1",
+        "chalk": "^2.4.1",
+        "q": "^1.1.2"
+      }
+    },
+    "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="
+    },
+    "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.2",
+      "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz",
+      "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==",
+      "dev": true,
+      "requires": {
+        "color-convert": "^1.9.1",
+        "color-string": "^1.5.2"
+      }
+    },
+    "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.3",
+      "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz",
+      "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==",
+      "dev": true,
+      "requires": {
+        "color-name": "^1.0.0",
+        "simple-swizzle": "^0.2.2"
+      }
+    },
+    "color-support": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+      "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg=="
+    },
+    "combined-stream": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+      "requires": {
+        "delayed-stream": "~1.0.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=="
+    },
+    "commondir": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+      "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+      "dev": true
+    },
+    "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.17",
+      "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz",
+      "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==",
+      "dev": true,
+      "requires": {
+        "mime-db": ">= 1.40.0 < 2"
+      }
+    },
+    "compression": {
+      "version": "1.7.4",
+      "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
+      "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
+      "dev": true,
+      "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=",
+          "dev": true
+        },
+        "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"
+          }
+        }
+      }
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "buffer-from": "^1.0.0",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.2.2",
+        "typedarray": "^0.0.6"
+      }
+    },
+    "connect-history-api-fallback": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
+      "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
+      "dev": true
+    },
+    "console-browserify": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
+      "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
+      "dev": true
+    },
+    "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="
+    },
+    "consolidate": {
+      "version": "0.15.1",
+      "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz",
+      "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "content-disposition": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
+      "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "5.1.2"
+      }
+    },
+    "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==",
+      "dev": true
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "~5.1.1"
+      }
+    },
+    "cookie": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
+      "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
+      "dev": true
+    },
+    "cookie-signature": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+      "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+      "dev": true
+    },
+    "copy-concurrently": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
+      "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
+      "dev": true,
+      "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="
+    },
+    "copy-webpack-plugin": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz",
+      "integrity": "sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA==",
+      "dev": true,
+      "requires": {
+        "cacache": "^10.0.4",
+        "find-cache-dir": "^1.0.0",
+        "globby": "^7.1.1",
+        "is-glob": "^4.0.0",
+        "loader-utils": "^1.1.0",
+        "minimatch": "^3.0.4",
+        "p-limit": "^1.0.0",
+        "serialize-javascript": "^1.4.0"
+      },
+      "dependencies": {
+        "cacache": {
+          "version": "10.0.4",
+          "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz",
+          "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==",
+          "dev": true,
+          "requires": {
+            "bluebird": "^3.5.1",
+            "chownr": "^1.0.1",
+            "glob": "^7.1.2",
+            "graceful-fs": "^4.1.11",
+            "lru-cache": "^4.1.1",
+            "mississippi": "^2.0.0",
+            "mkdirp": "^0.5.1",
+            "move-concurrently": "^1.0.1",
+            "promise-inflight": "^1.0.1",
+            "rimraf": "^2.6.2",
+            "ssri": "^5.2.4",
+            "unique-filename": "^1.1.0",
+            "y18n": "^4.0.0"
+          }
+        },
+        "find-cache-dir": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz",
+          "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
+          "dev": true,
+          "requires": {
+            "commondir": "^1.0.1",
+            "make-dir": "^1.0.0",
+            "pkg-dir": "^2.0.0"
+          }
+        },
+        "globby": {
+          "version": "7.1.1",
+          "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz",
+          "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
+          "dev": true,
+          "requires": {
+            "array-union": "^1.0.1",
+            "dir-glob": "^2.0.0",
+            "glob": "^7.1.2",
+            "ignore": "^3.3.5",
+            "pify": "^3.0.0",
+            "slash": "^1.0.0"
+          }
+        },
+        "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==",
+          "dev": true,
+          "requires": {
+            "pseudomap": "^1.0.2",
+            "yallist": "^2.1.2"
+          }
+        },
+        "make-dir": {
+          "version": "1.3.0",
+          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+          "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+          "dev": true,
+          "requires": {
+            "pify": "^3.0.0"
+          }
+        },
+        "mississippi": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz",
+          "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==",
+          "dev": true,
+          "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": "^2.0.1",
+            "pumpify": "^1.3.3",
+            "stream-each": "^1.1.0",
+            "through2": "^2.0.0"
+          }
+        },
+        "pify": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+          "dev": true
+        },
+        "pkg-dir": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
+          "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+          "dev": true,
+          "requires": {
+            "find-up": "^2.1.0"
+          }
+        },
+        "pump": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+          "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+          "dev": true,
+          "requires": {
+            "end-of-stream": "^1.1.0",
+            "once": "^1.3.1"
+          }
+        },
+        "slash": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+          "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+          "dev": true
+        },
+        "ssri": {
+          "version": "5.3.0",
+          "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz",
+          "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==",
+          "dev": true,
+          "requires": {
+            "safe-buffer": "^5.1.1"
+          }
+        },
+        "yallist": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+          "dev": true
+        }
+      }
+    },
+    "core-js": {
+      "version": "2.6.10",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.10.tgz",
+      "integrity": "sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA=="
+    },
+    "core-js-pure": {
+      "version": "3.16.1",
+      "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.16.1.tgz",
+      "integrity": "sha512-TyofCdMzx0KMhi84mVRS8rL1XsRk2SPUNz2azmth53iRN0/08Uim9fdhQTaZTG1LqaXHYVci4RDHka6WrXfnvg==",
+      "optional": true
+    },
+    "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="
+    },
+    "cosmiconfig": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
+      "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
+      "dev": true,
+      "requires": {
+        "import-fresh": "^2.0.0",
+        "is-directory": "^0.3.1",
+        "js-yaml": "^3.13.1",
+        "parse-json": "^4.0.0"
+      }
+    },
+    "create-ecdh": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
+      "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.1.0",
+        "elliptic": "^6.0.0"
+      }
+    },
+    "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==",
+      "dev": true,
+      "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==",
+      "dev": true,
+      "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"
+      }
+    },
+    "cropperjs": {
+      "version": "1.5.6",
+      "resolved": "https://registry.npmjs.org/cropperjs/-/cropperjs-1.5.6.tgz",
+      "integrity": "sha512-eAgWf4j7sNJIG329qUHIFi17PSV0VtuWyAu9glZSgu/KlQSrfTQOC2zAz+jHGa5fAB+bJldEnQwvJEaJ8zRf5A=="
+    },
+    "cross-spawn": {
+      "version": "6.0.5",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+      "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+      "dev": true,
+      "requires": {
+        "nice-try": "^1.0.4",
+        "path-key": "^2.0.1",
+        "semver": "^5.5.0",
+        "shebang-command": "^1.2.0",
+        "which": "^1.2.9"
+      }
+    },
+    "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==",
+      "dev": true,
+      "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": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz",
+      "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==",
+      "requires": {
+        "inherits": "^2.0.3",
+        "source-map": "^0.6.1",
+        "source-map-resolve": "^0.5.2",
+        "urix": "^0.1.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=="
+        }
+      }
+    },
+    "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=",
+      "dev": true
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.1",
+        "timsort": "^0.3.0"
+      }
+    },
+    "css-line-break": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.0.1.tgz",
+      "integrity": "sha512-gwKYIMUn7xodIcb346wgUhE2Dt5O1Kmrc16PWi8sL4FTfyDj8P5095rzH7+O8CTZudJr+uw2GCI/hwEkDJFI2w==",
+      "requires": {
+        "base64-arraybuffer": "^0.2.0"
+      }
+    },
+    "css-loader": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.1.tgz",
+      "integrity": "sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw==",
+      "dev": true,
+      "requires": {
+        "babel-code-frame": "^6.26.0",
+        "css-selector-tokenizer": "^0.7.0",
+        "icss-utils": "^2.1.0",
+        "loader-utils": "^1.0.2",
+        "lodash": "^4.17.11",
+        "postcss": "^6.0.23",
+        "postcss-modules-extract-imports": "^1.2.0",
+        "postcss-modules-local-by-default": "^1.2.0",
+        "postcss-modules-scope": "^1.1.0",
+        "postcss-modules-values": "^1.3.0",
+        "postcss-value-parser": "^3.3.0",
+        "source-list-map": "^2.0.0"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "6.0.23",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+          "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+          "dev": true,
+          "requires": {
+            "chalk": "^2.4.1",
+            "source-map": "^0.6.1",
+            "supports-color": "^5.4.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "css-select": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz",
+      "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==",
+      "dev": true,
+      "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==",
+      "dev": true
+    },
+    "css-selector-tokenizer": {
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz",
+      "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==",
+      "dev": true,
+      "requires": {
+        "cssesc": "^0.1.0",
+        "fastparse": "^1.1.1",
+        "regexpu-core": "^1.0.0"
+      },
+      "dependencies": {
+        "cssesc": {
+          "version": "0.1.0",
+          "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz",
+          "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=",
+          "dev": true
+        },
+        "jsesc": {
+          "version": "0.5.0",
+          "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+          "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+          "dev": true
+        },
+        "regexpu-core": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz",
+          "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=",
+          "dev": true,
+          "requires": {
+            "regenerate": "^1.2.1",
+            "regjsgen": "^0.2.0",
+            "regjsparser": "^0.1.4"
+          }
+        },
+        "regjsgen": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
+          "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=",
+          "dev": true
+        },
+        "regjsparser": {
+          "version": "0.1.5",
+          "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
+          "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
+          "dev": true,
+          "requires": {
+            "jsesc": "~0.5.0"
+          }
+        }
+      }
+    },
+    "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==",
+      "dev": true,
+      "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==",
+          "dev": true
+        }
+      }
+    },
+    "css-unit-converter": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz",
+      "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=",
+      "dev": true
+    },
+    "css-what": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz",
+      "integrity": "sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==",
+      "dev": true
+    },
+    "cssesc": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
+      "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==",
+      "dev": true
+    },
+    "cssnano": {
+      "version": "4.1.10",
+      "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz",
+      "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==",
+      "dev": true,
+      "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==",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "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=",
+      "dev": true
+    },
+    "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==",
+      "dev": true,
+      "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==",
+      "dev": true
+    },
+    "csso": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.2.tgz",
+      "integrity": "sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg==",
+      "dev": true,
+      "requires": {
+        "css-tree": "1.0.0-alpha.37"
+      }
+    },
+    "current-script-polyfill": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/current-script-polyfill/-/current-script-polyfill-1.0.0.tgz",
+      "integrity": "sha1-8xz35PPiGLBybnOMqSoC00iO9hU=",
+      "dev": true
+    },
+    "currently-unhandled": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+      "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+      "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=",
+      "dev": true
+    },
+    "dashdash": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+      "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+      "requires": {
+        "assert-plus": "^1.0.0"
+      }
+    },
+    "dateformat": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz",
+      "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI="
+    },
+    "de-indent": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
+      "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=",
+      "dev": true
+    },
+    "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"
+      }
+    },
+    "decamelize": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+    },
+    "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-equal": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz",
+      "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==",
+      "requires": {
+        "is-arguments": "^1.0.4",
+        "is-date-object": "^1.0.1",
+        "is-regex": "^1.0.4",
+        "object-is": "^1.0.1",
+        "object-keys": "^1.1.1",
+        "regexp.prototype.flags": "^1.2.0"
+      }
+    },
+    "deepmerge": {
+      "version": "1.5.2",
+      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz",
+      "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ=="
+    },
+    "default-gateway": {
+      "version": "5.0.5",
+      "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-5.0.5.tgz",
+      "integrity": "sha512-z2RnruVmj8hVMmAnEJMTIJNijhKCDiGjbLP+BHJFOT7ld3Bo5qcIBpVYDniqhbMIIf+jZDlkP2MkPXiQy/DBLA==",
+      "dev": true,
+      "requires": {
+        "execa": "^3.3.0"
+      },
+      "dependencies": {
+        "cross-spawn": {
+          "version": "7.0.1",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz",
+          "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==",
+          "dev": true,
+          "requires": {
+            "path-key": "^3.1.0",
+            "shebang-command": "^2.0.0",
+            "which": "^2.0.1"
+          }
+        },
+        "execa": {
+          "version": "3.4.0",
+          "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz",
+          "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==",
+          "dev": true,
+          "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"
+          }
+        },
+        "get-stream": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz",
+          "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==",
+          "dev": true,
+          "requires": {
+            "pump": "^3.0.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==",
+          "dev": true
+        },
+        "mimic-fn": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+          "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+          "dev": true
+        },
+        "npm-run-path": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.0.tgz",
+          "integrity": "sha512-8eyAOAH+bYXFPSnNnKr3J+yoybe8O87Is5rtAQ8qRczJz1ajcsjg8l2oZqP+Ppx15Ii3S1vUTjQN2h4YO2tWWQ==",
+          "dev": true,
+          "requires": {
+            "path-key": "^3.0.0"
+          }
+        },
+        "onetime": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
+          "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
+          "dev": true,
+          "requires": {
+            "mimic-fn": "^2.1.0"
+          }
+        },
+        "p-finally": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz",
+          "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==",
+          "dev": true
+        },
+        "path-key": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+          "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+          "dev": true
+        },
+        "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==",
+          "dev": true,
+          "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==",
+          "dev": true
+        },
+        "which": {
+          "version": "2.0.2",
+          "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+          "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+          "dev": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
+        }
+      }
+    },
+    "defaults": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+      "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+      "requires": {
+        "clone": "^1.0.2"
+      },
+      "dependencies": {
+        "clone": {
+          "version": "1.0.4",
+          "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+          "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4="
+        }
+      }
+    },
+    "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"
+          }
+        }
+      }
+    },
+    "del": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz",
+      "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==",
+      "dev": true,
+      "requires": {
+        "@types/glob": "^7.1.1",
+        "globby": "^6.1.0",
+        "is-path-cwd": "^2.0.0",
+        "is-path-in-cwd": "^2.0.0",
+        "p-map": "^2.0.0",
+        "pify": "^4.0.1",
+        "rimraf": "^2.6.3"
+      },
+      "dependencies": {
+        "globby": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+          "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+          "dev": true,
+          "requires": {
+            "array-union": "^1.0.1",
+            "glob": "^7.0.3",
+            "object-assign": "^4.0.1",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
+          },
+          "dependencies": {
+            "pify": {
+              "version": "2.3.0",
+              "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+              "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+              "dev": true
+            }
+          }
+        }
+      }
+    },
+    "delayed-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+    },
+    "delegates": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+      "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
+    },
+    "depd": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+      "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+      "dev": true
+    },
+    "deprecated": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz",
+      "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk="
+    },
+    "des.js": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
+      "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0"
+      }
+    },
+    "destroy": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+      "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+      "dev": true
+    },
+    "detect-file": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+      "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc="
+    },
+    "detect-node": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz",
+      "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==",
+      "dev": true
+    },
+    "diffie-hellman": {
+      "version": "5.0.3",
+      "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+      "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.1.0",
+        "miller-rabin": "^4.0.0",
+        "randombytes": "^2.0.0"
+      }
+    },
+    "dir-glob": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz",
+      "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==",
+      "dev": true,
+      "requires": {
+        "path-type": "^3.0.0"
+      }
+    },
+    "dns-equal": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
+      "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
+      "dev": true
+    },
+    "dns-packet": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz",
+      "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==",
+      "dev": true,
+      "requires": {
+        "ip": "^1.1.0",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "dns-txt": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz",
+      "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
+      "dev": true,
+      "requires": {
+        "buffer-indexof": "^1.0.0"
+      }
+    },
+    "dom-converter": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
+      "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==",
+      "dev": true,
+      "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==",
+      "dev": true,
+      "requires": {
+        "domelementtype": "^2.0.1",
+        "entities": "^2.0.0"
+      },
+      "dependencies": {
+        "domelementtype": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz",
+          "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==",
+          "dev": true
+        }
+      }
+    },
+    "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==",
+      "dev": true
+    },
+    "domelementtype": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+      "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
+      "dev": true
+    },
+    "domhandler": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+      "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+      "dev": true,
+      "requires": {
+        "domelementtype": "1"
+      }
+    },
+    "dompurify": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.3.0.tgz",
+      "integrity": "sha512-VV5C6Kr53YVHGOBKO/F86OYX6/iLTw2yVSI721gKetxpHCK/V5TaLEf9ODjRgl1KLSWRMY6cUhAbv/c+IUnwQw==",
+      "optional": true
+    },
+    "domutils": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
+      "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
+      "dev": true,
+      "requires": {
+        "dom-serializer": "0",
+        "domelementtype": "1"
+      }
+    },
+    "dot-prop": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
+      "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
+      "dev": true,
+      "requires": {
+        "is-obj": "^1.0.0"
+      }
+    },
+    "dotenv": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz",
+      "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==",
+      "dev": true
+    },
+    "dotenv-expand": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz",
+      "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==",
+      "dev": true
+    },
+    "duplexer": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
+      "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
+      "dev": true
+    },
+    "duplexer2": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
+      "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
+      "requires": {
+        "readable-stream": "~1.1.9"
+      },
+      "dependencies": {
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+        },
+        "readable-stream": {
+          "version": "1.1.14",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+          "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "0.0.1",
+            "string_decoder": "~0.10.x"
+          }
+        },
+        "string_decoder": {
+          "version": "0.10.31",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+        }
+      }
+    },
+    "duplexify": {
+      "version": "3.7.1",
+      "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+      "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+      "dev": true,
+      "requires": {
+        "end-of-stream": "^1.0.0",
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0",
+        "stream-shift": "^1.0.0"
+      }
+    },
+    "easy-stack": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.0.tgz",
+      "integrity": "sha1-EskbMIWjfwuqM26UhurEv5Tj54g=",
+      "dev": true
+    },
+    "ecc-jsbn": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+      "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+      "requires": {
+        "jsbn": "~0.1.0",
+        "safer-buffer": "^2.1.0"
+      }
+    },
+    "echarts": {
+      "version": "4.8.0",
+      "resolved": "https://registry.npmjs.org/echarts/-/echarts-4.8.0.tgz",
+      "integrity": "sha512-YwShpug8fWngj/RlgxDaYrLBoD+LsZUArrusjNPHpAF+is+gGe38xx4W848AwWMGoi745t3OXM52JedNrv+F6g==",
+      "requires": {
+        "zrender": "4.3.1"
+      }
+    },
+    "ee-first": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+      "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+      "dev": true
+    },
+    "ejs": {
+      "version": "2.7.4",
+      "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz",
+      "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==",
+      "dev": true
+    },
+    "electron-to-chromium": {
+      "version": "1.3.321",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.321.tgz",
+      "integrity": "sha512-jJy/BZK2s2eAjMPXVMSaCmo7/pSY2aKkfQ+LoAb5Wk39qAhyP9r8KU74c4qTgr9cD/lPUhJgReZxxqU0n5puog=="
+    },
+    "element-theme": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/element-theme/-/element-theme-2.0.1.tgz",
+      "integrity": "sha512-3FOUq8xff4CuJfUxNaUCc7bRtf1cEkmIIKwJ9HS5dd7ujegfj5oqPj4MAgPvYr9wSzqbHuknNj+qWvr6O5lGtA==",
+      "requires": {
+        "commander": "^2.9.0",
+        "gulp": "^3.9.1",
+        "gulp-autoprefixer": "^4.0.0",
+        "gulp-cssmin": "^0.1.7",
+        "gulp-nop": "0.0.3",
+        "gulp-sass": "^3.1.0",
+        "ora": "^0.3.0",
+        "run-sequence": "^1.2.2"
+      },
+      "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"
+          }
+        },
+        "cli-cursor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
+          "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
+          "requires": {
+            "restore-cursor": "^1.0.1"
+          }
+        },
+        "cli-spinners": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.2.0.tgz",
+          "integrity": "sha1-hQeHN5E7iA9uyf/ntl6D7Hd2KE8="
+        },
+        "log-symbols": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz",
+          "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=",
+          "requires": {
+            "chalk": "^1.0.0"
+          }
+        },
+        "onetime": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
+          "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k="
+        },
+        "ora": {
+          "version": "0.3.0",
+          "resolved": "https://registry.npmjs.org/ora/-/ora-0.3.0.tgz",
+          "integrity": "sha1-NnoHitJc+wltpQERXrW0AeB9dJU=",
+          "requires": {
+            "chalk": "^1.1.1",
+            "cli-cursor": "^1.0.2",
+            "cli-spinners": "^0.2.0",
+            "log-symbols": "^1.0.2"
+          }
+        },
+        "restore-cursor": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
+          "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
+          "requires": {
+            "exit-hook": "^1.0.0",
+            "onetime": "^1.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=",
+          "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="
+        }
+      }
+    },
+    "element-theme-chalk": {
+      "version": "2.13.0",
+      "resolved": "https://registry.npmjs.org/element-theme-chalk/-/element-theme-chalk-2.13.0.tgz",
+      "integrity": "sha512-xiftE/xHeBPH+sj3jO1Yv3FqGiVhYawVCixmHiPp3pyv6e4Ie8gAw6kvVif0/6fZh0b3+/MtoowphlBSDpuBDA==",
+      "dev": true
+    },
+    "element-ui": {
+      "version": "2.13.0",
+      "resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.13.0.tgz",
+      "integrity": "sha512-KYsHWsBXYbLELS8cdfvgJTOMSUby3UEjvsPV1V1VmgJ/DdkOAS4z3MiOrPxrT9w2Cc5lZ4eVSQiGhYFR5NVChw==",
+      "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.2",
+      "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz",
+      "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==",
+      "dev": true,
+      "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"
+      }
+    },
+    "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==",
+      "dev": true
+    },
+    "emojis-list": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+      "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
+    },
+    "encodeurl": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+      "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+      "dev": true
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "once": "^1.4.0"
+      }
+    },
+    "enhanced-resolve": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz",
+      "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==",
+      "dev": true,
+      "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==",
+          "dev": true,
+          "requires": {
+            "errno": "^0.1.3",
+            "readable-stream": "^2.0.1"
+          }
+        }
+      }
+    },
+    "entities": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz",
+      "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==",
+      "dev": true
+    },
+    "errno": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
+      "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
+      "dev": true,
+      "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.4",
+      "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.4.tgz",
+      "integrity": "sha512-fZ0KkoxSjLFmhW5lHbUT3tLwy3nX1qEzMYo8koY1vrsAco53CMT1djnBSeC/wUjTEZRhZl9iRw7PaMaxfJ4wzQ==",
+      "dev": true,
+      "requires": {
+        "stackframe": "^1.1.0"
+      }
+    },
+    "es-abstract": {
+      "version": "1.16.2",
+      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.2.tgz",
+      "integrity": "sha512-jYo/J8XU2emLXl3OLwfwtuFfuF2w6DYPs+xy9ZfVyPkDcrauu6LYrw/q2TyCtrbc/KUdCiC5e9UajRhgNkVopA==",
+      "dev": true,
+      "requires": {
+        "es-to-primitive": "^1.2.1",
+        "function-bind": "^1.1.1",
+        "has": "^1.0.3",
+        "has-symbols": "^1.0.1",
+        "is-callable": "^1.1.4",
+        "is-regex": "^1.0.4",
+        "object-inspect": "^1.7.0",
+        "object-keys": "^1.1.1",
+        "string.prototype.trimleft": "^2.1.0",
+        "string.prototype.trimright": "^2.1.0"
+      }
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "is-callable": "^1.1.4",
+        "is-date-object": "^1.0.1",
+        "is-symbol": "^1.0.2"
+      }
+    },
+    "escape-html": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+      "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+      "dev": true
+    },
+    "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-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==",
+      "dev": true,
+      "requires": {
+        "esrecurse": "^4.1.0",
+        "estraverse": "^4.1.1"
+      }
+    },
+    "esprima": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+      "dev": true
+    },
+    "esrecurse": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+      "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+      "dev": true,
+      "requires": {
+        "estraverse": "^4.1.0"
+      }
+    },
+    "estraverse": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+      "dev": true
+    },
+    "esutils": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+      "dev": true
+    },
+    "etag": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+      "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+      "dev": true
+    },
+    "event-pubsub": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz",
+      "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==",
+      "dev": true
+    },
+    "eventemitter3": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz",
+      "integrity": "sha1-teEHm1n7XhuidxwKmTvgYKWMmbo="
+    },
+    "events": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz",
+      "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==",
+      "dev": true
+    },
+    "eventsource": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz",
+      "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==",
+      "dev": true,
+      "requires": {
+        "original": "^1.0.0"
+      }
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "md5.js": "^1.3.4",
+        "safe-buffer": "^5.1.1"
+      }
+    },
+    "execa": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+      "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+      "dev": true,
+      "requires": {
+        "cross-spawn": "^6.0.0",
+        "get-stream": "^4.0.0",
+        "is-stream": "^1.1.0",
+        "npm-run-path": "^2.0.0",
+        "p-finally": "^1.0.0",
+        "signal-exit": "^3.0.0",
+        "strip-eof": "^1.0.0"
+      }
+    },
+    "exit-hook": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz",
+      "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g="
+    },
+    "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"
+          }
+        }
+      }
+    },
+    "expand-tilde": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+      "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+      "requires": {
+        "homedir-polyfill": "^1.0.1"
+      }
+    },
+    "express": {
+      "version": "4.17.1",
+      "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
+      "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
+      "dev": true,
+      "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==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "qs": {
+          "version": "6.7.0",
+          "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+          "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+          "dev": true
+        }
+      }
+    },
+    "extend": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+    },
+    "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"
+          }
+        }
+      }
+    },
+    "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"
+          }
+        }
+      }
+    },
+    "extsprintf": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
+    },
+    "fancy-log": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz",
+      "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==",
+      "requires": {
+        "ansi-gray": "^0.1.1",
+        "color-support": "^1.1.3",
+        "parse-node-version": "^1.0.0",
+        "time-stamp": "^1.0.0"
+      }
+    },
+    "fast-deep-equal": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+      "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
+    },
+    "fast-diff": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz",
+      "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig=="
+    },
+    "fast-glob": {
+      "version": "2.2.7",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz",
+      "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==",
+      "dev": true,
+      "requires": {
+        "@mrmlnc/readdir-enhanced": "^2.2.1",
+        "@nodelib/fs.stat": "^1.1.2",
+        "glob-parent": "^3.1.0",
+        "is-glob": "^4.0.0",
+        "merge2": "^1.2.3",
+        "micromatch": "^3.1.10"
+      }
+    },
+    "fast-json-stable-stringify": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+      "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
+    },
+    "fastparse": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz",
+      "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==",
+      "dev": true
+    },
+    "faye-websocket": {
+      "version": "0.10.0",
+      "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
+      "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
+      "dev": true,
+      "requires": {
+        "websocket-driver": ">=0.5.1"
+      }
+    },
+    "fflate": {
+      "version": "0.4.8",
+      "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz",
+      "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA=="
+    },
+    "figgy-pudding": {
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz",
+      "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==",
+      "dev": true
+    },
+    "file-loader": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz",
+      "integrity": "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==",
+      "dev": true,
+      "requires": {
+        "loader-utils": "^1.0.2",
+        "schema-utils": "^1.0.0"
+      }
+    },
+    "filesize": {
+      "version": "3.6.1",
+      "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
+      "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==",
+      "dev": true
+    },
+    "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"
+          }
+        }
+      }
+    },
+    "finalhandler": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+      "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+      "dev": true,
+      "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==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
+    "find-babel-config": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz",
+      "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==",
+      "dev": true,
+      "requires": {
+        "json5": "^0.5.1",
+        "path-exists": "^3.0.0"
+      },
+      "dependencies": {
+        "json5": {
+          "version": "0.5.1",
+          "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+          "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+          "dev": true
+        }
+      }
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "commondir": "^1.0.1",
+        "make-dir": "^2.0.0",
+        "pkg-dir": "^3.0.0"
+      }
+    },
+    "find-index": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz",
+      "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ="
+    },
+    "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"
+      }
+    },
+    "findup-sync": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
+      "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
+      "requires": {
+        "detect-file": "^1.0.0",
+        "is-glob": "^3.1.0",
+        "micromatch": "^3.0.4",
+        "resolve-dir": "^1.0.1"
+      },
+      "dependencies": {
+        "is-glob": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+          "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+          "requires": {
+            "is-extglob": "^2.1.0"
+          }
+        }
+      }
+    },
+    "fined": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz",
+      "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==",
+      "requires": {
+        "expand-tilde": "^2.0.2",
+        "is-plain-object": "^2.0.3",
+        "object.defaults": "^1.1.0",
+        "object.pick": "^1.2.0",
+        "parse-filepath": "^1.0.1"
+      }
+    },
+    "first-chunk-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz",
+      "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04="
+    },
+    "flagged-respawn": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz",
+      "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q=="
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.3.6"
+      }
+    },
+    "follow-redirects": {
+      "version": "1.5.10",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
+      "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
+      "requires": {
+        "debug": "=3.1.0"
+      }
+    },
+    "for-in": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+      "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
+    },
+    "for-own": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+      "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+      "requires": {
+        "for-in": "^1.0.1"
+      }
+    },
+    "forever-agent": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+      "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
+    },
+    "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==",
+      "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=",
+      "dev": true
+    },
+    "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=",
+      "dev": true
+    },
+    "from2": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+      "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0"
+      }
+    },
+    "fs-extra": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
+      "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "jsonfile": "^4.0.0",
+        "universalify": "^0.1.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=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "iferr": "^0.1.5",
+        "imurmurhash": "^0.1.4",
+        "readable-stream": "1 || 2"
+      }
+    },
+    "fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+    },
+    "fsevents": {
+      "version": "1.2.9",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz",
+      "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "nan": "^2.12.1",
+        "node-pre-gyp": "^0.12.0"
+      },
+      "dependencies": {
+        "abbrev": {
+          "version": "1.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "ansi-regex": {
+          "version": "2.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "aproba": {
+          "version": "1.2.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "are-we-there-yet": {
+          "version": "1.1.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "delegates": "^1.0.0",
+            "readable-stream": "^2.0.6"
+          }
+        },
+        "balanced-match": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "brace-expansion": {
+          "version": "1.1.11",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "balanced-match": "^1.0.0",
+            "concat-map": "0.0.1"
+          }
+        },
+        "chownr": {
+          "version": "1.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "code-point-at": {
+          "version": "1.1.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "concat-map": {
+          "version": "0.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "console-control-strings": {
+          "version": "1.1.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "core-util-is": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "debug": {
+          "version": "4.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "deep-extend": {
+          "version": "0.6.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "delegates": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "detect-libc": {
+          "version": "1.0.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "fs-minipass": {
+          "version": "1.2.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "minipass": "^2.2.1"
+          }
+        },
+        "fs.realpath": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "gauge": {
+          "version": "2.7.4",
+          "bundled": true,
+          "dev": true,
+          "optional": 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"
+          }
+        },
+        "glob": {
+          "version": "7.1.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "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"
+          }
+        },
+        "has-unicode": {
+          "version": "2.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "iconv-lite": {
+          "version": "0.4.24",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "safer-buffer": ">= 2.1.2 < 3"
+          }
+        },
+        "ignore-walk": {
+          "version": "3.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "minimatch": "^3.0.4"
+          }
+        },
+        "inflight": {
+          "version": "1.0.6",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "once": "^1.3.0",
+            "wrappy": "1"
+          }
+        },
+        "inherits": {
+          "version": "2.0.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "ini": {
+          "version": "1.3.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "number-is-nan": "^1.0.0"
+          }
+        },
+        "isarray": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "minimatch": {
+          "version": "3.0.4",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "brace-expansion": "^1.1.7"
+          }
+        },
+        "minimist": {
+          "version": "0.0.8",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "minipass": {
+          "version": "2.3.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "safe-buffer": "^5.1.2",
+            "yallist": "^3.0.0"
+          }
+        },
+        "minizlib": {
+          "version": "1.2.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "minipass": "^2.2.1"
+          }
+        },
+        "mkdirp": {
+          "version": "0.5.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "minimist": "0.0.8"
+          }
+        },
+        "ms": {
+          "version": "2.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "needle": {
+          "version": "2.3.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "debug": "^4.1.0",
+            "iconv-lite": "^0.4.4",
+            "sax": "^1.2.4"
+          }
+        },
+        "node-pre-gyp": {
+          "version": "0.12.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "detect-libc": "^1.0.2",
+            "mkdirp": "^0.5.1",
+            "needle": "^2.2.1",
+            "nopt": "^4.0.1",
+            "npm-packlist": "^1.1.6",
+            "npmlog": "^4.0.2",
+            "rc": "^1.2.7",
+            "rimraf": "^2.6.1",
+            "semver": "^5.3.0",
+            "tar": "^4"
+          }
+        },
+        "nopt": {
+          "version": "4.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "abbrev": "1",
+            "osenv": "^0.1.4"
+          }
+        },
+        "npm-bundled": {
+          "version": "1.0.6",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "npm-packlist": {
+          "version": "1.4.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ignore-walk": "^3.0.1",
+            "npm-bundled": "^1.0.1"
+          }
+        },
+        "npmlog": {
+          "version": "4.1.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "are-we-there-yet": "~1.1.2",
+            "console-control-strings": "~1.1.0",
+            "gauge": "~2.7.3",
+            "set-blocking": "~2.0.0"
+          }
+        },
+        "number-is-nan": {
+          "version": "1.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "object-assign": {
+          "version": "4.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "once": {
+          "version": "1.4.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "wrappy": "1"
+          }
+        },
+        "os-homedir": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "os-tmpdir": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "osenv": {
+          "version": "0.1.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "os-homedir": "^1.0.0",
+            "os-tmpdir": "^1.0.0"
+          }
+        },
+        "path-is-absolute": {
+          "version": "1.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "process-nextick-args": {
+          "version": "2.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "rc": {
+          "version": "1.2.8",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "deep-extend": "^0.6.0",
+            "ini": "~1.3.0",
+            "minimist": "^1.2.0",
+            "strip-json-comments": "~2.0.1"
+          },
+          "dependencies": {
+            "minimist": {
+              "version": "1.2.0",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            }
+          }
+        },
+        "readable-stream": {
+          "version": "2.3.6",
+          "bundled": true,
+          "dev": true,
+          "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"
+          }
+        },
+        "rimraf": {
+          "version": "2.6.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "glob": "^7.1.3"
+          }
+        },
+        "safe-buffer": {
+          "version": "5.1.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "safer-buffer": {
+          "version": "2.1.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "sax": {
+          "version": "1.2.4",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "semver": {
+          "version": "5.7.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "set-blocking": {
+          "version": "2.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "signal-exit": {
+          "version": "3.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "string-width": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "code-point-at": "^1.0.0",
+            "is-fullwidth-code-point": "^1.0.0",
+            "strip-ansi": "^3.0.0"
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        },
+        "strip-json-comments": {
+          "version": "2.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "tar": {
+          "version": "4.4.8",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "chownr": "^1.1.1",
+            "fs-minipass": "^1.2.5",
+            "minipass": "^2.3.4",
+            "minizlib": "^1.1.1",
+            "mkdirp": "^0.5.0",
+            "safe-buffer": "^5.1.2",
+            "yallist": "^3.0.2"
+          }
+        },
+        "util-deprecate": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "wide-align": {
+          "version": "1.1.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "string-width": "^1.0.2 || 2"
+          }
+        },
+        "wrappy": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "yallist": {
+          "version": "3.0.3",
+          "bundled": true,
+          "dev": true,
+          "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=="
+    },
+    "gauge": {
+      "version": "2.7.4",
+      "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+      "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+      "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="
+        },
+        "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=",
+          "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=",
+          "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=",
+          "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==",
+      "requires": {
+        "globule": "^1.0.0"
+      }
+    },
+    "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-stdin": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+      "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4="
+    },
+    "get-stream": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+      "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+      "dev": true,
+      "requires": {
+        "pump": "^3.0.0"
+      }
+    },
+    "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=",
+      "requires": {
+        "assert-plus": "^1.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": "3.1.0",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+      "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+      "dev": 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=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^2.1.0"
+          }
+        }
+      }
+    },
+    "glob-stream": {
+      "version": "3.1.18",
+      "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz",
+      "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=",
+      "requires": {
+        "glob": "^4.3.1",
+        "glob2base": "^0.0.12",
+        "minimatch": "^2.0.1",
+        "ordered-read-streams": "^0.1.0",
+        "through2": "^0.6.1",
+        "unique-stream": "^1.0.0"
+      },
+      "dependencies": {
+        "glob": {
+          "version": "4.5.3",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
+          "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=",
+          "requires": {
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^2.0.1",
+            "once": "^1.3.0"
+          }
+        },
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+        },
+        "minimatch": {
+          "version": "2.0.10",
+          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
+          "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=",
+          "requires": {
+            "brace-expansion": "^1.0.0"
+          }
+        },
+        "readable-stream": {
+          "version": "1.0.34",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+          "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "0.0.1",
+            "string_decoder": "~0.10.x"
+          }
+        },
+        "string_decoder": {
+          "version": "0.10.31",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+        },
+        "through2": {
+          "version": "0.6.5",
+          "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+          "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+          "requires": {
+            "readable-stream": ">=1.0.33-1 <1.1.0-0",
+            "xtend": ">=4.0.0 <4.1.0-0"
+          }
+        }
+      }
+    },
+    "glob-to-regexp": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+      "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+      "dev": true
+    },
+    "glob-watcher": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz",
+      "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=",
+      "requires": {
+        "gaze": "^0.5.1"
+      },
+      "dependencies": {
+        "gaze": {
+          "version": "0.5.2",
+          "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz",
+          "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=",
+          "requires": {
+            "globule": "~0.1.0"
+          }
+        },
+        "glob": {
+          "version": "3.1.21",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
+          "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
+          "requires": {
+            "graceful-fs": "~1.2.0",
+            "inherits": "1",
+            "minimatch": "~0.2.11"
+          }
+        },
+        "globule": {
+          "version": "0.1.0",
+          "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz",
+          "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=",
+          "requires": {
+            "glob": "~3.1.21",
+            "lodash": "~1.0.1",
+            "minimatch": "~0.2.11"
+          }
+        },
+        "graceful-fs": {
+          "version": "1.2.3",
+          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
+          "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q="
+        },
+        "inherits": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
+          "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js="
+        },
+        "lodash": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz",
+          "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE="
+        },
+        "lru-cache": {
+          "version": "2.7.3",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+          "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI="
+        },
+        "minimatch": {
+          "version": "0.2.14",
+          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
+          "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
+          "requires": {
+            "lru-cache": "2",
+            "sigmund": "~1.0.0"
+          }
+        }
+      }
+    },
+    "glob2base": {
+      "version": "0.0.12",
+      "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz",
+      "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=",
+      "requires": {
+        "find-index": "^0.1.1"
+      }
+    },
+    "global-modules": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+      "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+      "requires": {
+        "global-prefix": "^1.0.1",
+        "is-windows": "^1.0.1",
+        "resolve-dir": "^1.0.0"
+      }
+    },
+    "global-prefix": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+      "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+      "requires": {
+        "expand-tilde": "^2.0.2",
+        "homedir-polyfill": "^1.0.1",
+        "ini": "^1.3.4",
+        "is-windows": "^1.0.1",
+        "which": "^1.2.14"
+      }
+    },
+    "globals": {
+      "version": "11.12.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+      "dev": true
+    },
+    "globby": {
+      "version": "9.2.0",
+      "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz",
+      "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==",
+      "dev": true,
+      "requires": {
+        "@types/glob": "^7.1.1",
+        "array-union": "^1.0.2",
+        "dir-glob": "^2.2.2",
+        "fast-glob": "^2.2.6",
+        "glob": "^7.1.3",
+        "ignore": "^4.0.3",
+        "pify": "^4.0.1",
+        "slash": "^2.0.0"
+      },
+      "dependencies": {
+        "ignore": {
+          "version": "4.0.6",
+          "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+          "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+          "dev": true
+        }
+      }
+    },
+    "globule": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz",
+      "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==",
+      "requires": {
+        "glob": "~7.1.1",
+        "lodash": "~4.17.10",
+        "minimatch": "~3.0.2"
+      }
+    },
+    "glogg": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz",
+      "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==",
+      "requires": {
+        "sparkles": "^1.0.0"
+      }
+    },
+    "graceful-fs": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
+      "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
+    },
+    "graceful-readlink": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
+      "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU="
+    },
+    "gulp": {
+      "version": "3.9.1",
+      "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz",
+      "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=",
+      "requires": {
+        "archy": "^1.0.0",
+        "chalk": "^1.0.0",
+        "deprecated": "^0.0.1",
+        "gulp-util": "^3.0.0",
+        "interpret": "^1.0.0",
+        "liftoff": "^2.1.0",
+        "minimist": "^1.1.0",
+        "orchestrator": "^0.3.0",
+        "pretty-hrtime": "^1.0.0",
+        "semver": "^4.1.0",
+        "tildify": "^1.0.0",
+        "v8flags": "^2.0.2",
+        "vinyl-fs": "^0.3.0"
+      },
+      "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"
+          }
+        },
+        "semver": {
+          "version": "4.3.6",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
+          "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto="
+        },
+        "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="
+        }
+      }
+    },
+    "gulp-autoprefixer": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/gulp-autoprefixer/-/gulp-autoprefixer-4.1.0.tgz",
+      "integrity": "sha1-Bkr3PMAsrayP800L+T/9+5TqEqo=",
+      "requires": {
+        "autoprefixer": "^7.0.0",
+        "fancy-log": "^1.3.2",
+        "plugin-error": "^0.1.2",
+        "postcss": "^6.0.1",
+        "through2": "^2.0.0",
+        "vinyl-sourcemaps-apply": "^0.2.0"
+      },
+      "dependencies": {
+        "autoprefixer": {
+          "version": "7.2.6",
+          "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz",
+          "integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==",
+          "requires": {
+            "browserslist": "^2.11.3",
+            "caniuse-lite": "^1.0.30000805",
+            "normalize-range": "^0.1.2",
+            "num2fraction": "^1.2.2",
+            "postcss": "^6.0.17",
+            "postcss-value-parser": "^3.2.3"
+          }
+        },
+        "browserslist": {
+          "version": "2.11.3",
+          "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz",
+          "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==",
+          "requires": {
+            "caniuse-lite": "^1.0.30000792",
+            "electron-to-chromium": "^1.3.30"
+          }
+        },
+        "postcss": {
+          "version": "6.0.23",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+          "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+          "requires": {
+            "chalk": "^2.4.1",
+            "source-map": "^0.6.1",
+            "supports-color": "^5.4.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        }
+      }
+    },
+    "gulp-cssmin": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/gulp-cssmin/-/gulp-cssmin-0.1.7.tgz",
+      "integrity": "sha1-9Xb+UhHRB7qpQBUEJJv4eu0VVr0=",
+      "requires": {
+        "clean-css": "^3.1.9",
+        "filesize": "~2.0.0",
+        "graceful-fs": "~2.0.0",
+        "gulp-rename": "~1.1.0",
+        "gulp-util": "~2.2.0",
+        "map-stream": "0.0.4",
+        "temp-write": "~0.1.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "0.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz",
+          "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk="
+        },
+        "ansi-styles": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz",
+          "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94="
+        },
+        "chalk": {
+          "version": "0.5.1",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz",
+          "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=",
+          "requires": {
+            "ansi-styles": "^1.1.0",
+            "escape-string-regexp": "^1.0.0",
+            "has-ansi": "^0.1.0",
+            "strip-ansi": "^0.3.0",
+            "supports-color": "^0.2.0"
+          }
+        },
+        "clean-css": {
+          "version": "3.4.28",
+          "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz",
+          "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=",
+          "requires": {
+            "commander": "2.8.x",
+            "source-map": "0.4.x"
+          }
+        },
+        "commander": {
+          "version": "2.8.1",
+          "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
+          "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
+          "requires": {
+            "graceful-readlink": ">= 1.0.0"
+          }
+        },
+        "dateformat": {
+          "version": "1.0.12",
+          "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
+          "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
+          "requires": {
+            "get-stdin": "^4.0.1",
+            "meow": "^3.3.0"
+          }
+        },
+        "filesize": {
+          "version": "2.0.4",
+          "resolved": "https://registry.npmjs.org/filesize/-/filesize-2.0.4.tgz",
+          "integrity": "sha1-eAWUHGD83+Y/RtfqNYxZreEcEyU="
+        },
+        "graceful-fs": {
+          "version": "2.0.3",
+          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz",
+          "integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA="
+        },
+        "gulp-util": {
+          "version": "2.2.20",
+          "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-2.2.20.tgz",
+          "integrity": "sha1-1xRuVyiRC9jwR6awseVJvCLb1kw=",
+          "requires": {
+            "chalk": "^0.5.0",
+            "dateformat": "^1.0.7-1.2.3",
+            "lodash._reinterpolate": "^2.4.1",
+            "lodash.template": "^2.4.1",
+            "minimist": "^0.2.0",
+            "multipipe": "^0.1.0",
+            "through2": "^0.5.0",
+            "vinyl": "^0.2.1"
+          }
+        },
+        "has-ansi": {
+          "version": "0.1.0",
+          "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz",
+          "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=",
+          "requires": {
+            "ansi-regex": "^0.2.0"
+          }
+        },
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+        },
+        "lodash._reinterpolate": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz",
+          "integrity": "sha1-TxInqlqHEfxjL1sHofRgequLMiI="
+        },
+        "lodash.escape": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-2.4.1.tgz",
+          "integrity": "sha1-LOEsXghNsKV92l5dHu659dF1o7Q=",
+          "requires": {
+            "lodash._escapehtmlchar": "~2.4.1",
+            "lodash._reunescapedhtml": "~2.4.1",
+            "lodash.keys": "~2.4.1"
+          }
+        },
+        "lodash.keys": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
+          "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
+          "requires": {
+            "lodash._isnative": "~2.4.1",
+            "lodash._shimkeys": "~2.4.1",
+            "lodash.isobject": "~2.4.1"
+          }
+        },
+        "lodash.template": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-2.4.1.tgz",
+          "integrity": "sha1-nmEQB+32KRKal0qzxIuBez4c8g0=",
+          "requires": {
+            "lodash._escapestringchar": "~2.4.1",
+            "lodash._reinterpolate": "~2.4.1",
+            "lodash.defaults": "~2.4.1",
+            "lodash.escape": "~2.4.1",
+            "lodash.keys": "~2.4.1",
+            "lodash.templatesettings": "~2.4.1",
+            "lodash.values": "~2.4.1"
+          }
+        },
+        "lodash.templatesettings": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz",
+          "integrity": "sha1-6nbHXRHrhtTb6JqDiTu4YZKaxpk=",
+          "requires": {
+            "lodash._reinterpolate": "~2.4.1",
+            "lodash.escape": "~2.4.1"
+          }
+        },
+        "minimist": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz",
+          "integrity": "sha1-Tf/lJdriuGTGbC4jxicdev3s784="
+        },
+        "readable-stream": {
+          "version": "1.0.34",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+          "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "0.0.1",
+            "string_decoder": "~0.10.x"
+          }
+        },
+        "source-map": {
+          "version": "0.4.4",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+          "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+          "requires": {
+            "amdefine": ">=0.0.4"
+          }
+        },
+        "string_decoder": {
+          "version": "0.10.31",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+        },
+        "strip-ansi": {
+          "version": "0.3.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz",
+          "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=",
+          "requires": {
+            "ansi-regex": "^0.2.1"
+          }
+        },
+        "supports-color": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz",
+          "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo="
+        },
+        "through2": {
+          "version": "0.5.1",
+          "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz",
+          "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=",
+          "requires": {
+            "readable-stream": "~1.0.17",
+            "xtend": "~3.0.0"
+          }
+        },
+        "vinyl": {
+          "version": "0.2.3",
+          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.2.3.tgz",
+          "integrity": "sha1-vKk4IJWC7FpJrVOKAPofEl5RMlI=",
+          "requires": {
+            "clone-stats": "~0.0.1"
+          }
+        },
+        "xtend": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",
+          "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo="
+        }
+      }
+    },
+    "gulp-nop": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/gulp-nop/-/gulp-nop-0.0.3.tgz",
+      "integrity": "sha1-6ezYuZTVWBerXOFroY9hTXgQ7L4=",
+      "requires": {
+        "gulp-util": "~2.2.14",
+        "through": "~2.3.4"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "0.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz",
+          "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk="
+        },
+        "ansi-styles": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz",
+          "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94="
+        },
+        "chalk": {
+          "version": "0.5.1",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz",
+          "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=",
+          "requires": {
+            "ansi-styles": "^1.1.0",
+            "escape-string-regexp": "^1.0.0",
+            "has-ansi": "^0.1.0",
+            "strip-ansi": "^0.3.0",
+            "supports-color": "^0.2.0"
+          }
+        },
+        "dateformat": {
+          "version": "1.0.12",
+          "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
+          "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
+          "requires": {
+            "get-stdin": "^4.0.1",
+            "meow": "^3.3.0"
+          }
+        },
+        "gulp-util": {
+          "version": "2.2.20",
+          "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-2.2.20.tgz",
+          "integrity": "sha1-1xRuVyiRC9jwR6awseVJvCLb1kw=",
+          "requires": {
+            "chalk": "^0.5.0",
+            "dateformat": "^1.0.7-1.2.3",
+            "lodash._reinterpolate": "^2.4.1",
+            "lodash.template": "^2.4.1",
+            "minimist": "^0.2.0",
+            "multipipe": "^0.1.0",
+            "through2": "^0.5.0",
+            "vinyl": "^0.2.1"
+          }
+        },
+        "has-ansi": {
+          "version": "0.1.0",
+          "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz",
+          "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=",
+          "requires": {
+            "ansi-regex": "^0.2.0"
+          }
+        },
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+        },
+        "lodash._reinterpolate": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz",
+          "integrity": "sha1-TxInqlqHEfxjL1sHofRgequLMiI="
+        },
+        "lodash.escape": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-2.4.1.tgz",
+          "integrity": "sha1-LOEsXghNsKV92l5dHu659dF1o7Q=",
+          "requires": {
+            "lodash._escapehtmlchar": "~2.4.1",
+            "lodash._reunescapedhtml": "~2.4.1",
+            "lodash.keys": "~2.4.1"
+          }
+        },
+        "lodash.keys": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
+          "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
+          "requires": {
+            "lodash._isnative": "~2.4.1",
+            "lodash._shimkeys": "~2.4.1",
+            "lodash.isobject": "~2.4.1"
+          }
+        },
+        "lodash.template": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-2.4.1.tgz",
+          "integrity": "sha1-nmEQB+32KRKal0qzxIuBez4c8g0=",
+          "requires": {
+            "lodash._escapestringchar": "~2.4.1",
+            "lodash._reinterpolate": "~2.4.1",
+            "lodash.defaults": "~2.4.1",
+            "lodash.escape": "~2.4.1",
+            "lodash.keys": "~2.4.1",
+            "lodash.templatesettings": "~2.4.1",
+            "lodash.values": "~2.4.1"
+          }
+        },
+        "lodash.templatesettings": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz",
+          "integrity": "sha1-6nbHXRHrhtTb6JqDiTu4YZKaxpk=",
+          "requires": {
+            "lodash._reinterpolate": "~2.4.1",
+            "lodash.escape": "~2.4.1"
+          }
+        },
+        "minimist": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz",
+          "integrity": "sha1-Tf/lJdriuGTGbC4jxicdev3s784="
+        },
+        "readable-stream": {
+          "version": "1.0.34",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+          "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "0.0.1",
+            "string_decoder": "~0.10.x"
+          }
+        },
+        "string_decoder": {
+          "version": "0.10.31",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+        },
+        "strip-ansi": {
+          "version": "0.3.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz",
+          "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=",
+          "requires": {
+            "ansi-regex": "^0.2.1"
+          }
+        },
+        "supports-color": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz",
+          "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo="
+        },
+        "through2": {
+          "version": "0.5.1",
+          "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz",
+          "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=",
+          "requires": {
+            "readable-stream": "~1.0.17",
+            "xtend": "~3.0.0"
+          }
+        },
+        "vinyl": {
+          "version": "0.2.3",
+          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.2.3.tgz",
+          "integrity": "sha1-vKk4IJWC7FpJrVOKAPofEl5RMlI=",
+          "requires": {
+            "clone-stats": "~0.0.1"
+          }
+        },
+        "xtend": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",
+          "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo="
+        }
+      }
+    },
+    "gulp-rename": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.1.0.tgz",
+      "integrity": "sha1-kwkKqvTThsB/IFOKaIjxXvunJ6E=",
+      "requires": {
+        "map-stream": ">=0.0.4"
+      }
+    },
+    "gulp-sass": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-3.2.1.tgz",
+      "integrity": "sha512-UATbRpSDsyXCnpYSPBUEvdvtSEzksJs7/oQ0CujIpzKqKrO6vlnYwhX2UTsGrf4rNLwqlSSaM271It0uHYvJ3Q==",
+      "requires": {
+        "gulp-util": "^3.0",
+        "lodash.clonedeep": "^4.3.2",
+        "node-sass": "^4.8.3",
+        "through2": "^2.0.0",
+        "vinyl-sourcemaps-apply": "^0.2.0"
+      }
+    },
+    "gulp-util": {
+      "version": "3.0.8",
+      "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz",
+      "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=",
+      "requires": {
+        "array-differ": "^1.0.0",
+        "array-uniq": "^1.0.2",
+        "beeper": "^1.0.0",
+        "chalk": "^1.0.0",
+        "dateformat": "^2.0.0",
+        "fancy-log": "^1.1.0",
+        "gulplog": "^1.0.0",
+        "has-gulplog": "^0.1.0",
+        "lodash._reescape": "^3.0.0",
+        "lodash._reevaluate": "^3.0.0",
+        "lodash._reinterpolate": "^3.0.0",
+        "lodash.template": "^3.0.0",
+        "minimist": "^1.1.0",
+        "multipipe": "^0.1.2",
+        "object-assign": "^3.0.0",
+        "replace-ext": "0.0.1",
+        "through2": "^2.0.0",
+        "vinyl": "^0.5.0"
+      },
+      "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"
+          }
+        },
+        "object-assign": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
+          "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I="
+        },
+        "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="
+        }
+      }
+    },
+    "gulplog": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
+      "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
+      "requires": {
+        "glogg": "^1.0.0"
+      }
+    },
+    "gzip-size": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz",
+      "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==",
+      "dev": true,
+      "requires": {
+        "duplexer": "^0.1.1",
+        "pify": "^4.0.1"
+      }
+    },
+    "handle-thing": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz",
+      "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==",
+      "dev": true
+    },
+    "har-schema": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+      "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
+    },
+    "har-validator": {
+      "version": "5.1.3",
+      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
+      "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
+      "requires": {
+        "ajv": "^6.5.5",
+        "har-schema": "^2.0.0"
+      }
+    },
+    "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-flag": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+    },
+    "has-gulplog": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
+      "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
+      "requires": {
+        "sparkles": "^1.0.0"
+      }
+    },
+    "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==",
+      "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="
+    },
+    "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-buffer": {
+          "version": "1.1.6",
+          "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+          "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+        },
+        "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.0.4",
+      "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+      "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "hash-sum": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
+      "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
+      "dev": true
+    },
+    "hash.js": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+      "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.3",
+        "minimalistic-assert": "^1.0.1"
+      }
+    },
+    "he": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+      "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+      "dev": true
+    },
+    "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==",
+      "dev": true
+    },
+    "highlight.js": {
+      "version": "9.16.2",
+      "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.16.2.tgz",
+      "integrity": "sha512-feMUrVLZvjy0oC7FVJQcSQRqbBq9kwqnYE4+Kj9ZjbHh3g+BisiPgF49NyQbVLNdrL/qqZr3Ca9yOKwgn2i/tw=="
+    },
+    "highlight.js-async-webpack": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/highlight.js-async-webpack/-/highlight.js-async-webpack-1.0.4.tgz",
+      "integrity": "sha1-wGtnv5nwSQRdYrdW5YVbCRLsYWw="
+    },
+    "hmac-drbg": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+      "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+      "dev": true,
+      "requires": {
+        "hash.js": "^1.0.3",
+        "minimalistic-assert": "^1.0.0",
+        "minimalistic-crypto-utils": "^1.0.1"
+      }
+    },
+    "homedir-polyfill": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+      "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+      "requires": {
+        "parse-passwd": "^1.0.0"
+      }
+    },
+    "hoopy": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz",
+      "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==",
+      "dev": true
+    },
+    "hosted-git-info": {
+      "version": "2.8.5",
+      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz",
+      "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg=="
+    },
+    "hpack.js": {
+      "version": "2.1.6",
+      "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
+      "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "obuf": "^1.0.0",
+        "readable-stream": "^2.0.1",
+        "wbuf": "^1.1.0"
+      }
+    },
+    "hsl-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz",
+      "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=",
+      "dev": true
+    },
+    "hsla-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz",
+      "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=",
+      "dev": true
+    },
+    "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==",
+      "dev": true
+    },
+    "html-entities": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
+      "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=",
+      "dev": true
+    },
+    "html-minifier": {
+      "version": "3.5.21",
+      "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz",
+      "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==",
+      "dev": true,
+      "requires": {
+        "camel-case": "3.0.x",
+        "clean-css": "4.2.x",
+        "commander": "2.17.x",
+        "he": "1.2.x",
+        "param-case": "2.1.x",
+        "relateurl": "0.2.x",
+        "uglify-js": "3.4.x"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "2.17.1",
+          "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
+          "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
+          "dev": true
+        }
+      }
+    },
+    "html-tags": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz",
+      "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=",
+      "dev": true
+    },
+    "html-webpack-plugin": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz",
+      "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=",
+      "dev": true,
+      "requires": {
+        "html-minifier": "^3.2.3",
+        "loader-utils": "^0.2.16",
+        "lodash": "^4.17.3",
+        "pretty-error": "^2.0.2",
+        "tapable": "^1.0.0",
+        "toposort": "^1.0.0",
+        "util.promisify": "1.0.0"
+      },
+      "dependencies": {
+        "big.js": {
+          "version": "3.2.0",
+          "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
+          "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==",
+          "dev": true
+        },
+        "json5": {
+          "version": "0.5.1",
+          "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+          "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+          "dev": true
+        },
+        "loader-utils": {
+          "version": "0.2.17",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
+          "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
+          "dev": true,
+          "requires": {
+            "big.js": "^3.1.3",
+            "emojis-list": "^2.0.0",
+            "json5": "^0.5.0",
+            "object-assign": "^4.0.1"
+          }
+        }
+      }
+    },
+    "html2canvas": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.2.1.tgz",
+      "integrity": "sha512-XoP12gER5pvxBADy4KKTMinZ69PP/+EZbILEk+WDCJFPIkhbREwMy2nhuMBFWPUDGWCw1DCrhDlbADJ5m8dC5g==",
+      "requires": {
+        "css-line-break": "2.0.1"
+      }
+    },
+    "htmlparser2": {
+      "version": "3.10.1",
+      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
+      "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
+      "dev": true,
+      "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==",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "3.4.0",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
+          "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
+          "dev": true,
+          "requires": {
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
+          }
+        }
+      }
+    },
+    "http-deceiver": {
+      "version": "1.2.7",
+      "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
+      "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
+      "dev": true
+    },
+    "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==",
+      "dev": true,
+      "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=",
+          "dev": true
+        }
+      }
+    },
+    "http-parser-js": {
+      "version": "0.4.10",
+      "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz",
+      "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=",
+      "dev": true
+    },
+    "http-proxy": {
+      "version": "1.18.0",
+      "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz",
+      "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==",
+      "dev": true,
+      "requires": {
+        "eventemitter3": "^4.0.0",
+        "follow-redirects": "^1.0.0",
+        "requires-port": "^1.0.0"
+      },
+      "dependencies": {
+        "eventemitter3": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz",
+          "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==",
+          "dev": true
+        }
+      }
+    },
+    "http-proxy-middleware": {
+      "version": "0.19.1",
+      "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz",
+      "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==",
+      "dev": true,
+      "requires": {
+        "http-proxy": "^1.17.0",
+        "is-glob": "^4.0.0",
+        "lodash": "^4.17.11",
+        "micromatch": "^3.1.10"
+      }
+    },
+    "http-signature": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+      "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+      "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=",
+      "dev": true
+    },
+    "human-signals": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
+      "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
+      "dev": true
+    },
+    "iconv-lite": {
+      "version": "0.4.24",
+      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+      "dev": true,
+      "requires": {
+        "safer-buffer": ">= 2.1.2 < 3"
+      }
+    },
+    "icss-replace-symbols": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
+      "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=",
+      "dev": true
+    },
+    "icss-utils": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz",
+      "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=",
+      "dev": true,
+      "requires": {
+        "postcss": "^6.0.1"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "6.0.23",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+          "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+          "dev": true,
+          "requires": {
+            "chalk": "^2.4.1",
+            "source-map": "^0.6.1",
+            "supports-color": "^5.4.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "ieee754": {
+      "version": "1.1.13",
+      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
+      "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
+      "dev": true
+    },
+    "iferr": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+      "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
+      "dev": true
+    },
+    "ignore": {
+      "version": "3.3.10",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
+      "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
+      "dev": true
+    },
+    "import-cwd": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz",
+      "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=",
+      "dev": true,
+      "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=",
+      "dev": true,
+      "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=",
+      "dev": true,
+      "requires": {
+        "resolve-from": "^3.0.0"
+      }
+    },
+    "import-local": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
+      "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
+      "dev": true,
+      "requires": {
+        "pkg-dir": "^3.0.0",
+        "resolve-cwd": "^2.0.0"
+      }
+    },
+    "imurmurhash": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+      "dev": true
+    },
+    "in-publish": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz",
+      "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E="
+    },
+    "indent-string": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+      "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+      "requires": {
+        "repeating": "^2.0.0"
+      }
+    },
+    "indexes-of": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
+      "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
+      "dev": true
+    },
+    "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==",
+      "dev": true
+    },
+    "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.5",
+      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+      "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
+    },
+    "internal-ip": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz",
+      "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==",
+      "dev": true,
+      "requires": {
+        "default-gateway": "^4.2.0",
+        "ipaddr.js": "^1.9.0"
+      },
+      "dependencies": {
+        "default-gateway": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz",
+          "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==",
+          "dev": true,
+          "requires": {
+            "execa": "^1.0.0",
+            "ip-regex": "^2.1.0"
+          }
+        }
+      }
+    },
+    "interpret": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
+      "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw=="
+    },
+    "invariant": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+      "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+      "dev": true,
+      "requires": {
+        "loose-envify": "^1.0.0"
+      }
+    },
+    "invert-kv": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
+      "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
+      "dev": true
+    },
+    "ip": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
+      "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+      "dev": true
+    },
+    "ip-regex": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
+      "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
+      "dev": true
+    },
+    "ipaddr.js": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
+      "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==",
+      "dev": true
+    },
+    "is-absolute": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
+      "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
+      "requires": {
+        "is-relative": "^1.0.0",
+        "is-windows": "^1.0.1"
+      }
+    },
+    "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=",
+      "dev": true
+    },
+    "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": {
+        "is-buffer": {
+          "version": "1.1.6",
+          "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+          "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+        },
+        "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-arguments": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz",
+      "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA=="
+    },
+    "is-arrayish": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+    },
+    "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=",
+      "dev": true,
+      "requires": {
+        "binary-extensions": "^1.0.0"
+      }
+    },
+    "is-buffer": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz",
+      "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A=="
+    },
+    "is-callable": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
+      "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
+      "dev": true
+    },
+    "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=",
+      "dev": true,
+      "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-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": {
+        "is-buffer": {
+          "version": "1.1.6",
+          "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+          "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+        },
+        "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.1",
+      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+      "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY="
+    },
+    "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=",
+      "dev": true
+    },
+    "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.0.2",
+      "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+      "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+      "requires": {
+        "number-is-nan": "^1.0.0"
+      }
+    },
+    "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-glob": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+      "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+      "dev": true,
+      "requires": {
+        "is-extglob": "^2.1.1"
+      }
+    },
+    "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": {
+        "is-buffer": {
+          "version": "1.1.6",
+          "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+          "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+        },
+        "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-obj": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+      "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+      "dev": true
+    },
+    "is-path-cwd": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
+      "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
+      "dev": true
+    },
+    "is-path-in-cwd": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz",
+      "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==",
+      "dev": true,
+      "requires": {
+        "is-path-inside": "^2.1.0"
+      }
+    },
+    "is-path-inside": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz",
+      "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
+      "dev": true,
+      "requires": {
+        "path-is-inside": "^1.0.2"
+      }
+    },
+    "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=",
+      "dev": true
+    },
+    "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.0.4",
+      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+      "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+      "requires": {
+        "has": "^1.0.1"
+      }
+    },
+    "is-relative": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
+      "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
+      "requires": {
+        "is-unc-path": "^1.0.0"
+      }
+    },
+    "is-resolvable": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+      "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+      "dev": true
+    },
+    "is-stream": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+      "dev": true
+    },
+    "is-svg": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz",
+      "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==",
+      "dev": true,
+      "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==",
+      "dev": true,
+      "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="
+    },
+    "is-unc-path": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
+      "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
+      "requires": {
+        "unc-path-regex": "^0.1.2"
+      }
+    },
+    "is-utf8": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+      "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI="
+    },
+    "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=",
+      "dev": true
+    },
+    "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="
+    },
+    "javascript-stringify": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-1.6.0.tgz",
+      "integrity": "sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM=",
+      "dev": true
+    },
+    "js-base64": {
+      "version": "2.5.1",
+      "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz",
+      "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw=="
+    },
+    "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-levenshtein": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz",
+      "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==",
+      "dev": true
+    },
+    "js-message": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.5.tgz",
+      "integrity": "sha1-IwDSSxrwjondCVvBpMnJz8uJLRU=",
+      "dev": true
+    },
+    "js-queue": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/js-queue/-/js-queue-2.0.0.tgz",
+      "integrity": "sha1-NiITz4YPRo8BJfxslqvBdCUx+Ug=",
+      "dev": true,
+      "requires": {
+        "easy-stack": "^1.0.0"
+      }
+    },
+    "js-tokens": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+      "dev": true
+    },
+    "js-yaml": {
+      "version": "3.13.1",
+      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+      "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+      "dev": true,
+      "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="
+    },
+    "jsesc": {
+      "version": "2.5.2",
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+      "dev": true
+    },
+    "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==",
+      "dev": true
+    },
+    "json-schema": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
+    },
+    "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-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="
+    },
+    "json3": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz",
+      "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==",
+      "dev": true
+    },
+    "json5": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz",
+      "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==",
+      "dev": true,
+      "requires": {
+        "minimist": "^1.2.0"
+      }
+    },
+    "jsonfile": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+      "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.6"
+      }
+    },
+    "jspdf": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.3.1.tgz",
+      "integrity": "sha512-1vp0USP1mQi1h7NKpwxjFgQkJ5ncZvtH858aLpycUc/M+r/RpWJT8PixAU7Cw/3fPd4fpC8eB/Bj42LnsR21YQ==",
+      "requires": {
+        "atob": "^2.1.2",
+        "btoa": "^1.2.1",
+        "canvg": "^3.0.6",
+        "core-js": "^3.6.0",
+        "dompurify": "^2.2.0",
+        "fflate": "^0.4.8",
+        "html2canvas": "^1.0.0-rc.5"
+      },
+      "dependencies": {
+        "core-js": {
+          "version": "3.16.1",
+          "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.1.tgz",
+          "integrity": "sha512-AAkP8i35EbefU+JddyWi12AWE9f2N/qr/pwnDtWz4nyUIBGMJPX99ANFFRSw6FefM374lDujdtLDyhN2A/btHw==",
+          "optional": true
+        }
+      }
+    },
+    "jsprim": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+      "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+      "requires": {
+        "assert-plus": "1.0.0",
+        "extsprintf": "1.3.0",
+        "json-schema": "0.2.3",
+        "verror": "1.10.0"
+      }
+    },
+    "killable": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz",
+      "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==",
+      "dev": true
+    },
+    "kind-of": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+      "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.3.0",
+        "shell-quote": "^1.6.1"
+      }
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "launch-editor": "^2.2.1"
+      }
+    },
+    "lcid": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
+      "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
+      "dev": true,
+      "requires": {
+        "invert-kv": "^2.0.0"
+      }
+    },
+    "liftoff": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz",
+      "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=",
+      "requires": {
+        "extend": "^3.0.0",
+        "findup-sync": "^2.0.0",
+        "fined": "^1.0.1",
+        "flagged-respawn": "^1.0.0",
+        "is-plain-object": "^2.0.4",
+        "object.map": "^1.0.0",
+        "rechoir": "^0.6.2",
+        "resolve": "^1.1.7"
+      }
+    },
+    "lines-and-columns": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
+      "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
+      "dev": true
+    },
+    "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=",
+      "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=",
+          "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="
+        }
+      }
+    },
+    "loader-runner": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
+      "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
+      "dev": true
+    },
+    "loader-utils": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+      "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+      "requires": {
+        "big.js": "^5.2.2",
+        "emojis-list": "^2.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": "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"
+      }
+    },
+    "lodash": {
+      "version": "4.17.15",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+      "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
+    },
+    "lodash._basecopy": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
+      "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY="
+    },
+    "lodash._basetostring": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz",
+      "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U="
+    },
+    "lodash._basevalues": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz",
+      "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc="
+    },
+    "lodash._escapehtmlchar": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz",
+      "integrity": "sha1-32fDu2t+jh6DGrSL+geVuSr+iZ0=",
+      "requires": {
+        "lodash._htmlescapes": "~2.4.1"
+      }
+    },
+    "lodash._escapestringchar": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash._escapestringchar/-/lodash._escapestringchar-2.4.1.tgz",
+      "integrity": "sha1-7P4iYYoq3lC/7qQ5N+Ud9m8O23I="
+    },
+    "lodash._getnative": {
+      "version": "3.9.1",
+      "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
+      "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U="
+    },
+    "lodash._htmlescapes": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash._htmlescapes/-/lodash._htmlescapes-2.4.1.tgz",
+      "integrity": "sha1-MtFL8IRLbeb4tioFG09nwii2JMs="
+    },
+    "lodash._isiterateecall": {
+      "version": "3.0.9",
+      "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
+      "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw="
+    },
+    "lodash._isnative": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz",
+      "integrity": "sha1-PqZAS3hKe+g2x7V1gOHN95sUgyw="
+    },
+    "lodash._objecttypes": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz",
+      "integrity": "sha1-fAt/admKH3ZSn4kLDNsbTf7BHBE="
+    },
+    "lodash._reescape": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz",
+      "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo="
+    },
+    "lodash._reevaluate": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz",
+      "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0="
+    },
+    "lodash._reinterpolate": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+      "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0="
+    },
+    "lodash._reunescapedhtml": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash._reunescapedhtml/-/lodash._reunescapedhtml-2.4.1.tgz",
+      "integrity": "sha1-dHxPxAED6zu4oJduVx96JlnpO6c=",
+      "requires": {
+        "lodash._htmlescapes": "~2.4.1",
+        "lodash.keys": "~2.4.1"
+      },
+      "dependencies": {
+        "lodash.keys": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
+          "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
+          "requires": {
+            "lodash._isnative": "~2.4.1",
+            "lodash._shimkeys": "~2.4.1",
+            "lodash.isobject": "~2.4.1"
+          }
+        }
+      }
+    },
+    "lodash._root": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz",
+      "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI="
+    },
+    "lodash._shimkeys": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz",
+      "integrity": "sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM=",
+      "requires": {
+        "lodash._objecttypes": "~2.4.1"
+      }
+    },
+    "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.defaults": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-2.4.1.tgz",
+      "integrity": "sha1-p+iIXwXmiFEUS24SqPNngCa8TFQ=",
+      "requires": {
+        "lodash._objecttypes": "~2.4.1",
+        "lodash.keys": "~2.4.1"
+      },
+      "dependencies": {
+        "lodash.keys": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
+          "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
+          "requires": {
+            "lodash._isnative": "~2.4.1",
+            "lodash._shimkeys": "~2.4.1",
+            "lodash.isobject": "~2.4.1"
+          }
+        }
+      }
+    },
+    "lodash.defaultsdeep": {
+      "version": "4.6.1",
+      "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz",
+      "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==",
+      "dev": true
+    },
+    "lodash.escape": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz",
+      "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=",
+      "requires": {
+        "lodash._root": "^3.0.0"
+      }
+    },
+    "lodash.isarguments": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+      "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo="
+    },
+    "lodash.isarray": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
+      "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U="
+    },
+    "lodash.isobject": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz",
+      "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=",
+      "requires": {
+        "lodash._objecttypes": "~2.4.1"
+      }
+    },
+    "lodash.kebabcase": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz",
+      "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=",
+      "dev": true
+    },
+    "lodash.keys": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
+      "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
+      "requires": {
+        "lodash._getnative": "^3.0.0",
+        "lodash.isarguments": "^3.0.0",
+        "lodash.isarray": "^3.0.0"
+      }
+    },
+    "lodash.mapvalues": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz",
+      "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=",
+      "dev": true
+    },
+    "lodash.memoize": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+      "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
+      "dev": true
+    },
+    "lodash.restparam": {
+      "version": "3.6.1",
+      "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
+      "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU="
+    },
+    "lodash.template": {
+      "version": "3.6.2",
+      "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz",
+      "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=",
+      "requires": {
+        "lodash._basecopy": "^3.0.0",
+        "lodash._basetostring": "^3.0.0",
+        "lodash._basevalues": "^3.0.0",
+        "lodash._isiterateecall": "^3.0.0",
+        "lodash._reinterpolate": "^3.0.0",
+        "lodash.escape": "^3.0.0",
+        "lodash.keys": "^3.0.0",
+        "lodash.restparam": "^3.0.0",
+        "lodash.templatesettings": "^3.0.0"
+      }
+    },
+    "lodash.templatesettings": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz",
+      "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=",
+      "requires": {
+        "lodash._reinterpolate": "^3.0.0",
+        "lodash.escape": "^3.0.0"
+      }
+    },
+    "lodash.transform": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz",
+      "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=",
+      "dev": true
+    },
+    "lodash.uniq": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+      "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
+      "dev": true
+    },
+    "lodash.values": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-2.4.1.tgz",
+      "integrity": "sha1-q/UUQ2s8twUAFieXjLzzCxKA7qQ=",
+      "requires": {
+        "lodash.keys": "~2.4.1"
+      },
+      "dependencies": {
+        "lodash.keys": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
+          "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
+          "requires": {
+            "lodash._isnative": "~2.4.1",
+            "lodash._shimkeys": "~2.4.1",
+            "lodash.isobject": "~2.4.1"
+          }
+        }
+      }
+    },
+    "log-symbols": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
+      "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.0.1"
+      }
+    },
+    "loglevel": {
+      "version": "1.6.6",
+      "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.6.tgz",
+      "integrity": "sha512-Sgr5lbboAUBo3eXCSPL4/KoVz3ROKquOjcctxmHIt+vol2DrqTQe3SwkKKuYhEiWB5kYa13YyopJ69deJ1irzQ==",
+      "dev": true
+    },
+    "loose-envify": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+      "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+      "dev": true,
+      "requires": {
+        "js-tokens": "^3.0.0 || ^4.0.0"
+      }
+    },
+    "loud-rejection": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+      "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+      "requires": {
+        "currently-unhandled": "^0.4.1",
+        "signal-exit": "^3.0.0"
+      }
+    },
+    "lower-case": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
+      "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=",
+      "dev": true
+    },
+    "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==",
+      "dev": true,
+      "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==",
+      "dev": true,
+      "requires": {
+        "pify": "^4.0.1",
+        "semver": "^5.6.0"
+      }
+    },
+    "make-iterator": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
+      "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
+      "requires": {
+        "kind-of": "^6.0.2"
+      }
+    },
+    "mamacro": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz",
+      "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==",
+      "dev": true
+    },
+    "map-age-cleaner": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
+      "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
+      "dev": true,
+      "requires": {
+        "p-defer": "^1.0.0"
+      }
+    },
+    "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="
+    },
+    "map-stream": {
+      "version": "0.0.4",
+      "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.4.tgz",
+      "integrity": "sha1-XsbekCE+9sey65Nn6a3o2k79tos="
+    },
+    "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"
+      }
+    },
+    "mavon-editor": {
+      "version": "2.7.7",
+      "resolved": "https://registry.npmjs.org/mavon-editor/-/mavon-editor-2.7.7.tgz",
+      "integrity": "sha512-lXnYe+dztKepbv8bi2nedRqG/AwyUDF8gmkv9lHD3fpVJ1+pzAS6YILRIryKCvO9qPIOPEThHsda2DxtlzRsZA==",
+      "requires": {
+        "highlight.js": "^9.11.0",
+        "highlight.js-async-webpack": "^1.0.4"
+      }
+    },
+    "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==",
+      "dev": true,
+      "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==",
+      "dev": true
+    },
+    "media-typer": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+      "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+      "dev": true
+    },
+    "mem": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
+      "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
+      "dev": true,
+      "requires": {
+        "map-age-cleaner": "^0.1.1",
+        "mimic-fn": "^2.0.0",
+        "p-is-promise": "^2.0.0"
+      },
+      "dependencies": {
+        "mimic-fn": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+          "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+          "dev": true
+        }
+      }
+    },
+    "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=",
+      "dev": true,
+      "requires": {
+        "errno": "^0.1.3",
+        "readable-stream": "^2.0.1"
+      }
+    },
+    "meow": {
+      "version": "3.7.0",
+      "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+      "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+      "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=",
+      "dev": true
+    },
+    "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==",
+      "dev": true,
+      "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==",
+          "dev": true
+        }
+      }
+    },
+    "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==",
+      "dev": true
+    },
+    "merge2": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz",
+      "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==",
+      "dev": true
+    },
+    "methods": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+      "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
+      "dev": true
+    },
+    "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"
+      }
+    },
+    "miller-rabin": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+      "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.0.0",
+        "brorand": "^1.0.1"
+      }
+    },
+    "mime": {
+      "version": "2.4.4",
+      "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz",
+      "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==",
+      "dev": true
+    },
+    "mime-db": {
+      "version": "1.42.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz",
+      "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ=="
+    },
+    "mime-types": {
+      "version": "2.1.25",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz",
+      "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==",
+      "requires": {
+        "mime-db": "1.42.0"
+      }
+    },
+    "mimic-fn": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+      "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+      "dev": true
+    },
+    "mini-css-extract-plugin": {
+      "version": "0.8.0",
+      "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.0.tgz",
+      "integrity": "sha512-MNpRGbNA52q6U92i0qbVpQNsgk7LExy41MdAlG84FeytfDOtRIf/mCHdEgG8rpTKOaNKiqUnZdlptF469hxqOw==",
+      "dev": true,
+      "requires": {
+        "loader-utils": "^1.1.0",
+        "normalize-url": "1.9.1",
+        "schema-utils": "^1.0.0",
+        "webpack-sources": "^1.1.0"
+      },
+      "dependencies": {
+        "normalize-url": {
+          "version": "1.9.1",
+          "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
+          "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
+          "dev": true,
+          "requires": {
+            "object-assign": "^4.0.1",
+            "prepend-http": "^1.0.0",
+            "query-string": "^4.1.0",
+            "sort-keys": "^1.0.0"
+          }
+        }
+      }
+    },
+    "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==",
+      "dev": true
+    },
+    "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=",
+      "dev": true
+    },
+    "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.0",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+      "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+    },
+    "mississippi": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
+      "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
+      "dev": true,
+      "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.1",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+      "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+      "requires": {
+        "minimist": "0.0.8"
+      },
+      "dependencies": {
+        "minimist": {
+          "version": "0.0.8",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+          "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+        }
+      }
+    },
+    "move-concurrently": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
+      "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
+      "dev": true,
+      "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"
+      }
+    },
+    "ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+    },
+    "multicast-dns": {
+      "version": "6.2.3",
+      "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
+      "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==",
+      "dev": true,
+      "requires": {
+        "dns-packet": "^1.3.1",
+        "thunky": "^1.0.2"
+      }
+    },
+    "multicast-dns-service-types": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
+      "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
+      "dev": true
+    },
+    "multipipe": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz",
+      "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=",
+      "requires": {
+        "duplexer2": "0.0.2"
+      }
+    },
+    "mz": {
+      "version": "2.7.0",
+      "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+      "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+      "dev": true,
+      "requires": {
+        "any-promise": "^1.0.0",
+        "object-assign": "^4.0.1",
+        "thenify-all": "^1.0.0"
+      }
+    },
+    "nan": {
+      "version": "2.14.0",
+      "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
+      "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg=="
+    },
+    "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"
+      }
+    },
+    "natives": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.6.tgz",
+      "integrity": "sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA=="
+    },
+    "negotiator": {
+      "version": "0.6.2",
+      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+      "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
+      "dev": true
+    },
+    "neo-async": {
+      "version": "2.6.1",
+      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz",
+      "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==",
+      "dev": true
+    },
+    "nice-try": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+      "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+      "dev": true
+    },
+    "no-case": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
+      "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
+      "dev": true,
+      "requires": {
+        "lower-case": "^1.1.1"
+      }
+    },
+    "node-forge": {
+      "version": "0.9.0",
+      "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz",
+      "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==",
+      "dev": true
+    },
+    "node-gyp": {
+      "version": "3.8.0",
+      "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz",
+      "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==",
+      "requires": {
+        "fstream": "^1.0.0",
+        "glob": "^7.0.3",
+        "graceful-fs": "^4.1.2",
+        "mkdirp": "^0.5.0",
+        "nopt": "2 || 3",
+        "npmlog": "0 || 1 || 2 || 3 || 4",
+        "osenv": "0",
+        "request": "^2.87.0",
+        "rimraf": "2",
+        "semver": "~5.3.0",
+        "tar": "^2.0.0",
+        "which": "1"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+          "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8="
+        }
+      }
+    },
+    "node-ipc": {
+      "version": "9.1.1",
+      "resolved": "https://registry.npmjs.org/node-ipc/-/node-ipc-9.1.1.tgz",
+      "integrity": "sha512-FAyICv0sIRJxVp3GW5fzgaf9jwwRQxAKDJlmNFUL5hOy+W4X/I5AypyHoq0DXXbo9o/gt79gj++4cMr4jVWE/w==",
+      "dev": true,
+      "requires": {
+        "event-pubsub": "4.3.0",
+        "js-message": "1.0.5",
+        "js-queue": "2.0.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==",
+      "dev": true,
+      "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=",
+          "dev": true
+        }
+      }
+    },
+    "node-releases": {
+      "version": "1.1.41",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.41.tgz",
+      "integrity": "sha512-+IctMa7wIs8Cfsa8iYzeaLTFwv5Y4r5jZud+4AnfymzeEXKBCavFX0KBgzVaPVqf0ywa6PrO8/b+bPqdwjGBSg==",
+      "dev": true,
+      "requires": {
+        "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==",
+          "dev": true
+        }
+      }
+    },
+    "node-sass": {
+      "version": "4.13.0",
+      "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.13.0.tgz",
+      "integrity": "sha512-W1XBrvoJ1dy7VsvTAS5q1V45lREbTlZQqFbiHb3R3OTTCma0XBtuG6xZ6Z4506nR4lmHPTqVRwxT6KgtWC97CA==",
+      "requires": {
+        "async-foreach": "^0.1.3",
+        "chalk": "^1.1.1",
+        "cross-spawn": "^3.0.0",
+        "gaze": "^1.0.0",
+        "get-stdin": "^4.0.1",
+        "glob": "^7.0.3",
+        "in-publish": "^2.0.0",
+        "lodash": "^4.17.15",
+        "meow": "^3.7.0",
+        "mkdirp": "^0.5.1",
+        "nan": "^2.13.2",
+        "node-gyp": "^3.8.0",
+        "npmlog": "^4.0.0",
+        "request": "^2.88.0",
+        "sass-graph": "^2.2.4",
+        "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="
+        },
+        "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"
+          }
+        },
+        "cross-spawn": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
+          "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
+          "requires": {
+            "lru-cache": "^4.0.1",
+            "which": "^1.2.9"
+          }
+        },
+        "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"
+          }
+        },
+        "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="
+        },
+        "yallist": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
+        }
+      }
+    },
+    "nopt": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+      "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+      "requires": {
+        "abbrev": "1"
+      }
+    },
+    "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==",
+      "requires": {
+        "hosted-git-info": "^2.1.4",
+        "resolve": "^1.10.0",
+        "semver": "2 || 3 || 4 || 5",
+        "validate-npm-package-license": "^3.0.1"
+      }
+    },
+    "normalize-path": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+      "dev": true
+    },
+    "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==",
+      "dev": true
+    },
+    "normalize-wheel": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz",
+      "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU="
+    },
+    "npm-run-path": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+      "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+      "dev": true,
+      "requires": {
+        "path-key": "^2.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==",
+      "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==",
+      "dev": true,
+      "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="
+    },
+    "oauth-sign": {
+      "version": "0.9.0",
+      "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+      "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
+    },
+    "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"
+          }
+        },
+        "is-buffer": {
+          "version": "1.1.6",
+          "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+          "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+        },
+        "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.7.0",
+      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
+      "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
+      "dev": true
+    },
+    "object-is": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz",
+      "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY="
+    },
+    "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.0",
+      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
+      "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
+      "dev": true,
+      "requires": {
+        "define-properties": "^1.1.2",
+        "function-bind": "^1.1.1",
+        "has-symbols": "^1.0.0",
+        "object-keys": "^1.0.11"
+      }
+    },
+    "object.defaults": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
+      "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
+      "requires": {
+        "array-each": "^1.0.1",
+        "array-slice": "^1.0.0",
+        "for-own": "^1.0.0",
+        "isobject": "^3.0.0"
+      }
+    },
+    "object.getownpropertydescriptors": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
+      "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
+      "dev": true,
+      "requires": {
+        "define-properties": "^1.1.2",
+        "es-abstract": "^1.5.1"
+      }
+    },
+    "object.map": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
+      "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
+      "requires": {
+        "for-own": "^1.0.0",
+        "make-iterator": "^1.0.0"
+      }
+    },
+    "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.0",
+      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz",
+      "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==",
+      "dev": true,
+      "requires": {
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.12.0",
+        "function-bind": "^1.1.1",
+        "has": "^1.0.3"
+      }
+    },
+    "obuf": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
+      "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
+      "dev": true
+    },
+    "on-finished": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+      "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+      "dev": true,
+      "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==",
+      "dev": true
+    },
+    "once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+      "requires": {
+        "wrappy": "1"
+      }
+    },
+    "onetime": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+      "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+      "dev": true,
+      "requires": {
+        "mimic-fn": "^1.0.0"
+      }
+    },
+    "open": {
+      "version": "6.4.0",
+      "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz",
+      "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==",
+      "dev": true,
+      "requires": {
+        "is-wsl": "^1.1.0"
+      }
+    },
+    "opener": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz",
+      "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==",
+      "dev": true
+    },
+    "opn": {
+      "version": "5.5.0",
+      "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz",
+      "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==",
+      "dev": true,
+      "requires": {
+        "is-wsl": "^1.1.0"
+      }
+    },
+    "ora": {
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz",
+      "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.4.2",
+        "cli-cursor": "^2.1.0",
+        "cli-spinners": "^2.0.0",
+        "log-symbols": "^2.2.0",
+        "strip-ansi": "^5.2.0",
+        "wcwidth": "^1.0.1"
+      }
+    },
+    "orchestrator": {
+      "version": "0.3.8",
+      "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz",
+      "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=",
+      "requires": {
+        "end-of-stream": "~0.1.5",
+        "sequencify": "~0.0.7",
+        "stream-consume": "~0.1.0"
+      },
+      "dependencies": {
+        "end-of-stream": {
+          "version": "0.1.5",
+          "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz",
+          "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=",
+          "requires": {
+            "once": "~1.3.0"
+          }
+        },
+        "once": {
+          "version": "1.3.3",
+          "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
+          "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=",
+          "requires": {
+            "wrappy": "1"
+          }
+        }
+      }
+    },
+    "ordered-read-streams": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz",
+      "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY="
+    },
+    "original": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
+      "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==",
+      "dev": true,
+      "requires": {
+        "url-parse": "^1.4.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=",
+      "dev": true
+    },
+    "os-homedir": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
+    },
+    "os-locale": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
+      "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
+      "dev": true,
+      "requires": {
+        "execa": "^1.0.0",
+        "lcid": "^2.0.0",
+        "mem": "^4.0.0"
+      }
+    },
+    "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="
+    },
+    "osenv": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
+      "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
+      "requires": {
+        "os-homedir": "^1.0.0",
+        "os-tmpdir": "^1.0.0"
+      }
+    },
+    "p-defer": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
+      "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
+      "dev": true
+    },
+    "p-finally": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+      "dev": true
+    },
+    "p-is-promise": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz",
+      "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==",
+      "dev": true
+    },
+    "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-map": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
+      "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
+      "dev": true
+    },
+    "p-retry": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz",
+      "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==",
+      "dev": true,
+      "requires": {
+        "retry": "^0.12.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
+    },
+    "pako": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz",
+      "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==",
+      "dev": true
+    },
+    "parallel-transform": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
+      "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
+      "dev": true,
+      "requires": {
+        "cyclist": "^1.0.1",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.1.5"
+      }
+    },
+    "param-case": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
+      "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
+      "dev": true,
+      "requires": {
+        "no-case": "^2.2.0"
+      }
+    },
+    "parchment": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/parchment/-/parchment-1.1.4.tgz",
+      "integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg=="
+    },
+    "parse-asn1": {
+      "version": "5.1.5",
+      "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz",
+      "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==",
+      "dev": true,
+      "requires": {
+        "asn1.js": "^4.0.0",
+        "browserify-aes": "^1.0.0",
+        "create-hash": "^1.1.0",
+        "evp_bytestokey": "^1.0.0",
+        "pbkdf2": "^3.0.3",
+        "safe-buffer": "^5.1.1"
+      }
+    },
+    "parse-filepath": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
+      "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
+      "requires": {
+        "is-absolute": "^1.0.0",
+        "map-cache": "^0.2.0",
+        "path-root": "^0.1.1"
+      }
+    },
+    "parse-json": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+      "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+      "dev": true,
+      "requires": {
+        "error-ex": "^1.3.1",
+        "json-parse-better-errors": "^1.0.1"
+      }
+    },
+    "parse-node-version": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",
+      "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA=="
+    },
+    "parse-passwd": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+      "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY="
+    },
+    "parse5": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz",
+      "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==",
+      "dev": true
+    },
+    "parse5-htmlparser2-tree-adapter": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-5.1.1.tgz",
+      "integrity": "sha512-CF+TKjXqoqyDwHqBhFQ+3l5t83xYi6fVT1tQNg+Ye0JRLnTxWvIroCjEp1A0k4lneHNBGnICUf0cfYVYGEazqw==",
+      "dev": true,
+      "requires": {
+        "parse5": "^5.1.1"
+      }
+    },
+    "parseurl": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+      "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+      "dev": true
+    },
+    "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==",
+      "dev": true
+    },
+    "path-dirname": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+      "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+      "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
+    },
+    "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-is-inside": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+      "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+      "dev": true
+    },
+    "path-key": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+      "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+      "dev": true
+    },
+    "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-root": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
+      "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
+      "requires": {
+        "path-root-regex": "^0.1.0"
+      }
+    },
+    "path-root-regex": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
+      "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0="
+    },
+    "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=",
+      "dev": true
+    },
+    "path-type": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+      "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+      "dev": true,
+      "requires": {
+        "pify": "^3.0.0"
+      },
+      "dependencies": {
+        "pify": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+          "dev": true
+        }
+      }
+    },
+    "pbkdf2": {
+      "version": "3.0.17",
+      "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
+      "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
+      "dev": true,
+      "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"
+      }
+    },
+    "pdfjs-dist": {
+      "version": "2.5.207",
+      "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.5.207.tgz",
+      "integrity": "sha512-xGDUhnCYPfHy+unMXCLCJtlpZaaZ17Ew3WIL0tnSgKFUZXHAPD49GO9xScyszSsQMoutNDgRb+rfBXIaX/lJbw=="
+    },
+    "performance-now": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+      "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
+    },
+    "pify": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+      "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+      "dev": true
+    },
+    "pinkie": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
+    },
+    "pinkie-promise": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+      "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+      "requires": {
+        "pinkie": "^2.0.0"
+      }
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "find-up": "^3.0.0"
+      },
+      "dependencies": {
+        "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-limit": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz",
+          "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
+          "dev": true,
+          "requires": {
+            "p-try": "^2.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"
+          }
+        },
+        "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==",
+          "dev": true
+        }
+      }
+    },
+    "pkg-up": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz",
+      "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=",
+      "dev": true,
+      "requires": {
+        "find-up": "^2.1.0"
+      }
+    },
+    "plugin-error": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz",
+      "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=",
+      "requires": {
+        "ansi-cyan": "^0.1.1",
+        "ansi-red": "^0.1.1",
+        "arr-diff": "^1.0.1",
+        "arr-union": "^2.0.1",
+        "extend-shallow": "^1.1.2"
+      },
+      "dependencies": {
+        "arr-diff": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz",
+          "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=",
+          "requires": {
+            "arr-flatten": "^1.0.1",
+            "array-slice": "^0.2.3"
+          }
+        },
+        "arr-union": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz",
+          "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0="
+        },
+        "array-slice": {
+          "version": "0.2.3",
+          "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
+          "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU="
+        },
+        "extend-shallow": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz",
+          "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=",
+          "requires": {
+            "kind-of": "^1.1.0"
+          }
+        },
+        "kind-of": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz",
+          "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ="
+        }
+      }
+    },
+    "portfinder": {
+      "version": "1.0.25",
+      "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz",
+      "integrity": "sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==",
+      "dev": true,
+      "requires": {
+        "async": "^2.6.2",
+        "debug": "^3.1.1",
+        "mkdirp": "^0.5.1"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+          "dev": true
+        }
+      }
+    },
+    "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.23",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.23.tgz",
+      "integrity": "sha512-hOlMf3ouRIFXD+j2VJecwssTwbvsPGJVMzupptg+85WA+i7MwyrydmQAgY3R+m0Bc0exunhbJmijy8u8+vufuQ==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.4.2",
+        "source-map": "^0.6.1",
+        "supports-color": "^6.1.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==",
+          "dev": true
+        },
+        "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==",
+          "dev": true,
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-calc": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz",
+      "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==",
+      "dev": true,
+      "requires": {
+        "css-unit-converter": "^1.1.1",
+        "postcss": "^7.0.5",
+        "postcss-selector-parser": "^5.0.0-rc.4",
+        "postcss-value-parser": "^3.3.1"
+      }
+    },
+    "postcss-colormin": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz",
+      "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==",
+      "dev": true,
+      "requires": {
+        "browserslist": "^4.0.0",
+        "color": "^3.0.0",
+        "has": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "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==",
+      "dev": true,
+      "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==",
+      "dev": true,
+      "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==",
+      "dev": true,
+      "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==",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.0"
+      }
+    },
+    "postcss-load-config": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz",
+      "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==",
+      "dev": true,
+      "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==",
+      "dev": true,
+      "requires": {
+        "loader-utils": "^1.1.0",
+        "postcss": "^7.0.0",
+        "postcss-load-config": "^2.0.0",
+        "schema-utils": "^1.0.0"
+      }
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "css-color-names": "0.0.4",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0",
+        "stylehacks": "^4.0.0"
+      }
+    },
+    "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==",
+      "dev": true,
+      "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.1",
+          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
+          "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
+          "dev": true,
+          "requires": {
+            "dot-prop": "^4.1.1",
+            "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==",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "cssnano-util-get-arguments": "^4.0.0",
+        "is-color-stop": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "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==",
+      "dev": true,
+      "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"
+      }
+    },
+    "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==",
+      "dev": true,
+      "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.1",
+          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
+          "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
+          "dev": true,
+          "requires": {
+            "dot-prop": "^4.1.1",
+            "indexes-of": "^1.0.1",
+            "uniq": "^1.0.1"
+          }
+        }
+      }
+    },
+    "postcss-modules-extract-imports": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz",
+      "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==",
+      "dev": true,
+      "requires": {
+        "postcss": "^6.0.1"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "6.0.23",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+          "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+          "dev": true,
+          "requires": {
+            "chalk": "^2.4.1",
+            "source-map": "^0.6.1",
+            "supports-color": "^5.4.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "postcss-modules-local-by-default": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz",
+      "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=",
+      "dev": true,
+      "requires": {
+        "css-selector-tokenizer": "^0.7.0",
+        "postcss": "^6.0.1"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "6.0.23",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+          "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+          "dev": true,
+          "requires": {
+            "chalk": "^2.4.1",
+            "source-map": "^0.6.1",
+            "supports-color": "^5.4.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "postcss-modules-scope": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz",
+      "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=",
+      "dev": true,
+      "requires": {
+        "css-selector-tokenizer": "^0.7.0",
+        "postcss": "^6.0.1"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "6.0.23",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+          "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+          "dev": true,
+          "requires": {
+            "chalk": "^2.4.1",
+            "source-map": "^0.6.1",
+            "supports-color": "^5.4.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "postcss-modules-values": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz",
+      "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=",
+      "dev": true,
+      "requires": {
+        "icss-replace-symbols": "^1.1.0",
+        "postcss": "^6.0.1"
+      },
+      "dependencies": {
+        "postcss": {
+          "version": "6.0.23",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+          "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+          "dev": true,
+          "requires": {
+            "chalk": "^2.4.1",
+            "source-map": "^0.6.1",
+            "supports-color": "^5.4.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "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==",
+      "dev": true,
+      "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==",
+      "dev": true,
+      "requires": {
+        "cssnano-util-get-match": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "cssnano-util-get-arguments": "^4.0.0",
+        "has": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "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==",
+      "dev": true,
+      "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"
+      }
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "has": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "cssnano-util-get-match": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "browserslist": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "is-absolute-url": "^2.0.0",
+        "normalize-url": "^3.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "cssnano-util-get-arguments": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "postcss-px2rem": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/postcss-px2rem/-/postcss-px2rem-0.3.0.tgz",
+      "integrity": "sha1-DfpOiiaPp0eCc/DEtHxhmDSJQEE=",
+      "requires": {
+        "postcss": "^5.0.0",
+        "px2rem": "~0.5.0"
+      },
+      "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"
+          },
+          "dependencies": {
+            "supports-color": {
+              "version": "2.0.0",
+              "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+              "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+            }
+          }
+        },
+        "has-flag": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+        },
+        "postcss": {
+          "version": "5.2.18",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+          "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+          "requires": {
+            "chalk": "^1.1.3",
+            "js-base64": "^2.1.9",
+            "source-map": "^0.5.6",
+            "supports-color": "^3.2.3"
+          }
+        },
+        "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": "3.2.3",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+          "requires": {
+            "has-flag": "^1.0.0"
+          }
+        }
+      }
+    },
+    "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==",
+      "dev": true,
+      "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==",
+      "dev": true,
+      "requires": {
+        "cssnano-util-get-match": "^4.0.0",
+        "has": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "cssesc": "^2.0.0",
+        "indexes-of": "^1.0.1",
+        "uniq": "^1.0.1"
+      }
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "is-svg": "^3.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0",
+        "svgo": "^1.0.0"
+      }
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "alphanum-sort": "^1.0.0",
+        "postcss": "^7.0.0",
+        "uniqs": "^2.0.0"
+      }
+    },
+    "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=="
+    },
+    "prepend-http": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+      "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+      "dev": true
+    },
+    "prettier": {
+      "version": "1.19.1",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz",
+      "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==",
+      "dev": true
+    },
+    "pretty-error": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz",
+      "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=",
+      "dev": true,
+      "requires": {
+        "renderkid": "^2.0.1",
+        "utila": "~0.4"
+      }
+    },
+    "pretty-hrtime": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
+      "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE="
+    },
+    "private": {
+      "version": "0.1.8",
+      "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+      "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+      "dev": true
+    },
+    "process": {
+      "version": "0.11.10",
+      "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+      "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+      "dev": true
+    },
+    "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=",
+      "dev": true
+    },
+    "proxy-addr": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
+      "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==",
+      "dev": true,
+      "requires": {
+        "forwarded": "~0.1.2",
+        "ipaddr.js": "1.9.0"
+      }
+    },
+    "prr": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+      "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
+      "dev": true
+    },
+    "pseudomap": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
+    },
+    "psl": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/psl/-/psl-1.5.0.tgz",
+      "integrity": "sha512-4vqUjKi2huMu1OJiLhi3jN6jeeKvMZdI1tYgi/njW5zV52jNLgSAZSdN16m9bJFe61/cT8ulmw4qFitV9QRsEA=="
+    },
+    "public-encrypt": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+      "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+      "dev": true,
+      "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"
+      }
+    },
+    "pump": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+      "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+      "dev": true,
+      "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==",
+      "dev": true,
+      "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==",
+          "dev": true,
+          "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=="
+    },
+    "px2rem": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/px2rem/-/px2rem-0.5.0.tgz",
+      "integrity": "sha1-JLOmz3TRSttO13byB4cdmJPkEOI=",
+      "requires": {
+        "chalk": "~0.5.1",
+        "commander": "~2.6.0",
+        "css": "~2.2.0",
+        "extend": "~3.0.0",
+        "fs-extra": "~0.16.3"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "0.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz",
+          "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk="
+        },
+        "ansi-styles": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz",
+          "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94="
+        },
+        "chalk": {
+          "version": "0.5.1",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz",
+          "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=",
+          "requires": {
+            "ansi-styles": "^1.1.0",
+            "escape-string-regexp": "^1.0.0",
+            "has-ansi": "^0.1.0",
+            "strip-ansi": "^0.3.0",
+            "supports-color": "^0.2.0"
+          }
+        },
+        "commander": {
+          "version": "2.6.0",
+          "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz",
+          "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0="
+        },
+        "fs-extra": {
+          "version": "0.16.5",
+          "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.16.5.tgz",
+          "integrity": "sha1-GtZh+myGyWCM0bSe/G/Og0k5p1A=",
+          "requires": {
+            "graceful-fs": "^3.0.5",
+            "jsonfile": "^2.0.0",
+            "rimraf": "^2.2.8"
+          }
+        },
+        "graceful-fs": {
+          "version": "3.0.12",
+          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.12.tgz",
+          "integrity": "sha512-J55gaCS4iTTJfTXIxSVw3EMQckcqkpdRv3IR7gu6sq0+tbC363Zx6KH/SEwXASK9JRbhyZmVjJEVJIOxYsB3Qg==",
+          "requires": {
+            "natives": "^1.1.3"
+          }
+        },
+        "has-ansi": {
+          "version": "0.1.0",
+          "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz",
+          "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=",
+          "requires": {
+            "ansi-regex": "^0.2.0"
+          }
+        },
+        "jsonfile": {
+          "version": "2.4.0",
+          "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
+          "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
+          "requires": {
+            "graceful-fs": "^4.1.6"
+          },
+          "dependencies": {
+            "graceful-fs": {
+              "version": "4.2.3",
+              "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
+              "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
+              "optional": true
+            }
+          }
+        },
+        "strip-ansi": {
+          "version": "0.3.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz",
+          "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=",
+          "requires": {
+            "ansi-regex": "^0.2.1"
+          }
+        },
+        "supports-color": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz",
+          "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo="
+        }
+      }
+    },
+    "px2rem-loader": {
+      "version": "0.1.9",
+      "resolved": "https://registry.npmjs.org/px2rem-loader/-/px2rem-loader-0.1.9.tgz",
+      "integrity": "sha512-3Ew8At5W/HHIIUe/KZk+FBRRb20KtgP1N1c/BnMlXk6LNkqrFmUIUF35GF/evzNdj/Q63iWJpkmn/c5qSMplRg==",
+      "requires": {
+        "loader-utils": "^1.1.0",
+        "px2rem": "^0.5.0"
+      }
+    },
+    "q": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+      "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+      "dev": true
+    },
+    "qs": {
+      "version": "6.5.2",
+      "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+      "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
+    },
+    "query-string": {
+      "version": "4.3.4",
+      "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
+      "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "querystring-es3": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+      "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+      "dev": true
+    },
+    "querystringify": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz",
+      "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==",
+      "dev": true
+    },
+    "quill": {
+      "version": "1.3.7",
+      "resolved": "https://registry.npmjs.org/quill/-/quill-1.3.7.tgz",
+      "integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==",
+      "requires": {
+        "clone": "^2.1.1",
+        "deep-equal": "^1.0.1",
+        "eventemitter3": "^2.0.3",
+        "extend": "^3.0.2",
+        "parchment": "^1.1.4",
+        "quill-delta": "^3.6.2"
+      }
+    },
+    "quill-delta": {
+      "version": "3.6.3",
+      "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-3.6.3.tgz",
+      "integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==",
+      "requires": {
+        "deep-equal": "^1.0.1",
+        "extend": "^3.0.2",
+        "fast-diff": "1.1.2"
+      }
+    },
+    "raf": {
+      "version": "3.4.1",
+      "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
+      "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
+      "optional": true,
+      "requires": {
+        "performance-now": "^2.1.0"
+      }
+    },
+    "randombytes": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+      "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+      "dev": true,
+      "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==",
+      "dev": true,
+      "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==",
+      "dev": true
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "bytes": "3.1.0",
+        "http-errors": "1.7.2",
+        "iconv-lite": "0.4.24",
+        "unpipe": "1.0.0"
+      }
+    },
+    "raw-loader": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz",
+      "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==",
+      "requires": {
+        "loader-utils": "^2.0.0",
+        "schema-utils": "^3.0.0"
+      },
+      "dependencies": {
+        "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-keywords": {
+          "version": "3.5.2",
+          "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+          "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="
+        },
+        "emojis-list": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+          "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="
+        },
+        "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=="
+        },
+        "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"
+          }
+        },
+        "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"
+          }
+        },
+        "minimist": {
+          "version": "1.2.5",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+          "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
+        },
+        "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"
+          }
+        }
+      }
+    },
+    "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": {
+        "parse-json": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz",
+          "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==",
+          "dev": true,
+          "requires": {
+            "@babel/code-frame": "^7.0.0",
+            "error-ex": "^1.3.1",
+            "json-parse-better-errors": "^1.0.1",
+            "lines-and-columns": "^1.1.6"
+          }
+        }
+      }
+    },
+    "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=",
+      "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=",
+          "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=",
+          "requires": {
+            "pinkie-promise": "^2.0.0"
+          }
+        },
+        "path-type": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+          "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+          "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="
+        },
+        "read-pkg": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+          "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+          "requires": {
+            "load-json-file": "^1.0.0",
+            "normalize-package-data": "^2.3.2",
+            "path-type": "^1.0.0"
+          }
+        }
+      }
+    },
+    "readable-stream": {
+      "version": "2.3.6",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+      "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+      "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==",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.11",
+        "micromatch": "^3.1.10",
+        "readable-stream": "^2.0.2"
+      }
+    },
+    "rechoir": {
+      "version": "0.6.2",
+      "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+      "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+      "requires": {
+        "resolve": "^1.1.6"
+      }
+    },
+    "redent": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+      "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+      "requires": {
+        "indent-string": "^2.1.0",
+        "strip-indent": "^1.0.1"
+      }
+    },
+    "regenerate": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
+      "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
+      "dev": true
+    },
+    "regenerate-unicode-properties": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz",
+      "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==",
+      "dev": true,
+      "requires": {
+        "regenerate": "^1.4.0"
+      }
+    },
+    "regenerator-runtime": {
+      "version": "0.10.5",
+      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
+      "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg="
+    },
+    "regenerator-transform": {
+      "version": "0.14.1",
+      "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz",
+      "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==",
+      "dev": true,
+      "requires": {
+        "private": "^0.1.6"
+      }
+    },
+    "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.prototype.flags": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz",
+      "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==",
+      "requires": {
+        "define-properties": "^1.1.2"
+      }
+    },
+    "regexpu-core": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz",
+      "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==",
+      "dev": true,
+      "requires": {
+        "regenerate": "^1.4.0",
+        "regenerate-unicode-properties": "^8.1.0",
+        "regjsgen": "^0.5.0",
+        "regjsparser": "^0.6.0",
+        "unicode-match-property-ecmascript": "^1.0.4",
+        "unicode-match-property-value-ecmascript": "^1.1.0"
+      }
+    },
+    "regjsgen": {
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz",
+      "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==",
+      "dev": true
+    },
+    "regjsparser": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz",
+      "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==",
+      "dev": true,
+      "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=",
+          "dev": true
+        }
+      }
+    },
+    "relateurl": {
+      "version": "0.2.7",
+      "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
+      "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=",
+      "dev": true
+    },
+    "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=",
+      "dev": true
+    },
+    "renderkid": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz",
+      "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==",
+      "dev": true,
+      "requires": {
+        "css-select": "^1.1.0",
+        "dom-converter": "^0.2",
+        "htmlparser2": "^3.3.0",
+        "strip-ansi": "^3.0.0",
+        "utila": "^0.4.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
+        },
+        "css-select": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
+          "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+          "dev": true,
+          "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==",
+          "dev": true
+        },
+        "domutils": {
+          "version": "1.5.1",
+          "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+          "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+          "dev": true,
+          "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=",
+          "dev": true,
+          "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=",
+      "requires": {
+        "is-finite": "^1.0.0"
+      }
+    },
+    "replace-ext": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
+      "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ="
+    },
+    "request": {
+      "version": "2.88.0",
+      "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
+      "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
+      "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.0",
+        "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.4.3",
+        "tunnel-agent": "^0.6.0",
+        "uuid": "^3.3.2"
+      }
+    },
+    "request-promise-core": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz",
+      "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==",
+      "dev": true,
+      "requires": {
+        "lodash": "^4.17.15"
+      }
+    },
+    "request-promise-native": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz",
+      "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==",
+      "dev": true,
+      "requires": {
+        "request-promise-core": "1.1.3",
+        "stealthy-require": "^1.1.1",
+        "tough-cookie": "^2.3.3"
+      }
+    },
+    "require-directory": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
+    },
+    "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
+    },
+    "requires-port": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+      "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+      "dev": true
+    },
+    "reselect": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/reselect/-/reselect-3.0.1.tgz",
+      "integrity": "sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=",
+      "dev": true
+    },
+    "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.13.1",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.13.1.tgz",
+      "integrity": "sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w==",
+      "requires": {
+        "path-parse": "^1.0.6"
+      }
+    },
+    "resolve-cwd": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
+      "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
+      "dev": true,
+      "requires": {
+        "resolve-from": "^3.0.0"
+      }
+    },
+    "resolve-dir": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+      "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+      "requires": {
+        "expand-tilde": "^2.0.0",
+        "global-modules": "^1.0.0"
+      }
+    },
+    "resolve-from": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+      "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+      "dev": true
+    },
+    "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": "2.0.0",
+      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+      "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+      "dev": true,
+      "requires": {
+        "onetime": "^2.0.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=",
+      "dev": true
+    },
+    "rgb-regex": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz",
+      "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=",
+      "dev": true
+    },
+    "rgba-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz",
+      "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=",
+      "dev": true
+    },
+    "rgbcolor": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz",
+      "integrity": "sha1-1lBezbMEplldom+ktDMHMGd1lF0=",
+      "optional": true
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "hash-base": "^3.0.0",
+        "inherits": "^2.0.1"
+      }
+    },
+    "run-queue": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
+      "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+      "dev": true,
+      "requires": {
+        "aproba": "^1.1.1"
+      }
+    },
+    "run-sequence": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/run-sequence/-/run-sequence-1.2.2.tgz",
+      "integrity": "sha1-UJWgvr6YczsBQL0I3YDsAw3azes=",
+      "requires": {
+        "chalk": "*",
+        "gulp-util": "*"
+      }
+    },
+    "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=="
+    },
+    "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=="
+    },
+    "sass-graph": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
+      "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
+      "requires": {
+        "glob": "^7.0.0",
+        "lodash": "^4.0.0",
+        "scss-tokenizer": "^0.2.3",
+        "yargs": "^7.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="
+        },
+        "camelcase": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+          "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo="
+        },
+        "cliui": {
+          "version": "3.2.0",
+          "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+          "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+          "requires": {
+            "string-width": "^1.0.1",
+            "strip-ansi": "^3.0.1",
+            "wrap-ansi": "^2.0.0"
+          }
+        },
+        "get-caller-file": {
+          "version": "1.0.3",
+          "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
+          "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w=="
+        },
+        "invert-kv": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+          "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
+        },
+        "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=",
+          "requires": {
+            "number-is-nan": "^1.0.0"
+          }
+        },
+        "lcid": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+          "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+          "requires": {
+            "invert-kv": "^1.0.0"
+          }
+        },
+        "os-locale": {
+          "version": "1.4.0",
+          "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+          "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+          "requires": {
+            "lcid": "^1.0.0"
+          }
+        },
+        "require-main-filename": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+          "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE="
+        },
+        "string-width": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+          "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+          "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=",
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        },
+        "which-module": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
+          "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8="
+        },
+        "wrap-ansi": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+          "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+          "requires": {
+            "string-width": "^1.0.1",
+            "strip-ansi": "^3.0.1"
+          }
+        },
+        "y18n": {
+          "version": "3.2.1",
+          "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+          "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
+        },
+        "yargs": {
+          "version": "7.1.0",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
+          "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
+          "requires": {
+            "camelcase": "^3.0.0",
+            "cliui": "^3.2.0",
+            "decamelize": "^1.1.1",
+            "get-caller-file": "^1.0.1",
+            "os-locale": "^1.4.0",
+            "read-pkg-up": "^1.0.1",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^1.0.1",
+            "set-blocking": "^2.0.0",
+            "string-width": "^1.0.2",
+            "which-module": "^1.0.0",
+            "y18n": "^3.2.1",
+            "yargs-parser": "^5.0.0"
+          }
+        },
+        "yargs-parser": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
+          "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
+          "requires": {
+            "camelcase": "^3.0.0"
+          }
+        }
+      }
+    },
+    "sass-loader": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.0.tgz",
+      "integrity": "sha512-+qeMu563PN7rPdit2+n5uuYVR0SSVwm0JsOUsaJXzgYcClWSlmX0iHDnmeOobPkf5kUglVot3QS6SyLyaQoJ4w==",
+      "dev": true,
+      "requires": {
+        "clone-deep": "^4.0.1",
+        "loader-utils": "^1.2.3",
+        "neo-async": "^2.6.1",
+        "schema-utils": "^2.1.0",
+        "semver": "^6.3.0"
+      },
+      "dependencies": {
+        "schema-utils": {
+          "version": "2.6.1",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.1.tgz",
+          "integrity": "sha512-0WXHDs1VDJyo+Zqs9TKLKyD/h7yDpHUhEFsM2CzkICFdoX1av+GBq/J2xRTFfsQO5kBfhZzANf2VcIm84jqDbg==",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.10.2",
+            "ajv-keywords": "^3.4.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
+        }
+      }
+    },
+    "sax": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+      "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+      "dev": true
+    },
+    "schart.js": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/schart.js/-/schart.js-3.0.0.tgz",
+      "integrity": "sha512-TaEBroDGyaHwPad4UXwsGgMd0xz0s/TpcwiMPVkpqE5Haz4hTk293m1F0f6a8MKscssKNhlyKz48ZMPI8wYqHg=="
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "ajv": "^6.1.0",
+        "ajv-errors": "^1.0.0",
+        "ajv-keywords": "^3.1.0"
+      }
+    },
+    "scss-tokenizer": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
+      "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
+      "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=",
+          "requires": {
+            "amdefine": ">=0.0.4"
+          }
+        }
+      }
+    },
+    "select-hose": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
+      "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
+      "dev": true
+    },
+    "selfsigned": {
+      "version": "1.10.7",
+      "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz",
+      "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==",
+      "dev": true,
+      "requires": {
+        "node-forge": "0.9.0"
+      }
+    },
+    "semver": {
+      "version": "5.7.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+      "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+    },
+    "send": {
+      "version": "0.17.1",
+      "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
+      "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
+      "dev": true,
+      "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==",
+          "dev": true,
+          "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=",
+              "dev": true
+            }
+          }
+        },
+        "mime": {
+          "version": "1.6.0",
+          "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+          "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+          "dev": true
+        },
+        "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==",
+          "dev": true
+        }
+      }
+    },
+    "sequencify": {
+      "version": "0.0.7",
+      "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz",
+      "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw="
+    },
+    "serialize-javascript": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz",
+      "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==",
+      "dev": true
+    },
+    "serve-index": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
+      "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
+      "dev": true,
+      "requires": {
+        "accepts": "~1.3.4",
+        "batch": "0.6.1",
+        "debug": "2.6.9",
+        "escape-html": "~1.0.3",
+        "http-errors": "~1.6.2",
+        "mime-types": "~2.1.17",
+        "parseurl": "~1.3.2"
+      },
+      "dependencies": {
+        "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"
+          }
+        },
+        "http-errors": {
+          "version": "1.6.3",
+          "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+          "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+          "dev": true,
+          "requires": {
+            "depd": "~1.1.2",
+            "inherits": "2.0.3",
+            "setprototypeof": "1.1.0",
+            "statuses": ">= 1.4.0 < 2"
+          }
+        },
+        "inherits": {
+          "version": "2.0.3",
+          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+          "dev": true
+        },
+        "setprototypeof": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+          "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+          "dev": true
+        }
+      }
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "parseurl": "~1.3.3",
+        "send": "0.17.1"
+      }
+    },
+    "set-blocking": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+    },
+    "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=",
+      "dev": true
+    },
+    "setprototypeof": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+      "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
+      "dev": true
+    },
+    "sha.js": {
+      "version": "2.4.11",
+      "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+      "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+      "dev": true,
+      "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": "1.2.0",
+      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+      "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+      "dev": true,
+      "requires": {
+        "shebang-regex": "^1.0.0"
+      }
+    },
+    "shebang-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+      "dev": true
+    },
+    "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==",
+      "dev": true
+    },
+    "sigmund": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
+      "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA="
+    },
+    "signal-exit": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+      "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
+    },
+    "simple-swizzle": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+      "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
+      "dev": true,
+      "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==",
+          "dev": true
+        }
+      }
+    },
+    "slash": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+      "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
+      "dev": true
+    },
+    "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"
+          }
+        }
+      }
+    },
+    "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": {
+        "is-buffer": {
+          "version": "1.1.6",
+          "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+          "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+        },
+        "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"
+          }
+        }
+      }
+    },
+    "sockjs": {
+      "version": "0.3.19",
+      "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz",
+      "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==",
+      "dev": true,
+      "requires": {
+        "faye-websocket": "^0.10.0",
+        "uuid": "^3.0.1"
+      }
+    },
+    "sockjs-client": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz",
+      "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==",
+      "dev": true,
+      "requires": {
+        "debug": "^3.2.5",
+        "eventsource": "^1.0.7",
+        "faye-websocket": "~0.11.1",
+        "inherits": "^2.0.3",
+        "json3": "^3.3.2",
+        "url-parse": "^1.4.3"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "faye-websocket": {
+          "version": "0.11.3",
+          "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz",
+          "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==",
+          "dev": true,
+          "requires": {
+            "websocket-driver": ">=0.5.1"
+          }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+          "dev": true
+        }
+      }
+    },
+    "sort-keys": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
+      "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+      "dev": true,
+      "requires": {
+        "is-plain-obj": "^1.0.0"
+      }
+    },
+    "sortablejs": {
+      "version": "1.10.1",
+      "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.10.1.tgz",
+      "integrity": "sha512-N6r7GrVmO8RW1rn0cTdvK3JR0BcqecAJ0PmYMCL3ZuqTH3pY+9QyqkmJSkkLyyDvd+AJnwaxTP22Ybr/83V9hQ=="
+    },
+    "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==",
+      "dev": true
+    },
+    "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.2",
+      "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+      "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+      "requires": {
+        "atob": "^2.1.1",
+        "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.16",
+      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz",
+      "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==",
+      "dev": true,
+      "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==",
+          "dev": true
+        }
+      }
+    },
+    "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="
+    },
+    "sparkles": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz",
+      "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw=="
+    },
+    "spdx-correct": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
+      "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
+      "requires": {
+        "spdx-expression-parse": "^3.0.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "spdx-exceptions": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
+      "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA=="
+    },
+    "spdx-expression-parse": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+      "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+      "requires": {
+        "spdx-exceptions": "^2.1.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "spdx-license-ids": {
+      "version": "3.0.5",
+      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
+      "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q=="
+    },
+    "spdy": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz",
+      "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==",
+      "dev": true,
+      "requires": {
+        "debug": "^4.1.0",
+        "handle-thing": "^2.0.0",
+        "http-deceiver": "^1.2.7",
+        "select-hose": "^2.0.0",
+        "spdy-transport": "^3.0.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "4.1.1",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+          "dev": true
+        }
+      }
+    },
+    "spdy-transport": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
+      "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
+      "dev": true,
+      "requires": {
+        "debug": "^4.1.0",
+        "detect-node": "^2.0.4",
+        "hpack.js": "^2.1.6",
+        "obuf": "^1.1.2",
+        "readable-stream": "^3.0.6",
+        "wbuf": "^1.7.3"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "4.1.1",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "3.4.0",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
+          "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
+          "dev": true,
+          "requires": {
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
+          }
+        }
+      }
+    },
+    "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=",
+      "dev": true
+    },
+    "sshpk": {
+      "version": "1.16.1",
+      "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
+      "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+      "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": "6.0.1",
+      "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
+      "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
+      "dev": true,
+      "requires": {
+        "figgy-pudding": "^3.5.1"
+      }
+    },
+    "stable": {
+      "version": "0.1.8",
+      "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
+      "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
+      "dev": true
+    },
+    "stackblur-canvas": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.5.0.tgz",
+      "integrity": "sha512-EeNzTVfj+1In7aSLPKDD03F/ly4RxEuF/EX0YcOG0cKoPXs+SLZxDawQbexQDBzwROs4VKLWTOaZQlZkGBFEIQ==",
+      "optional": true
+    },
+    "stackframe": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.1.0.tgz",
+      "integrity": "sha512-Vx6W1Yvy+AM1R/ckVwcHQHV147pTPBKWCRLrXMuPrFVfvBUc3os7PR1QLIWCMhPpRg5eX9ojzbQIMLGBwyLjqg==",
+      "dev": true
+    },
+    "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=",
+      "dev": true
+    },
+    "stdout-stream": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz",
+      "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==",
+      "requires": {
+        "readable-stream": "^2.0.1"
+      }
+    },
+    "stealthy-require": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
+      "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
+      "dev": true
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "inherits": "~2.0.1",
+        "readable-stream": "^2.0.2"
+      }
+    },
+    "stream-consume": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz",
+      "integrity": "sha512-tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg=="
+    },
+    "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==",
+      "dev": true,
+      "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==",
+      "dev": true,
+      "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"
+      }
+    },
+    "stream-shift": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
+      "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
+      "dev": true
+    },
+    "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=",
+      "dev": true
+    },
+    "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"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+        },
+        "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"
+          }
+        }
+      }
+    },
+    "string.prototype.padend": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz",
+      "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=",
+      "dev": true,
+      "requires": {
+        "define-properties": "^1.1.2",
+        "es-abstract": "^1.4.3",
+        "function-bind": "^1.0.2"
+      }
+    },
+    "string.prototype.padstart": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.0.0.tgz",
+      "integrity": "sha1-W8+tOfRkm7LQMSkuGbzwtRDUskI=",
+      "dev": true,
+      "requires": {
+        "define-properties": "^1.1.2",
+        "es-abstract": "^1.4.3",
+        "function-bind": "^1.0.2"
+      }
+    },
+    "string.prototype.trimleft": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz",
+      "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==",
+      "dev": true,
+      "requires": {
+        "define-properties": "^1.1.3",
+        "function-bind": "^1.1.1"
+      }
+    },
+    "string.prototype.trimright": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz",
+      "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==",
+      "dev": true,
+      "requires": {
+        "define-properties": "^1.1.3",
+        "function-bind": "^1.1.1"
+      }
+    },
+    "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"
+      }
+    },
+    "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"
+      }
+    },
+    "strip-bom": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+      "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+      "requires": {
+        "is-utf8": "^0.2.0"
+      }
+    },
+    "strip-eof": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+      "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+      "dev": true
+    },
+    "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==",
+      "dev": true
+    },
+    "strip-indent": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+      "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+      "requires": {
+        "get-stdin": "^4.0.1"
+      }
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "browserslist": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-selector-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss-selector-parser": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
+          "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
+          "dev": true,
+          "requires": {
+            "dot-prop": "^4.1.1",
+            "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"
+      }
+    },
+    "svg-pathdata": {
+      "version": "5.0.5",
+      "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-5.0.5.tgz",
+      "integrity": "sha512-TAAvLNSE3fEhyl/Da19JWfMAdhSXTYeviXsLSoDT1UM76ADj5ndwAPX1FKQEgB/gFMPavOy6tOqfalXKUiXrow==",
+      "optional": true
+    },
+    "svg-tags": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
+      "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=",
+      "dev": true
+    },
+    "svgo": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz",
+      "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==",
+      "dev": true,
+      "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"
+      }
+    },
+    "tapable": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
+      "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
+      "dev": true
+    },
+    "tar": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz",
+      "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==",
+      "requires": {
+        "block-stream": "*",
+        "fstream": "^1.0.12",
+        "inherits": "2"
+      }
+    },
+    "temp-write": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/temp-write/-/temp-write-0.1.1.tgz",
+      "integrity": "sha1-C2Rng43Xf79/YqDJPah5cy/9qTI=",
+      "requires": {
+        "graceful-fs": "~2.0.0",
+        "tempfile": "~0.1.2"
+      },
+      "dependencies": {
+        "graceful-fs": {
+          "version": "2.0.3",
+          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz",
+          "integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA="
+        }
+      }
+    },
+    "tempfile": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-0.1.3.tgz",
+      "integrity": "sha1-fWtxAEcznTn4RzJ6BW2t8YMQMBA=",
+      "requires": {
+        "uuid": "~1.4.0"
+      },
+      "dependencies": {
+        "uuid": {
+          "version": "1.4.2",
+          "resolved": "https://registry.npmjs.org/uuid/-/uuid-1.4.2.tgz",
+          "integrity": "sha1-RTAZ9oaWam34PNxSROfJkOzDMvw="
+        }
+      }
+    },
+    "terser": {
+      "version": "4.4.1",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-4.4.1.tgz",
+      "integrity": "sha512-e05giplw+8sIYh50qXYHZmr0b76O5dOSm9JwSDebGFLri4ItYzxsnumiAK+yuI56R+H7uIjT9KbVEKNkrprzHw==",
+      "dev": true,
+      "requires": {
+        "commander": "^2.20.0",
+        "source-map": "~0.6.1",
+        "source-map-support": "~0.5.12"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "terser-webpack-plugin": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz",
+      "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==",
+      "dev": true,
+      "requires": {
+        "cacache": "^12.0.2",
+        "find-cache-dir": "^2.1.0",
+        "is-wsl": "^1.1.0",
+        "schema-utils": "^1.0.0",
+        "serialize-javascript": "^1.7.0",
+        "source-map": "^0.6.1",
+        "terser": "^4.1.2",
+        "webpack-sources": "^1.4.0",
+        "worker-farm": "^1.7.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==",
+          "dev": true
+        }
+      }
+    },
+    "thenify": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz",
+      "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=",
+      "dev": true,
+      "requires": {
+        "any-promise": "^1.0.0"
+      }
+    },
+    "thenify-all": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+      "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=",
+      "dev": true,
+      "requires": {
+        "thenify": ">= 3.1.0 < 4"
+      }
+    },
+    "thread-loader": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-2.1.3.tgz",
+      "integrity": "sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg==",
+      "dev": true,
+      "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"
+      }
+    },
+    "thunky": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
+      "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
+      "dev": true
+    },
+    "tildify": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz",
+      "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=",
+      "requires": {
+        "os-homedir": "^1.0.0"
+      }
+    },
+    "time-stamp": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
+      "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM="
+    },
+    "timers-browserify": {
+      "version": "2.0.11",
+      "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz",
+      "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==",
+      "dev": true,
+      "requires": {
+        "setimmediate": "^1.0.4"
+      }
+    },
+    "timsort": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
+      "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
+      "dev": true
+    },
+    "to-arraybuffer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+      "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
+      "dev": true
+    },
+    "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=",
+      "dev": true
+    },
+    "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": {
+        "is-buffer": {
+          "version": "1.1.6",
+          "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+          "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+        },
+        "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": "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"
+      }
+    },
+    "toidentifier": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+      "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
+      "dev": true
+    },
+    "toposort": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz",
+      "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=",
+      "dev": true
+    },
+    "tough-cookie": {
+      "version": "2.4.3",
+      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+      "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
+      "requires": {
+        "psl": "^1.1.24",
+        "punycode": "^1.4.1"
+      },
+      "dependencies": {
+        "punycode": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+        }
+      }
+    },
+    "trim-newlines": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+      "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM="
+    },
+    "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==",
+      "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==",
+      "dev": true
+    },
+    "tslib": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
+      "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
+      "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=",
+      "dev": true
+    },
+    "tunnel-agent": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+      "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+      "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="
+    },
+    "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
+    },
+    "type-is": {
+      "version": "1.6.18",
+      "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+      "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+      "dev": true,
+      "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=",
+      "dev": true
+    },
+    "uglify-js": {
+      "version": "3.4.10",
+      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz",
+      "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==",
+      "dev": true,
+      "requires": {
+        "commander": "~2.19.0",
+        "source-map": "~0.6.1"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "2.19.0",
+          "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
+          "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==",
+          "dev": true
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "unc-path-regex": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
+      "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo="
+    },
+    "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==",
+      "dev": true
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "unicode-canonical-property-names-ecmascript": "^1.0.4",
+        "unicode-property-aliases-ecmascript": "^1.0.4"
+      }
+    },
+    "unicode-match-property-value-ecmascript": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz",
+      "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==",
+      "dev": true
+    },
+    "unicode-property-aliases-ecmascript": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz",
+      "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==",
+      "dev": true
+    },
+    "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=",
+      "dev": true
+    },
+    "uniqs": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz",
+      "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=",
+      "dev": true
+    },
+    "unique-filename": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
+      "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
+      "dev": true,
+      "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==",
+      "dev": true,
+      "requires": {
+        "imurmurhash": "^0.1.4"
+      }
+    },
+    "unique-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz",
+      "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs="
+    },
+    "universalify": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+      "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+      "dev": true
+    },
+    "unpipe": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+      "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+      "dev": true
+    },
+    "unquote": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz",
+      "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=",
+      "dev": true
+    },
+    "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="
+        }
+      }
+    },
+    "upath": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
+      "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
+      "dev": true
+    },
+    "upper-case": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
+      "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=",
+      "dev": true
+    },
+    "uri-js": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+      "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+      "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=",
+      "dev": true,
+      "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=",
+          "dev": true
+        }
+      }
+    },
+    "url-loader": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz",
+      "integrity": "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==",
+      "dev": true,
+      "requires": {
+        "loader-utils": "^1.1.0",
+        "mime": "^2.0.3",
+        "schema-utils": "^1.0.0"
+      }
+    },
+    "url-parse": {
+      "version": "1.4.7",
+      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz",
+      "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==",
+      "dev": true,
+      "requires": {
+        "querystringify": "^2.1.1",
+        "requires-port": "^1.0.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=="
+    },
+    "user-home": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz",
+      "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA="
+    },
+    "util": {
+      "version": "0.11.1",
+      "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
+      "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
+      "dev": true,
+      "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=",
+          "dev": true
+        }
+      }
+    },
+    "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.0",
+      "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
+      "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
+      "dev": true,
+      "requires": {
+        "define-properties": "^1.1.2",
+        "object.getownpropertydescriptors": "^2.0.3"
+      }
+    },
+    "utila": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz",
+      "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=",
+      "dev": true
+    },
+    "utils-merge": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+      "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+      "dev": true
+    },
+    "uuid": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
+      "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ=="
+    },
+    "v8flags": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz",
+      "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
+      "requires": {
+        "user-home": "^1.1.1"
+      }
+    },
+    "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==",
+      "requires": {
+        "spdx-correct": "^3.0.0",
+        "spdx-expression-parse": "^3.0.0"
+      }
+    },
+    "vary": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+      "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
+      "dev": true
+    },
+    "vendors": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.3.tgz",
+      "integrity": "sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==",
+      "dev": true
+    },
+    "verror": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+      "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+      "requires": {
+        "assert-plus": "^1.0.0",
+        "core-util-is": "1.0.2",
+        "extsprintf": "^1.2.0"
+      }
+    },
+    "vinyl": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz",
+      "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=",
+      "requires": {
+        "clone": "^1.0.0",
+        "clone-stats": "^0.0.1",
+        "replace-ext": "0.0.1"
+      },
+      "dependencies": {
+        "clone": {
+          "version": "1.0.4",
+          "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+          "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4="
+        }
+      }
+    },
+    "vinyl-fs": {
+      "version": "0.3.14",
+      "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz",
+      "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=",
+      "requires": {
+        "defaults": "^1.0.0",
+        "glob-stream": "^3.1.5",
+        "glob-watcher": "^0.0.6",
+        "graceful-fs": "^3.0.0",
+        "mkdirp": "^0.5.0",
+        "strip-bom": "^1.0.0",
+        "through2": "^0.6.1",
+        "vinyl": "^0.4.0"
+      },
+      "dependencies": {
+        "clone": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
+          "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8="
+        },
+        "graceful-fs": {
+          "version": "3.0.12",
+          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.12.tgz",
+          "integrity": "sha512-J55gaCS4iTTJfTXIxSVw3EMQckcqkpdRv3IR7gu6sq0+tbC363Zx6KH/SEwXASK9JRbhyZmVjJEVJIOxYsB3Qg==",
+          "requires": {
+            "natives": "^1.1.3"
+          }
+        },
+        "isarray": {
+          "version": "0.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+        },
+        "readable-stream": {
+          "version": "1.0.34",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+          "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "0.0.1",
+            "string_decoder": "~0.10.x"
+          }
+        },
+        "string_decoder": {
+          "version": "0.10.31",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+        },
+        "strip-bom": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz",
+          "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=",
+          "requires": {
+            "first-chunk-stream": "^1.0.0",
+            "is-utf8": "^0.2.0"
+          }
+        },
+        "through2": {
+          "version": "0.6.5",
+          "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+          "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+          "requires": {
+            "readable-stream": ">=1.0.33-1 <1.1.0-0",
+            "xtend": ">=4.0.0 <4.1.0-0"
+          }
+        },
+        "vinyl": {
+          "version": "0.4.6",
+          "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
+          "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
+          "requires": {
+            "clone": "^0.2.0",
+            "clone-stats": "^0.0.1"
+          }
+        }
+      }
+    },
+    "vinyl-sourcemaps-apply": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
+      "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=",
+      "requires": {
+        "source-map": "^0.5.1"
+      }
+    },
+    "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==",
+      "dev": true
+    },
+    "vue": {
+      "version": "2.6.10",
+      "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.10.tgz",
+      "integrity": "sha512-ImThpeNU9HbdZL3utgMCq0oiMzAkt1mcgy3/E6zWC/G6AaQoeuFdsl9nDhTDU3X1R6FK7nsIUuRACVcjI+A2GQ=="
+    },
+    "vue-cropperjs": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/vue-cropperjs/-/vue-cropperjs-3.0.0.tgz",
+      "integrity": "sha512-vNdtSLjjcvbMVHqD/JapGKIsP0C+hgyxCiqEDGaxwnSWkj6nQGD2vcXx67Qk8JQfz6Hx/1UVh9jzpyZAeKRU8Q==",
+      "requires": {
+        "cropperjs": "^1.1.3"
+      }
+    },
+    "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==",
+      "dev": true
+    },
+    "vue-i18n": {
+      "version": "8.15.1",
+      "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.15.1.tgz",
+      "integrity": "sha512-GBbz8qYCu0U2LNu4IcuFLZiuyninG4k26knvhL7GZG5Ncp4RR2VKDEH6g8gQ6I+UUBCvH2MBQVPSdxWe4DBkPw=="
+    },
+    "vue-loader": {
+      "version": "15.7.2",
+      "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.7.2.tgz",
+      "integrity": "sha512-H/P9xt/nkocyu4hZKg5TzPqyCT1oKOaCSk9zs0JCbJuy0Q8KtR0bjJpnT/5R5x/Ckd1GFkkLQnQ1C4x6xXeLZg==",
+      "dev": true,
+      "requires": {
+        "@vue/component-compiler-utils": "^3.0.0",
+        "hash-sum": "^1.0.2",
+        "loader-utils": "^1.1.0",
+        "vue-hot-reload-api": "^2.3.0",
+        "vue-style-loader": "^4.1.0"
+      }
+    },
+    "vue-pdf": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/vue-pdf/-/vue-pdf-4.2.0.tgz",
+      "integrity": "sha512-GpAbZfM48Hom1R8f4XL5ZzoVBLlbyy+4z0VYmTQORVOSieVIIu+XtnNl0RY6EXg60Qni6T6nIgrmsCcCkWv39A==",
+      "requires": {
+        "babel-plugin-syntax-dynamic-import": "^6.18.0",
+        "loader-utils": "^1.4.0",
+        "pdfjs-dist": "^2.5.207",
+        "raw-loader": "^4.0.1",
+        "vue-resize-sensor": "^2.0.0",
+        "worker-loader": "^2.0.0"
+      },
+      "dependencies": {
+        "emojis-list": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+          "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="
+        },
+        "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"
+          }
+        },
+        "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"
+          }
+        }
+      }
+    },
+    "vue-quill-editor": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/vue-quill-editor/-/vue-quill-editor-3.0.6.tgz",
+      "integrity": "sha512-g20oSZNWg8Hbu41Kinjd55e235qVWPLfg4NvsLW6d+DhgBTFbEuMpcWlUdrD6qT3+Noim6DRu18VLM9lVShXOQ==",
+      "requires": {
+        "object-assign": "^4.1.1",
+        "quill": "^1.3.4"
+      }
+    },
+    "vue-resize-sensor": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/vue-resize-sensor/-/vue-resize-sensor-2.0.0.tgz",
+      "integrity": "sha512-W+y2EAI/BxS4Vlcca9scQv8ifeBFck56DRtSwWJ2H4Cw1GLNUYxiZxUHHkuzuI5JPW/cYtL1bPO5xPyEXx4LmQ=="
+    },
+    "vue-router": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.1.3.tgz",
+      "integrity": "sha512-8iSa4mGNXBjyuSZFCCO4fiKfvzqk+mhL0lnKuGcQtO1eoj8nq3CmbEG8FwK5QqoqwDgsjsf1GDuisDX4cdb/aQ=="
+    },
+    "vue-schart": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/vue-schart/-/vue-schart-2.0.0.tgz",
+      "integrity": "sha512-qAu3e5wfMcq26wK1xeHExEWfGpnjfoN1R/9QXblNi+AsU/p52X7tTwhi+Fw7H/otfEufhEY2X7z7emaoF4QO+g==",
+      "requires": {
+        "schart.js": "^3.0.0"
+      }
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "hash-sum": "^1.0.2",
+        "loader-utils": "^1.0.2"
+      }
+    },
+    "vue-template-compiler": {
+      "version": "2.6.10",
+      "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.10.tgz",
+      "integrity": "sha512-jVZkw4/I/HT5ZMvRnhv78okGusqe0+qH2A0Em0Cp8aq78+NK9TII263CDVz2QXZsIT+yyV/gZc/j/vlwa+Epyg==",
+      "dev": true,
+      "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==",
+      "dev": true
+    },
+    "vuedraggable": {
+      "version": "2.23.2",
+      "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-2.23.2.tgz",
+      "integrity": "sha512-PgHCjUpxEAEZJq36ys49HfQmXglattf/7ofOzUrW2/rRdG7tu6fK84ir14t1jYv4kdXewTEa2ieKEAhhEMdwkQ==",
+      "requires": {
+        "sortablejs": "^1.10.1"
+      }
+    },
+    "vuex": {
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.4.0.tgz",
+      "integrity": "sha512-ajtqwEW/QhnrBZQsZxCLHThZZaa+Db45c92Asf46ZDXu6uHXgbfVuBaJ4gzD2r4UX0oMJHstFwd2r2HM4l8umg=="
+    },
+    "watchpack": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz",
+      "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==",
+      "dev": true,
+      "requires": {
+        "chokidar": "^2.0.2",
+        "graceful-fs": "^4.1.2",
+        "neo-async": "^2.5.0"
+      }
+    },
+    "wbuf": {
+      "version": "1.7.3",
+      "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
+      "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
+      "dev": true,
+      "requires": {
+        "minimalistic-assert": "^1.0.0"
+      }
+    },
+    "wcwidth": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
+      "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
+      "dev": true,
+      "requires": {
+        "defaults": "^1.0.3"
+      }
+    },
+    "webpack": {
+      "version": "4.41.2",
+      "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.2.tgz",
+      "integrity": "sha512-Zhw69edTGfbz9/8JJoyRQ/pq8FYUoY0diOXqW0T6yhgdhCv6wr0hra5DwwWexNRns2Z2+gsnrNcbe9hbGBgk/A==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.8.5",
+        "@webassemblyjs/helper-module-context": "1.8.5",
+        "@webassemblyjs/wasm-edit": "1.8.5",
+        "@webassemblyjs/wasm-parser": "1.8.5",
+        "acorn": "^6.2.1",
+        "ajv": "^6.10.2",
+        "ajv-keywords": "^3.4.1",
+        "chrome-trace-event": "^1.0.2",
+        "enhanced-resolve": "^4.1.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.1",
+        "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.1",
+        "watchpack": "^1.6.0",
+        "webpack-sources": "^1.4.1"
+      }
+    },
+    "webpack-bundle-analyzer": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.6.0.tgz",
+      "integrity": "sha512-orUfvVYEfBMDXgEKAKVvab5iQ2wXneIEorGNsyuOyVYpjYrI7CUOhhXNDd3huMwQ3vNNWWlGP+hzflMFYNzi2g==",
+      "dev": true,
+      "requires": {
+        "acorn": "^6.0.7",
+        "acorn-walk": "^6.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.15",
+        "mkdirp": "^0.5.1",
+        "opener": "^1.5.1",
+        "ws": "^6.0.0"
+      }
+    },
+    "webpack-chain": {
+      "version": "4.12.1",
+      "resolved": "https://registry.npmjs.org/webpack-chain/-/webpack-chain-4.12.1.tgz",
+      "integrity": "sha512-BCfKo2YkDe2ByqkEWe1Rw+zko4LsyS75LVr29C6xIrxAg9JHJ4pl8kaIZ396SUSNp6b4815dRZPSTAS8LlURRQ==",
+      "dev": true,
+      "requires": {
+        "deepmerge": "^1.5.2",
+        "javascript-stringify": "^1.6.0"
+      }
+    },
+    "webpack-dev-middleware": {
+      "version": "3.7.2",
+      "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz",
+      "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==",
+      "dev": true,
+      "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-dev-server": {
+      "version": "3.9.0",
+      "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.9.0.tgz",
+      "integrity": "sha512-E6uQ4kRrTX9URN9s/lIbqTAztwEPdvzVrcmHE8EQ9YnuT9J8Es5Wrd8n9BKg1a0oZ5EgEke/EQFgUsp18dSTBw==",
+      "dev": true,
+      "requires": {
+        "ansi-html": "0.0.7",
+        "bonjour": "^3.5.0",
+        "chokidar": "^2.1.8",
+        "compression": "^1.7.4",
+        "connect-history-api-fallback": "^1.6.0",
+        "debug": "^4.1.1",
+        "del": "^4.1.1",
+        "express": "^4.17.1",
+        "html-entities": "^1.2.1",
+        "http-proxy-middleware": "0.19.1",
+        "import-local": "^2.0.0",
+        "internal-ip": "^4.3.0",
+        "ip": "^1.1.5",
+        "is-absolute-url": "^3.0.3",
+        "killable": "^1.0.1",
+        "loglevel": "^1.6.4",
+        "opn": "^5.5.0",
+        "p-retry": "^3.0.1",
+        "portfinder": "^1.0.25",
+        "schema-utils": "^1.0.0",
+        "selfsigned": "^1.10.7",
+        "semver": "^6.3.0",
+        "serve-index": "^1.9.1",
+        "sockjs": "0.3.19",
+        "sockjs-client": "1.4.0",
+        "spdy": "^4.0.1",
+        "strip-ansi": "^3.0.1",
+        "supports-color": "^6.1.0",
+        "url": "^0.11.0",
+        "webpack-dev-middleware": "^3.7.2",
+        "webpack-log": "^2.0.0",
+        "ws": "^6.2.1",
+        "yargs": "12.0.5"
+      },
+      "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
+        },
+        "cliui": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
+          "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
+          "dev": true,
+          "requires": {
+            "string-width": "^2.1.1",
+            "strip-ansi": "^4.0.0",
+            "wrap-ansi": "^2.0.0"
+          },
+          "dependencies": {
+            "ansi-regex": {
+              "version": "3.0.0",
+              "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+              "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+              "dev": true
+            },
+            "strip-ansi": {
+              "version": "4.0.0",
+              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+              "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+              "dev": true,
+              "requires": {
+                "ansi-regex": "^3.0.0"
+              }
+            }
+          }
+        },
+        "debug": {
+          "version": "4.1.1",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "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"
+          }
+        },
+        "get-caller-file": {
+          "version": "1.0.3",
+          "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
+          "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
+          "dev": true
+        },
+        "is-absolute-url": {
+          "version": "3.0.3",
+          "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz",
+          "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==",
+          "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"
+          }
+        },
+        "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"
+          }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+          "dev": true
+        },
+        "p-limit": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz",
+          "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
+          "dev": true,
+          "requires": {
+            "p-try": "^2.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"
+          }
+        },
+        "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==",
+          "dev": true
+        },
+        "require-main-filename": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+          "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+          "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
+        },
+        "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": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "dev": true,
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        },
+        "wrap-ansi": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+          "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+          "dev": true,
+          "requires": {
+            "string-width": "^1.0.1",
+            "strip-ansi": "^3.0.1"
+          },
+          "dependencies": {
+            "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"
+              }
+            }
+          }
+        },
+        "yargs": {
+          "version": "12.0.5",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz",
+          "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
+          "dev": true,
+          "requires": {
+            "cliui": "^4.0.0",
+            "decamelize": "^1.2.0",
+            "find-up": "^3.0.0",
+            "get-caller-file": "^1.0.1",
+            "os-locale": "^3.0.0",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^1.0.1",
+            "set-blocking": "^2.0.0",
+            "string-width": "^2.0.0",
+            "which-module": "^2.0.0",
+            "y18n": "^3.2.1 || ^4.0.0",
+            "yargs-parser": "^11.1.1"
+          }
+        },
+        "yargs-parser": {
+          "version": "11.1.1",
+          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz",
+          "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
+          "dev": true,
+          "requires": {
+            "camelcase": "^5.0.0",
+            "decamelize": "^1.2.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==",
+      "dev": true,
+      "requires": {
+        "ansi-colors": "^3.0.0",
+        "uuid": "^3.3.2"
+      }
+    },
+    "webpack-merge": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz",
+      "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==",
+      "dev": true,
+      "requires": {
+        "lodash": "^4.17.15"
+      }
+    },
+    "webpack-sources": {
+      "version": "1.4.3",
+      "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
+      "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
+      "dev": true,
+      "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==",
+          "dev": true
+        }
+      }
+    },
+    "websocket-driver": {
+      "version": "0.7.3",
+      "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz",
+      "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==",
+      "dev": true,
+      "requires": {
+        "http-parser-js": ">=0.4.0 <0.4.11",
+        "safe-buffer": ">=5.1.0",
+        "websocket-extensions": ">=0.1.1"
+      }
+    },
+    "websocket-extensions": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
+      "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==",
+      "dev": true
+    },
+    "which": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+      "requires": {
+        "isexe": "^2.0.0"
+      }
+    },
+    "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==",
+      "requires": {
+        "string-width": "^1.0.2 || 2"
+      }
+    },
+    "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==",
+      "dev": true,
+      "requires": {
+        "errno": "~0.1.7"
+      }
+    },
+    "worker-loader": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/worker-loader/-/worker-loader-2.0.0.tgz",
+      "integrity": "sha512-tnvNp4K3KQOpfRnD20m8xltE3eWh89Ye+5oj7wXEEHKac1P4oZ6p9oTj8/8ExqoSBnk9nu5Pr4nKfQ1hn2APJw==",
+      "requires": {
+        "loader-utils": "^1.0.0",
+        "schema-utils": "^0.4.0"
+      },
+      "dependencies": {
+        "schema-utils": {
+          "version": "0.4.7",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz",
+          "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==",
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        }
+      }
+    },
+    "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==",
+      "dev": true,
+      "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==",
+          "dev": true
+        },
+        "ansi-styles": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.0.tgz",
+          "integrity": "sha512-7kFQgnEaMdRtwf6uSfUnVr9gSGC7faurn+J/Mv90/W+iTtN0405/nLdopfMWwchyxhbGYl6TC4Sccn9TUkGAgg==",
+          "dev": true,
+          "requires": {
+            "@types/color-name": "^1.1.1",
+            "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==",
+          "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
+        },
+        "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==",
+          "dev": true
+        },
+        "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==",
+          "dev": true,
+          "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==",
+          "dev": true,
+          "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="
+    },
+    "ws": {
+      "version": "6.2.1",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
+      "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
+      "dev": true,
+      "requires": {
+        "async-limiter": "~1.0.0"
+      }
+    },
+    "xtend": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
+    },
+    "y18n": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+      "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
+      "dev": true
+    },
+    "yallist": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+      "dev": true
+    },
+    "yargs": {
+      "version": "15.0.2",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.0.2.tgz",
+      "integrity": "sha512-GH/X/hYt+x5hOat4LMnCqMd8r5Cv78heOMIJn1hr7QPPBqfeC6p89Y78+WB9yGDvfpCvgasfmWLzNzEioOUD9Q==",
+      "dev": true,
+      "requires": {
+        "cliui": "^6.0.0",
+        "decamelize": "^1.2.0",
+        "find-up": "^4.1.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": "^4.2.0",
+        "which-module": "^2.0.0",
+        "y18n": "^4.0.0",
+        "yargs-parser": "^16.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==",
+          "dev": true
+        },
+        "cliui": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+          "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
+          "dev": true,
+          "requires": {
+            "string-width": "^4.2.0",
+            "strip-ansi": "^6.0.0",
+            "wrap-ansi": "^6.2.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==",
+          "dev": true,
+          "requires": {
+            "locate-path": "^5.0.0",
+            "path-exists": "^4.0.0"
+          }
+        },
+        "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==",
+          "dev": true
+        },
+        "locate-path": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+          "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+          "dev": true,
+          "requires": {
+            "p-locate": "^4.1.0"
+          }
+        },
+        "p-limit": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz",
+          "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
+          "dev": true,
+          "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==",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.2.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==",
+          "dev": 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==",
+          "dev": true
+        },
+        "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==",
+          "dev": true,
+          "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==",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^5.0.0"
+          }
+        }
+      }
+    },
+    "yargs-parser": {
+      "version": "16.1.0",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-16.1.0.tgz",
+      "integrity": "sha512-H/V41UNZQPkUMIT5h5hiwg4QKIY1RPvoBV4XcjUbRM8Bk2oKqqyZ0DIEbTFZB0XjbtSPG8SAa/0DxCQmiRgzKg==",
+      "dev": true,
+      "requires": {
+        "camelcase": "^5.0.0",
+        "decamelize": "^1.2.0"
+      }
+    },
+    "zrender": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/zrender/-/zrender-4.3.1.tgz",
+      "integrity": "sha512-CeH2TpJeCdG0TAGYoPSAcFX2ogdug1K7LIn9UO/q9HWqQ54gWhrMAlDP9AwWYMUDhrPe4VeazQ4DW3msD96nUQ=="
+    }
+  }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..a77fa8e
--- /dev/null
+++ b/package.json
@@ -0,0 +1,40 @@
+{
+  "name": "vue-manage-system",
+  "version": "4.2.0",
+  "private": true,
+  "scripts": {
+    "dev": "npm run serve",
+    "serve": "vue-cli-service serve",
+    "build": "vue-cli-service build"
+  },
+  "dependencies": {
+    "axios": "^0.18.0",
+    "babel-polyfill": "^6.26.0",
+    "echarts": "^4.8.0",
+    "element-theme": "^2.0.1",
+    "element-ui": "^2.13.0",
+    "html2canvas": "^1.2.1",
+    "js-cookie": "^2.2.1",
+    "jspdf": "^2.3.1",
+    "mavon-editor": "^2.6.17",
+    "postcss-px2rem": "^0.3.0",
+    "px2rem-loader": "^0.1.9",
+    "vue": "^2.6.10",
+    "vue-cropperjs": "^3.0.0",
+    "vue-i18n": "^8.10.0",
+    "vue-pdf": "^4.2.0",
+    "vue-quill-editor": "^3.0.6",
+    "vue-router": "^3.0.3",
+    "vue-schart": "^2.0.0",
+    "vuedraggable": "^2.17.0",
+    "vuex": "^3.4.0"
+  },
+  "devDependencies": {
+    "@vue/cli-plugin-babel": "^3.9.0",
+    "@vue/cli-service": "^3.9.0",
+    "element-theme-chalk": "^2.13.0",
+    "node-sass": "^4.13.0",
+    "sass-loader": "^8.0.0",
+    "vue-template-compiler": "^2.6.10"
+  }
+}
diff --git a/postcss.config.js b/postcss.config.js
new file mode 100644
index 0000000..961986e
--- /dev/null
+++ b/postcss.config.js
@@ -0,0 +1,5 @@
+module.exports = {
+  plugins: {
+    autoprefixer: {}
+  }
+}
diff --git a/public/index.html b/public/index.html
new file mode 100644
index 0000000..1c28a1a
--- /dev/null
+++ b/public/index.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">
+    <link rel="stylesheet" href="//at.alicdn.com/t/font_830376_qzecyukz0s.css">
+    <title>职站</title>
+  </head>
+  <body>
+    <noscript>
+      <strong>We're sorry but vms doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
+    </noscript>
+    <div id="app"></div>
+    <!-- built files will be auto injected -->
+  </body>
+
+</html>
diff --git a/src/App.vue b/src/App.vue
new file mode 100644
index 0000000..db71ed9
--- /dev/null
+++ b/src/App.vue
@@ -0,0 +1,24 @@
+<template>
+    <div id="app" >
+        <router-view></router-view>
+    </div>
+</template>
+
+<script>
+    import Setting from '@/setting';
+    import util from '@/libs/util';
+    export default {
+        name: 'App',
+        created () {
+            //在页面加载时读取localStorage里的状态信息
+            if (util.local.get(Setting.storeKey) ) {
+                this.$store.replaceState(Object.assign({}, this.$store.state,util.local.get(Setting.storeKey)))
+            } 
+
+            //在页面刷新时将vuex里的信息保存到localStorage里
+            window.addEventListener("beforeunload",()=>{    
+                util.local.get(Setting.tokenKey) && util.local.set(Setting.storeKey,this.$store.state)
+            })                                                                                      
+        }
+    }
+</script>
\ No newline at end of file
diff --git a/src/api/index.js b/src/api/index.js
new file mode 100644
index 0000000..03841f6
--- /dev/null
+++ b/src/api/index.js
@@ -0,0 +1,158 @@
+import Setting from '@/setting'
+let host = `${Setting.apiBaseURL}evaluation/`
+let loginhost = `${Setting.apiBaseURL}liuwanr/`
+
+export default {
+  host,
+  logins: `${loginhost}userInfo/logins`, //登录 
+  updateLogInNumber: `${loginhost}userInfo/updateLogInNumber`, //用户登录修改登录次数和登陆时间
+  uploadUserAvatars: `${loginhost}userInfo/uploadUserAvatars`, //上传头像
+  loginSchool: `${loginhost}userInfo/loginSchoolClient`, //登陆查询学校
+  loginRole: `${loginhost}userInfo/loginRole`, //登陆查询角色
+  save: `${host}tms/userInfo/add`, //注册
+  
+  queryToken: `${loginhost}userInfo/queryToken`,
+  queryWorkNumberIsExist:`${loginhost}userInfo/queryWorkNumberIsExist`,//查询学号、工号是否存在
+  queryAccountIsExist:`${loginhost}userInfo/queryAccountIsExist`,//查询员工,学生账号是否存在接口
+  
+  addStuPro: `${host}stuProfessionalArchitecture/addStuProfessionalArchitecture`, //添加学生专业 
+  queryStuPro: `${host}stuProfessionalArchitecture/queryStuProfessionalArchitecture`, //查询学生专业
+  queryStuGrade: `${host}stuProfessionalArchitecture/queryStuGrade`, //查询学生年级
+  queryStuClass: `${host}stuProfessionalArchitecture/queryStuClass`, //查询学生班级
+  deleteStuPro: `${host}stuProfessionalArchitecture/deleteStuProfessionalArchitecture`, //删除学生专业
+  updateStuPro: `${host}stuProfessionalArchitecture/updateStuProfessionalArchitecture`, //编辑学生专业
+
+  findPasswordByEmail: `${host}tms/userInfo/findPasswordByEmail`,
+  findPasswordByPhone: `${host}tms/userInfo/findPasswordByPhone`,
+  resetPassword: `${host}tms/userInfo/resetPassword`,
+  checkCode: `${host}tms/userInfo/checkCode`,
+
+  queryStudentData: `${host}student/queryStudent`, //查询学生
+  queryStudentDetails: `${host}student/queryStudentDetails`, //查询学生详情
+  addStudent: `${host}student/addStudent`, //添加学生
+  deleteStudent: `${host}student/deleteStudent`, //删除学生
+  updateStudent: `${host}student/updateStudent`, //编辑学生
+  updateStuGrade: `${host}stuProfessionalArchitecture/updateStuGrade`, //编辑学生年级
+  addStuGrade: `${host}stuProfessionalArchitecture/addStuGrade`, //添加学生年级
+  deleteStuGrade: `${host}stuProfessionalArchitecture/deleteStuGrade`, //删除学生年级
+  updateStuClass: `${host}stuProfessionalArchitecture/updateStuClass`, //编辑学生班级
+  addStuClass: `${host}stuProfessionalArchitecture/addStuClass`, //添加学生班级
+  deleteStuClass: `${host}stuProfessionalArchitecture/deleteStuClass`, //删除学生班级
+
+  queryPersonalCenter:`${host}personalCenter/queryPersonalCenter`,
+  addStaffPro: `${host}staffProfessionalArchitecture/addStaffProfessionalArchitecture`, //添加员工专业
+  queryStaffPro: `${host}staffProfessionalArchitecture/queryAllStaffProfessionalArchitecture`, //查询员工专业
+  deleteStaffPro: `${host}staffProfessionalArchitecture/deleteStaffProfessionalArchitecture`, //删除员工专业
+  deleteStaffGrade: `${host}staffGrade/deleteStaffGrade`, //删除员工部门
+  updateStaffPro: `${host}staffProfessionalArchitecture/updateStaffProfessionalArchitecture`, //编辑员工专业
+  queryStaffGrade: `${host}staffGrade/queryStaffGrade`, //查询员工部门
+  queryStaffGradeDetails: `${host}staffGrade/queryStaffGradeDetails`, //查询员工部门详情
+  addStaffGrade: `${host}staffGrade/addStaffGrade`, //新增员工部门
+  updateStaffGrade: `${host}staffGrade/updateStaffGrade`, //编辑员工部门
+  queryCourseDiscipline: `${loginhost}course/queryCourseDiscipline`, //查询课程学科
+  queryCourseProfessionalClass: `${loginhost}course/queryCourseProfessionalClass`, //查询专业类
+  queryCourseProfessional: `${loginhost}course/queryCourseProfessional`, //查询专业
+  queryPhone: `${loginhost}userInfo/queryPhone`, //查询电话是否存在
+
+  queryStaff: `${host}staff/queryStaff`, //查询员工
+  addStaff: `${host}staff/addStaff`, //添加员工
+  queryStaffDetails: `${host}staff/queryStaffDetails`, //员工详情
+  deleteStaff: `${host}staff/deleteStaff`, //删除员工
+  updateStaff: `${host}staff/updateStaff`, //更新员工
+  readStaff: `${host}staff/readStaff`, //上传员工模板
+  
+  queryGetByClassName:`${host}makeuplist/queryGetByClassName`,
+  deleteExperimentalClass:`${host}experimentalClass/deleteExperimentalClass`,//删除实验班级
+  queryAssesmentcondition:`${host}assesment/queryAssesmentcondition`,//考核成绩表格
+  queryGetById:`${host}assesment/queryGetById`,//查询考核信息
+  updateAssesment:`${host}assesment/updateAssesment`,//修改考核
+  updateState:`${host}assesment/updateState`,//点击启动修改考核时间
+  updateAssesmentTime:`${host}assesment/updateAssesmentTime`,//点击提前结束获取当前时间
+  queryAssesmentScore:`${host}assesment/queryAssesmentScore`,//获取查询成绩页面
+  queryAssesmentAchievement:`${host}assesment/queryAssesmentAchievement`,//查询成绩明细板块
+  excelExport:`${host}makeuplist/excelExport`,//模板下载
+  importMakeuplist:`${host}makeuplist/importMakeuplist`, //模板上传
+  queryAllExperiment:`${host}experiment/queryAllExperiment`,//实验项目渲染,
+  queryAttendanceSignIn:`${host}attendance/queryAttendanceSignIn`,//获得用户ID 及考勤总数
+  insertAttendance:`${host}Experimentallearning/insertAttendance`,//改变签到状态
+  queryExperimentallearning:`${host}Experimentallearning/queryExperimentallearning`,//获取项目名和签到状态
+  queryCourseDetails:`${host}course/queryCourseDetails`,//获取课程简介和课程目标
+  queryTeacherName:`${host}Experimentallearning/queryTeacherName`,//获取教师信息
+  queryStudentName:`${host}Experimentallearning/queryStudentName`,//获取学生信息
+  queryPracticeVo:`${host}experiment/queryPracticeVo`,//获取表格数据
+  queryStudentAssessment:`${host}assesmentRecord/queryStudentAssessment`, //查询姓名和个人平均分和最高分
+  queryAssesmentRecordMaxScore:`${host}assesmentRecord/queryAssesmentRecordMaxScore`, //查询学校平均分最高分
+  queryAssesmentRecordWhole:`${host}assesmentRecord/queryAssesmentRecordWhole`,//查询全国平均考核得分
+  queryAssesmentRecordMaxWhole:`${host}assesmentRecord/queryAssesmentRecordMaxWhole`, //查询全国平均分最高分
+  queryStudentByPage:`${host}experiment/queryStudentByPage`, //查询练习记录表格数据
+  queryProject:`${host}ProjectAndCourse/queryProject`,//实验项目信息展示
+  updateIsExperiment:`${host}ProjectAndCourse/updateIsExperiment`,//修改是否开启项目
+  updateIsAttendance:`${host}ProjectAndCourse/updateIsAttendance`,//修改是否考勤
+  addAssesment:`${host}assesment/addAssesment`,//添加考核
+  queryStuProfessionalArchitecture:`${host}stuProfessionalArchitecture/queryStuProfessionalArchitecture`,//修改是否考勤
+  queryStuGrade:`${host}stuProfessionalArchitecture/queryStuGrade`,//修改是否考勤
+  queryStuClass:`${host}stuProfessionalArchitecture/queryStuClass`,//修改是否考勤
+  queryStudent:`${host}stuProfessionalArchitecture/queryStudent`,//修改是否考勤
+  queryAttendanceDetailed:`${host}attendance/queryAttendanceDetailed`,//获取考勤列表数据
+  
+  queryExperimentClass:`${host}experimentalClass/queryExperimentalClass`,//查询实验班级
+  queryExperimentalClassSP:`${host}experimentalClass/queryExperimentalClassSP`,//查询实验班级学生专业
+  queryStudentClass:`${host}experimentalClass/queryStudentClass`,//查询学生行政班级
+  queryClassDetails:`${host}experimentalClass/queryExperimentClassDetails`,//查询实验班级详情
+  updateClassName:`${host}experimentalClass/updateExperimentClassName`,//修改实验班级名称
+  updateState:`${host}assesment/updateState`,//修改考核状态
+  experimentClassDeleteStudent:`${host}experimentalClass/experimentClassDeleteStudent`, //移除实验班学生
+  addExperimentalClass:`${host}experimentalClass/addExperimentalClass`,//添加实验班级
+  platformQueryCourse:`${host}course/platformQueryCourse`,
+  queryAssesment:`${host}Experimentallearning/queryAssesment`,
+  getCourse:`${host}course/getCourse`,//获取课程简介,教学目标,课程名称
+  getProfessionals:`${host}experimentalClass/getProfessionals`,// 请求专业下拉框数据
+  getStudentClass:`${host}experimentalClass/getStudentClass`,//请求行政班级下拉框数据
+  getCourseSchedule:`${host}ProjectAndCourse/getCourseSchedule`,//课程进度
+  releaseAssesment:`${host}assesment/releaseAssesment`,//发布考核
+  experimentClassAddStudent:`${host}experimentalClass/experimentClassAddStudent`,//发布考核
+  getExperimentalClass:`${host}assesment/getExperimentalClass`,//实验班级一级标题
+  getCreationTime:`${host}assesment/getCreationTime`,//实验班级二级标题
+  deleteAssesment:`${host}assesment/deleteAssesment`,//删除考核
+  queryStudentCourse:`${host}Experimentallearning/queryStudentCourse`,//学生查询课程
+  getByCourseId:`${host}assesment/getByCourseId`,//查询系统列表
+  getCoursevideo:`${host}tms/classTech/simulationPlayList`,//开始课程-课程视频
+  queryStaffPAN:`${host}staffProfessionalArchitecture/queryStaffPAN`,//查询员工专业是否存在
+  queryStudentisAssess:`${host}assesment/queryStudentisAssess`,//查看正在参与考核的学生
+
+  queryProvince: `${loginhost}province/queryProvince`, //查询省份
+  queryCity: `${loginhost}city/queryCity`, //查询城市
+  querySchoolData: `${loginhost}customer/querySchool`, //根据学校名称查询学校信息
+  
+  examinePassword:`${host}tms/user/examinePassword`,//更换密码
+  userinfoUpdate:`${host}tms/user/update`,//个人中心信息修改
+  userinfo:`${host}tms/user/userinfo`,//个人中心信息展示
+  sendEmailCode:`${host}tms/user/sendEmailCode`,//发送邮箱验证码
+  bingEmail:`${host}tms/user/bingEmail`,//邮箱验证并更新
+  sendPhoneCode:`${host}tms/user/sendPhoneCode`,//发送手机验证码
+  bindPhone:`${host}tms/user/bindPhone`,//校验手机验证码
+
+  canExperiment: `${host}tms/evaluationrecord/can_experiment`, //查询是否能够开启实验
+  openExercise: `${host}tms/evaluationrecord/openExercise`, //查询是否能够开启虚拟仿真实验
+  openTeaching: `${host}tms/evaluationrecord/openTeaching`, //查询是否能够开启教学实验
+  experimentDetail: `${host}tms/evaluationrecord/detail`, //成绩详情
+  experimentNext: `${host}tms/evaluationrecord/next`, //下一题
+  experimentNotmade: `${host}tms/evaluationrecord/not_made`, //提交之前查询是否还有未做完的试题
+  experimentPrevious: `${host}tms/evaluationrecord/previous`, //上一题
+  experimentRemaining: `${host}tms/evaluationrecord/remaining`, //获取测评剩余时间
+  experimentStart: `${host}tms/evaluationrecord/start`, //开始测评
+  experimentSubmit: `${host}tms/evaluationrecord/submit`, //提交测评
+
+  fictitiousRecord: `${host}fictitious/projectrecord/user/record`, //用户端实验记录
+  exportProjectRecord: `${host}fictitious/projectrecord/user/exportProjectRecord`, //虚拟实验记录导出
+  exportExperimentProjectRecord: `${host}fictitious/projectrecord/user/exportExperimentProjectRecord`, //个人实验记录导出
+  fictitiousScore: `${host}fictitious/projectrecord/user/score`, //个人实验概览
+  experimentRecord: `${host}fictitious/projectrecord/user/experimentRecord`, //用户端教学实验记录
+
+  joinPractice: `${host}tms/classTech/joinPractice`, //通过邀请码进入实验
+  queryArchievement: `${host}tms/classTech/queryExperimentalReport`, //查看教学实验报告
+  queryVirtualReport: `${host}tms/classTech/queryVirtualReport`, //查看虚仿实验报告
+  checkInvitationCode: `${host}tms/classTech/checkInvitationCode`, //校验是否需要邀请码
+  userRecord: `${host}tms/classTech/userRecord`, //查询班级实验列表信息
+  modifyReport: `${host}Achievement/modify`,
+}
\ No newline at end of file
diff --git a/src/assets/img/05学生-练习记录_03.png b/src/assets/img/05学生-练习记录_03.png
new file mode 100644
index 0000000..b8ac8df
Binary files /dev/null and b/src/assets/img/05学生-练习记录_03.png differ
diff --git a/src/assets/img/05学生-练习记录_05.png b/src/assets/img/05学生-练习记录_05.png
new file mode 100644
index 0000000..4ce1390
Binary files /dev/null and b/src/assets/img/05学生-练习记录_05.png differ
diff --git a/src/assets/img/17查看成绩1.png b/src/assets/img/17查看成绩1.png
new file mode 100644
index 0000000..d72e431
Binary files /dev/null and b/src/assets/img/17查看成绩1.png differ
diff --git a/src/assets/img/17查看成绩2.png b/src/assets/img/17查看成绩2.png
new file mode 100644
index 0000000..2cbad43
Binary files /dev/null and b/src/assets/img/17查看成绩2.png differ
diff --git a/src/assets/img/17查看成绩3.png b/src/assets/img/17查看成绩3.png
new file mode 100644
index 0000000..255f71e
Binary files /dev/null and b/src/assets/img/17查看成绩3.png differ
diff --git a/src/assets/img/17查看成绩4.png b/src/assets/img/17查看成绩4.png
new file mode 100644
index 0000000..5f19251
Binary files /dev/null and b/src/assets/img/17查看成绩4.png differ
diff --git a/src/assets/img/17查看成绩5.png b/src/assets/img/17查看成绩5.png
new file mode 100644
index 0000000..e1ddec9
Binary files /dev/null and b/src/assets/img/17查看成绩5.png differ
diff --git a/src/assets/img/17查看成绩6.png b/src/assets/img/17查看成绩6.png
new file mode 100644
index 0000000..cccb558
Binary files /dev/null and b/src/assets/img/17查看成绩6.png differ
diff --git a/src/assets/img/17查看成绩7.png b/src/assets/img/17查看成绩7.png
new file mode 100644
index 0000000..55ce53a
Binary files /dev/null and b/src/assets/img/17查看成绩7.png differ
diff --git a/src/assets/img/3.png b/src/assets/img/3.png
new file mode 100644
index 0000000..7b4c970
Binary files /dev/null and b/src/assets/img/3.png differ
diff --git a/src/assets/img/back.png b/src/assets/img/back.png
new file mode 100644
index 0000000..1eb13f7
Binary files /dev/null and b/src/assets/img/back.png differ
diff --git a/src/assets/img/bg_1.png b/src/assets/img/bg_1.png
new file mode 100644
index 0000000..02fb9f7
Binary files /dev/null and b/src/assets/img/bg_1.png differ
diff --git a/src/assets/img/bg_2.png b/src/assets/img/bg_2.png
new file mode 100644
index 0000000..62311da
Binary files /dev/null and b/src/assets/img/bg_2.png differ
diff --git a/src/assets/img/bind.png b/src/assets/img/bind.png
new file mode 100644
index 0000000..84626d5
Binary files /dev/null and b/src/assets/img/bind.png differ
diff --git a/src/assets/img/cup.png b/src/assets/img/cup.png
new file mode 100644
index 0000000..6fe22a5
Binary files /dev/null and b/src/assets/img/cup.png differ
diff --git a/src/assets/img/date.png b/src/assets/img/date.png
new file mode 100644
index 0000000..0844163
Binary files /dev/null and b/src/assets/img/date.png differ
diff --git a/src/assets/img/edit.png b/src/assets/img/edit.png
new file mode 100644
index 0000000..8aab22d
Binary files /dev/null and b/src/assets/img/edit.png differ
diff --git a/src/assets/img/evaluation_bg1.png b/src/assets/img/evaluation_bg1.png
new file mode 100644
index 0000000..f2b3351
Binary files /dev/null and b/src/assets/img/evaluation_bg1.png differ
diff --git a/src/assets/img/evaluation_bg2.png b/src/assets/img/evaluation_bg2.png
new file mode 100644
index 0000000..99bdf13
Binary files /dev/null and b/src/assets/img/evaluation_bg2.png differ
diff --git a/src/assets/img/evaluation_bg3.png b/src/assets/img/evaluation_bg3.png
new file mode 100644
index 0000000..3abf350
Binary files /dev/null and b/src/assets/img/evaluation_bg3.png differ
diff --git a/src/assets/img/false.png b/src/assets/img/false.png
new file mode 100644
index 0000000..352a207
Binary files /dev/null and b/src/assets/img/false.png differ
diff --git a/src/assets/img/get.png b/src/assets/img/get.png
new file mode 100644
index 0000000..1408b1d
Binary files /dev/null and b/src/assets/img/get.png differ
diff --git a/src/assets/img/hourglass.png b/src/assets/img/hourglass.png
new file mode 100644
index 0000000..5e24de0
Binary files /dev/null and b/src/assets/img/hourglass.png differ
diff --git a/src/assets/img/icon-weigouxuan.png b/src/assets/img/icon-weigouxuan.png
new file mode 100644
index 0000000..e74d5c2
Binary files /dev/null and b/src/assets/img/icon-weigouxuan.png differ
diff --git a/src/assets/img/icon-xiangyou.png b/src/assets/img/icon-xiangyou.png
new file mode 100644
index 0000000..63a09e1
Binary files /dev/null and b/src/assets/img/icon-xiangyou.png differ
diff --git a/src/assets/img/icon-yigouxuan.png b/src/assets/img/icon-yigouxuan.png
new file mode 100644
index 0000000..d1c0d1c
Binary files /dev/null and b/src/assets/img/icon-yigouxuan.png differ
diff --git a/src/assets/img/icon_1.png b/src/assets/img/icon_1.png
new file mode 100644
index 0000000..a134364
Binary files /dev/null and b/src/assets/img/icon_1.png differ
diff --git a/src/assets/img/icon_2.png b/src/assets/img/icon_2.png
new file mode 100644
index 0000000..e045a83
Binary files /dev/null and b/src/assets/img/icon_2.png differ
diff --git a/src/assets/img/icon_qq.png b/src/assets/img/icon_qq.png
new file mode 100644
index 0000000..203ecf1
Binary files /dev/null and b/src/assets/img/icon_qq.png differ
diff --git a/src/assets/img/icon_wechat.png b/src/assets/img/icon_wechat.png
new file mode 100644
index 0000000..00d0604
Binary files /dev/null and b/src/assets/img/icon_wechat.png differ
diff --git a/src/assets/img/idcard.png b/src/assets/img/idcard.png
new file mode 100644
index 0000000..0b71982
Binary files /dev/null and b/src/assets/img/idcard.png differ
diff --git a/src/assets/img/img.jpg b/src/assets/img/img.jpg
new file mode 100644
index 0000000..cbe6c00
Binary files /dev/null and b/src/assets/img/img.jpg differ
diff --git a/src/assets/img/login_icon_close.png b/src/assets/img/login_icon_close.png
new file mode 100644
index 0000000..f9f10dd
Binary files /dev/null and b/src/assets/img/login_icon_close.png differ
diff --git a/src/assets/img/logo-hh.png b/src/assets/img/logo-hh.png
new file mode 100644
index 0000000..90075d6
Binary files /dev/null and b/src/assets/img/logo-hh.png differ
diff --git a/src/assets/img/logo-hh1.png b/src/assets/img/logo-hh1.png
new file mode 100644
index 0000000..4eec715
Binary files /dev/null and b/src/assets/img/logo-hh1.png differ
diff --git a/src/assets/img/logo.png b/src/assets/img/logo.png
new file mode 100644
index 0000000..8782314
Binary files /dev/null and b/src/assets/img/logo.png differ
diff --git a/src/assets/img/open.png b/src/assets/img/open.png
new file mode 100644
index 0000000..caba915
Binary files /dev/null and b/src/assets/img/open.png differ
diff --git a/src/assets/img/person/bg.png b/src/assets/img/person/bg.png
new file mode 100644
index 0000000..3cd9a55
Binary files /dev/null and b/src/assets/img/person/bg.png differ
diff --git a/src/assets/img/person/manag.png b/src/assets/img/person/manag.png
new file mode 100644
index 0000000..5cb92fd
Binary files /dev/null and b/src/assets/img/person/manag.png differ
diff --git a/src/assets/img/person/user.png b/src/assets/img/person/user.png
new file mode 100644
index 0000000..6a2cafc
Binary files /dev/null and b/src/assets/img/person/user.png differ
diff --git a/src/assets/img/ques1.png b/src/assets/img/ques1.png
new file mode 100644
index 0000000..bc722d0
Binary files /dev/null and b/src/assets/img/ques1.png differ
diff --git a/src/assets/img/school.png b/src/assets/img/school.png
new file mode 100644
index 0000000..53d8523
Binary files /dev/null and b/src/assets/img/school.png differ
diff --git a/src/assets/img/select.png b/src/assets/img/select.png
new file mode 100644
index 0000000..1099f6f
Binary files /dev/null and b/src/assets/img/select.png differ
diff --git a/src/assets/img/station1.png b/src/assets/img/station1.png
new file mode 100644
index 0000000..2e91783
Binary files /dev/null and b/src/assets/img/station1.png differ
diff --git a/src/assets/img/station10.png b/src/assets/img/station10.png
new file mode 100644
index 0000000..17014ed
Binary files /dev/null and b/src/assets/img/station10.png differ
diff --git a/src/assets/img/station11.png b/src/assets/img/station11.png
new file mode 100644
index 0000000..af52b2e
Binary files /dev/null and b/src/assets/img/station11.png differ
diff --git a/src/assets/img/station12.png b/src/assets/img/station12.png
new file mode 100644
index 0000000..0dc928f
Binary files /dev/null and b/src/assets/img/station12.png differ
diff --git a/src/assets/img/station2.png b/src/assets/img/station2.png
new file mode 100644
index 0000000..56ec266
Binary files /dev/null and b/src/assets/img/station2.png differ
diff --git a/src/assets/img/station3.png b/src/assets/img/station3.png
new file mode 100644
index 0000000..44b75d2
Binary files /dev/null and b/src/assets/img/station3.png differ
diff --git a/src/assets/img/station4.png b/src/assets/img/station4.png
new file mode 100644
index 0000000..9126c65
Binary files /dev/null and b/src/assets/img/station4.png differ
diff --git a/src/assets/img/station5.png b/src/assets/img/station5.png
new file mode 100644
index 0000000..b4f5fe5
Binary files /dev/null and b/src/assets/img/station5.png differ
diff --git a/src/assets/img/station6.png b/src/assets/img/station6.png
new file mode 100644
index 0000000..66c7e19
Binary files /dev/null and b/src/assets/img/station6.png differ
diff --git a/src/assets/img/station7.png b/src/assets/img/station7.png
new file mode 100644
index 0000000..4e4df0d
Binary files /dev/null and b/src/assets/img/station7.png differ
diff --git a/src/assets/img/station8.png b/src/assets/img/station8.png
new file mode 100644
index 0000000..cc3246f
Binary files /dev/null and b/src/assets/img/station8.png differ
diff --git a/src/assets/img/station9.png b/src/assets/img/station9.png
new file mode 100644
index 0000000..29fe2a6
Binary files /dev/null and b/src/assets/img/station9.png differ
diff --git a/src/assets/img/student1.png b/src/assets/img/student1.png
new file mode 100644
index 0000000..7b4971c
Binary files /dev/null and b/src/assets/img/student1.png differ
diff --git a/src/assets/img/student2.png b/src/assets/img/student2.png
new file mode 100644
index 0000000..0da0bed
Binary files /dev/null and b/src/assets/img/student2.png differ
diff --git a/src/assets/img/student3.png b/src/assets/img/student3.png
new file mode 100644
index 0000000..027bcd7
Binary files /dev/null and b/src/assets/img/student3.png differ
diff --git a/src/assets/img/student4.png b/src/assets/img/student4.png
new file mode 100644
index 0000000..8a1c60d
Binary files /dev/null and b/src/assets/img/student4.png differ
diff --git a/src/assets/img/true.png b/src/assets/img/true.png
new file mode 100644
index 0000000..abd335a
Binary files /dev/null and b/src/assets/img/true.png differ
diff --git a/src/components/pdf/index.vue b/src/components/pdf/index.vue
new file mode 100644
index 0000000..e822cb5
--- /dev/null
+++ b/src/components/pdf/index.vue
@@ -0,0 +1,124 @@
+<template>
+    <div>
+        <el-dialog
+            custom-class="pdf-dia"
+            :close-on-click-modal="false"
+            :visible.sync="visible"
+            @close="closePdf"
+            :fullscreen="true"
+            :modal="false"
+            :append-to-body="true">
+            <div>
+                <button type="button" aria-label="Close" class="el-dialog__headerbtn" @click="closePdf"><i class="el-dialog__close el-icon el-icon-close"></i></button>
+                <div class="pdf">
+                    <p class="arrow">
+                        <span @click="changePdfPage(0)" class="turn el-icon-arrow-left" :class="{grey: currentPage==1}"></span>
+                        {{currentPage}} / {{pageCount}}
+                        <span @click="changePdfPage(1)" class="turn el-icon-arrow-right" :class="{grey: currentPage==pageCount}"></span>
+                    </p>
+                    <pdf
+                    class="pdf-wrap"
+                    :src="src"
+                    :page="currentPage"
+                    @num-pages="pageCount=$event"
+                    @page-loaded="currentPage=$event"
+                    @loaded="loadPdfHandler"
+                    >
+                    </pdf>
+                </div>
+            </div>
+        </el-dialog>
+    </div>
+</template>
+<script>
+import pdf from "vue-pdf";
+export default {
+    props: ['visible','src'],
+    data() {
+        return {
+            pdfVisible: false,
+            pdfSrc: '',
+            currentPage: 0,
+            pageCount: 0,
+            fileType: 'pdf',
+        };
+    },
+    components: { pdf },
+    mounted(){
+        this.addEvent()
+    },
+    methods: {
+        closePdf(){
+            this.$emit('update:visible',false)
+            this.$emit('update:src','')
+            this.currentPage = 1
+        },
+        changePdfPage (val) {
+            if (val === 0 && this.currentPage > 1) {
+            this.currentPage--
+            }
+            if (val === 1 && this.currentPage < this.pageCount) {
+            this.currentPage++
+            }
+        },
+        loadPdfHandler (e) {
+            this.currentPage = 1
+        },
+        addEvent(){
+            document.onkeydown = e => {
+                let key = window.event.keyCode
+                if(key == 37){
+                    this.changePdfPage(0)
+                }else if(key == 39){
+                    this.changePdfPage(1)
+                }
+            }
+            this.$once('hook:beforeDestroy',() => {
+                document.onkeydown = null
+            })
+        }
+    }
+};
+</script>
+<style lang="scss" scoped>
+    /deep/.pdf-dia{
+        border-radius: 0 !important;
+        .el-dialog__header{
+            display: none;
+        }
+        .el-dialog__body{
+            padding: 0;
+        }
+        .el-dialog__headerbtn{
+            top: 10px;
+            .el-dialog__close{
+                color: #fff;
+                font-size: 16px;
+            }
+        }
+
+        .pdf{
+            .arrow{
+                display: flex;
+                justify-content: center;
+                align-items: center;
+                width: 100%;
+                padding: 10px 0;
+                font-size: 16px;
+                color: #fff;
+                background-color: #333;
+                .turn{
+                    margin: 0 10px;
+                    font-size: 18px;
+                    cursor: pointer;
+                }
+            }
+            .pdf-wrap{
+                height: calc(100vh - 45px);
+                margin: 0 auto;
+                overflow: auto;
+            }
+        }
+    }
+    
+</style>
\ No newline at end of file
diff --git a/src/components/quill/index.vue b/src/components/quill/index.vue
new file mode 100644
index 0000000..f4d2118
--- /dev/null
+++ b/src/components/quill/index.vue
@@ -0,0 +1,179 @@
+<template>
+    <div class="quill" :class="classes">
+        <div ref="editor" :style="styles" v-loading="loading"></div>
+
+        <el-upload :action="this.api.fileupload" :before-upload="beforeUpload" :on-success="editorUploadSuccess" style="display: none">
+            <el-button class="editorUpload" size="small" type="primary">点击上传</el-button>
+        </el-upload>
+    </div>
+</template>
+
+<script>
+    import Quill from 'quill';
+    import 'quill/dist/quill.core.css';
+    import 'quill/dist/quill.snow.css';
+    import 'quill/dist/quill.bubble.css';
+    import toolbarOptions from './options'
+
+    export default {
+        name: 'quill',
+        props: {
+            value: {
+                type: String,
+                default: ''
+            },
+            readonly: {
+                type: Boolean,
+                default: false
+            },
+            toTop: {
+                type: Boolean,
+                default: true
+            },
+            border: {
+                type: Boolean,
+                default: false
+            },
+            height: {
+                type: Number
+            },
+            minHeight: {
+                type: Number
+            }
+        },
+        data () {
+            return {
+                Quill: null,
+                currentValue: '',
+                options: {
+                    theme: 'snow',
+                    bounds: document.body,
+                    debug: 'warn',
+                    modules: {
+                        toolbar: {
+                            container: toolbarOptions,
+                            handlers: {
+                                'image': function (value) {
+                                    if (value) {
+                                        // 调用iview图片上传
+                                        document.querySelector('.editorUpload').click()
+                                    } else {
+                                        this.Quill.format('image', false);
+                                    }
+                                }
+                            }
+                        }
+                    },
+                    placeholder: '',
+                    readOnly: this.readonly
+                },
+                loading: false
+            }
+        },
+        computed: {
+            classes () {
+                return [
+                    {
+                        'quill-no-border': !this.border
+                    }
+                ];
+            },
+            styles () {
+                let style = {};
+                if (this.minHeight) {
+                    style.minHeight = `${this.minHeight}px`;
+                }
+                if (this.height) {
+                    style.height = `${this.height}px`;
+                }
+                return style;
+            }
+        },
+        watch: {
+            value: {
+                handler (val) {
+                    if (val !== this.currentValue) {
+                        this.currentValue = val;
+                        if (this.Quill) {
+                            this.Quill.pasteHTML(this.value);
+                        }
+                    }
+                },
+                immediate: true
+            }
+        },
+        mounted () {
+            this.init();
+        },
+        beforeDestroy () {
+            // 在组件销毁后销毁实例
+            this.Quill = null;
+        },
+        methods: {
+            init () {
+                const editor = this.$refs.editor;
+                // 初始化编辑器
+                this.Quill = new Quill(editor, this.options);
+                // 默认值
+                this.Quill.pasteHTML(this.currentValue);
+                if(this.toTop){
+                    this.$nextTick(() => {
+                        window.scrollTo(0,0)
+                    })
+                }
+                // 绑定事件
+                this.Quill.on('text-change', (delta, oldDelta, source) => {
+                    const html = this.$refs.editor.children[0].innerHTML;
+                    const text = this.Quill.getText();
+                    const quill = this.Quill;
+                    // 更新内部的值
+                    this.currentValue = html;
+                    // 发出事件 v-model
+                    this.$emit('input', html);
+                    // 发出事件
+                    this.$emit('on-change', { html, text, quill });
+                });
+                // 将一些 quill 自带的事件传递出去
+                this.Quill.on('text-change', (delta, oldDelta, source) => {
+                    this.$emit('on-text-change', delta, oldDelta, source);
+                });
+                this.Quill.on('selection-change', (range, oldRange, source) => {
+                    this.$emit('on-selection-change', range, oldRange, source);
+                });
+                this.Quill.on('editor-change', (eventName, ...args) => {
+                    this.$emit('on-editor-change', eventName, ...args);
+                });
+            },
+            beforeUpload(file){
+                this.loading = true
+            },
+            editorUploadSuccess (res) {
+                // 获取富文本组件实例
+                let quill = this.Quill
+                // 如果上传成功
+                if (res.data.filesResult.fileUrl) {
+                    // 获取光标所在位置
+                    let length = quill.getSelection().index;
+                    // 插入图片,res为服务器返回的图片链接地址
+                    quill.insertEmbed(length, 'image', res.data.filesResult.fileUrl)
+                    // 调整光标到最后
+                    quill.setSelection(length + 1)
+                } else {
+                    this.$message.success('图片插入失败')
+                }
+                this.loading = false
+            },
+        }
+    }
+</script>
+<style lang="scss" scoped>
+    .quill-no-border{
+        .ql-toolbar.ql-snow{
+            border: none;
+            border-bottom: 1px solid #e8eaec;
+        }
+        .ql-container.ql-snow{
+            border: none;
+        }
+    }
+</style>
diff --git a/src/components/quill/options.js b/src/components/quill/options.js
new file mode 100644
index 0000000..5a90edd
--- /dev/null
+++ b/src/components/quill/options.js
@@ -0,0 +1,16 @@
+export default [
+    ['bold', 'italic', 'underline', 'strike'],
+    ['blockquote', 'code-block'],
+    [{ 'header': 1 }, { 'header': 2 }],
+    [{ 'list': 'ordered' }, { 'list': 'bullet' }],
+    [{ 'script': 'sub' }, { 'script': 'super' }],
+    [{ 'indent': '-1' }, { 'indent': '+1' }],
+    [{ 'direction': 'rtl' }],
+    [{ 'size': ['small', false, 'large', 'huge'] }],
+    [{ 'header': [1, 2, 3, 4, 5, 6, false] }],
+    [{ 'color': [] }, { 'background': [] }],
+    [{ 'font': [] }],
+    [{ 'align': [] }],
+    ['clean'],
+    ['link', 'image', 'video']
+]
\ No newline at end of file
diff --git a/src/i18n/index.js b/src/i18n/index.js
new file mode 100644
index 0000000..299d2da
--- /dev/null
+++ b/src/i18n/index.js
@@ -0,0 +1,30 @@
+export const messages = {
+    'zh': {
+        i18n: {
+            breadcrumb: '国际化产品',
+            tips: '通过切换语言按钮,来改变当前内容的语言。',
+            btn: '切换英文',
+            title1: '常用用法',
+            p1: '要是你把你的秘密告诉了风,那就别怪风把它带给树。',
+            p2: '没有什么比信念更能支撑我们度过艰难的时光了。',
+            p3: '只要能把自己的事做好,并让自己快乐,你就领先于大多数人了。',
+            title2: '组件插值',
+            info: 'Element组件需要国际化,请参考 {action}。',
+            value: '文档'
+        }
+    },
+    'en': {
+        i18n: {
+            breadcrumb: 'International Products',
+            tips: 'Click on the button to change the current language. ',
+            btn: 'Switch Chinese',
+            title1: 'Common usage',
+            p1: "If you reveal your secrets to the wind you should not blame the wind for  revealing them to the trees.",
+            p2: "Nothing can help us endure dark times better than our faith. ",
+            p3: "If you can do what you do best and be happy, you're further along in life  than most people.",
+            title2: 'Component interpolation',
+            info: 'The default language of Element is Chinese. If you wish to use another language, please refer to the {action}.',
+            value: 'documentation'
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/layouts/footer/index.vue b/src/layouts/footer/index.vue
new file mode 100644
index 0000000..b00f26e
--- /dev/null
+++ b/src/layouts/footer/index.vue
@@ -0,0 +1,43 @@
+<template>
+    <div>
+        <div class="copyright">
+            <a href="https://beian.miit.gov.cn/#/Integrated/index" target="_blank">粤ICP备20072679号</a>
+        </div>
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        return {
+            
+        };
+    },
+    mounted(){
+        
+    },
+    methods: {
+        
+    },
+};
+</script>
+<style lang="scss" scoped>
+    .copyright{
+        padding: 20px 0;
+        color: rgba(0, 0, 0, 0.45);
+        font-size: 12px;
+        text-align: center;
+        background-color: #333;
+        p{
+            margin-bottom: 10px;
+            color: #fff;
+            font-size: 12px;
+        }
+        a{
+            color:#fff;
+            font-size: 12px;
+            &:hover{
+                opacity: .8;
+            }
+        }
+    }
+</style>
\ No newline at end of file
diff --git a/src/layouts/header/index.vue b/src/layouts/header/index.vue
new file mode 100644
index 0000000..581fe02
--- /dev/null
+++ b/src/layouts/header/index.vue
@@ -0,0 +1,121 @@
+<template>
+    <div class="header">
+        <div v-if="this.$route.path=='/setting/person'" class="goBack" @click="back"><i class="el-icon-arrow-left"></i>返回</div>
+        <template v-else>
+            <img class="logo hh" v-if="isHh" src="@/assets/img/logo-hh.png" />
+            <img class="logo" v-else src="@/assets/img/logo.png">
+        </template>
+        <div class="header-right">
+            <div class="header-user-con">
+                <div class="user" @click="toPersonal">
+                    <el-avatar :size="40" :src="avatar"></el-avatar>
+                    <span class="user-avator">{{userName}}</span>
+                </div>
+                <el-divider class="ml20" direction="vertical"></el-divider>
+                <el-button type="text" class="ml20" @click="logout">退出</el-button>
+            </div>
+        </div>
+    </div>
+</template>
+<script>
+import { mapState, mapActions } from 'vuex'
+import util from '@/libs/util'
+import Setting from '@/setting'
+export default {
+    data() {
+        return {
+            isHh: Setting.isHh,
+        };
+    },
+    computed: {
+        ...mapState('user', [
+            'avatar','userName'
+        ]),
+    },
+    mounted(){
+        
+    },
+    methods: {
+        ...mapActions('user', [
+            'logout'
+        ]),
+        toPersonal(){
+            this.$router.push('/setting/person')
+        },
+        back(){
+            if(this.$route.path == '/addassessment'){
+                this.$router.push({ path: '/teacherhome', query: { active: true }})
+            }else{
+                this.$router.go(-1)
+            }
+        }
+    },
+};
+</script>
+<style scoped lang="scss">
+.goBack{
+    cursor: pointer;
+    line-height: 60px;
+    height: 60px;
+    font-size: 16px;
+    font-weight: bold;
+    margin-left: 20px;
+}
+.goBack i{
+    color: #9278ff;
+    font-size: 20px;
+}
+.header {
+    position: relative;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    box-sizing: border-box;
+    width: 100%;
+    height: 60px;
+    font-size: 16px;
+    color: #333;
+}
+.header .logo {
+    width: 150px;
+    margin-left: 20px;
+    &.hh{
+        width: 500px;
+    }
+}
+.header-right {
+    padding-right: 50px;
+}
+.header-user-con {
+    display: flex;
+    align-items: center;
+
+    .user{
+        display: inline-flex;
+        align-items: center;
+        cursor: pointer;
+    }
+}
+.user-avator {
+    margin-left: 10px;
+}
+.ml20{
+    margin-left: 20px;
+}
+.user-avator img {
+    display: block;
+    width: 40px;
+    height: 40px;
+    border-radius: 50%;
+}
+.header-right .el-button--text{
+    color: #333;
+}
+.header-right .el-divider--vertical{
+    width: 2px;
+    height: 15px;
+}
+.header-right .el-divider{
+    background-color: #333;
+}
+</style>
diff --git a/src/layouts/home/index.vue b/src/layouts/home/index.vue
new file mode 100644
index 0000000..fee3944
--- /dev/null
+++ b/src/layouts/home/index.vue
@@ -0,0 +1,69 @@
+<template>
+    <div class="main">
+        <v-head></v-head>
+        <div class="layout">
+            <navbar v-if="!hideNavList.includes($route.path)"></navbar>
+            <div class="content">
+                <transition name="move" mode="out-in">
+                    <router-view class="view"></router-view>
+                </transition>
+                <el-backtop target=".content"></el-backtop>
+                <v-footer ref="footer"></v-footer>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script>
+import { mapState, mapActions } from 'vuex'
+import util from '@/libs/util'
+import Setting from '@/setting'
+import vHead from '../header'
+import navbar from '../navbar'
+import vFooter from '../footer'
+export default {
+    data() {
+        return {
+            hideNavList: ['/record/show','/setting/person']
+        };
+    },
+    components: {
+        vHead,
+        navbar,
+        vFooter
+    },
+    computed: {
+        
+    },
+    mounted() {
+        this.autoLogout()
+    },
+    methods: {
+        ...mapActions('user', [
+            'logout'
+        ]),
+        autoLogout(){
+            let lastTime = new Date().getTime()
+            document.onmousedown = () => {
+                lastTime = new Date().getTime()
+            }
+            
+            setInterval(() => {
+                if(util.local.get(Setting.tokenKey) && (new Date().getTime() - lastTime) > Setting.autoLogoutTime){
+                    util.errorMsg('用户登录过期,请重新登录')
+                    setTimeout(this.logout,1500)
+                }
+            },1000)
+        }
+    }
+};
+</script>
+<style lang="scss" scoped>
+    .main{
+        min-height: 100%;
+        .view{
+            min-height: calc(100vh - 175px);
+            padding: 24px;
+        }
+    }
+</style>
\ No newline at end of file
diff --git a/src/layouts/navbar/index.vue b/src/layouts/navbar/index.vue
new file mode 100644
index 0000000..493e852
--- /dev/null
+++ b/src/layouts/navbar/index.vue
@@ -0,0 +1,69 @@
+<template>
+    <div>
+        <el-tabs v-model="active" @tab-click="jump">
+            <el-tab-pane v-for="(item,index) in menus" :key="index" :label="item.label" :name="item.index"></el-tab-pane>
+        </el-tabs>
+    </div>
+</template>
+
+<script>
+import { mapState,mapActions } from 'vuex'
+import Setting from '@/setting'
+import util from '@/libs/util'
+export default {
+    data() {
+        return {
+            active: this.$route.path,
+            menus: [
+                {
+                    index: '/preview/list',
+                    label: '课前预习'
+                },
+                {
+                    index: '/station/list',
+                    label: '实验台'
+                },
+                {
+                    index: '/ass/list',
+                    label: '考核列表'
+                },
+                {
+                    index: '/record/list',
+                    label: '实验记录'
+                },
+            ],
+        };
+    },
+    watch: {
+        '$route'(to,from) {
+            this.active = this.$route.path
+        }
+    },
+    mounted() {
+        
+    },
+    methods: {
+        jump(tab){
+            this.active = tab.name
+            this.$router.push(tab.name).catch(err => {})
+        },
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+    /deep/.el-tabs__header{
+        z-index: 2;
+        padding: 20px 60px 0;
+        margin: 0;
+        box-shadow:0px 0px 25px 2px rgba(48,115,248,0.14);
+        background-color: #fff;
+        .el-tabs__nav-wrap::after{
+            background-color: #fff;
+            .el-tabs__item{
+                padding: 0 30px;
+                outline: none;
+            }
+        }
+    }
+</style>
\ No newline at end of file
diff --git a/src/libs/auth/generateBtnPermission.js b/src/libs/auth/generateBtnPermission.js
new file mode 100644
index 0000000..d8ed295
--- /dev/null
+++ b/src/libs/auth/generateBtnPermission.js
@@ -0,0 +1,25 @@
+/**
+ * @description 生成按钮级别权限组
+ * */
+
+import store from '@/store';
+export default function(data){
+    let result = []
+    data.map(e => {
+        if(e.select){
+            e.children.map(n => {
+                if(n.select){
+                    if(n.children.length){
+                        result.push(`${e.name}:${n.name}`)
+                        n.children.map(j => {
+                            j.select && (e.path ? result.push(`${e.path}:${n.name}:${j.name}`) : result.push(`${n.path}:${j.name}`))
+                        })
+                    }else{
+                        result.push(`${e.path}:${n.name}`)
+                    }
+                }
+            })
+        }
+    })
+    store.dispatch('auth/addBtnAuth',result)
+}
diff --git a/src/libs/bus.js b/src/libs/bus.js
new file mode 100644
index 0000000..b433c90
--- /dev/null
+++ b/src/libs/bus.js
@@ -0,0 +1,6 @@
+import Vue from 'vue';
+
+// 使用 Event Bus
+const bus = new Vue();
+
+export default bus;
\ No newline at end of file
diff --git a/src/libs/random_str.js b/src/libs/random_str.js
new file mode 100644
index 0000000..d9b5838
--- /dev/null
+++ b/src/libs/random_str.js
@@ -0,0 +1,10 @@
+// 生成随机字符串
+export default function (len = 32) {
+    const $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
+    const maxPos = $chars.length;
+    let str = '';
+    for (let i = 0; i < len; i++) {
+        str += $chars.charAt(Math.floor(Math.random() * maxPos));
+    }
+    return str;
+}
diff --git a/src/libs/resize/index.js b/src/libs/resize/index.js
new file mode 100644
index 0000000..0bf38b6
--- /dev/null
+++ b/src/libs/resize/index.js
@@ -0,0 +1,16 @@
+// rem等比适配配置文件
+// 基准大小
+const baseSize = 16
+// 设置 rem 函数
+function setRem () {
+  // 当前页面宽度相对于 1920宽的缩放比例,可根据自己需要修改。
+  const scale = document.documentElement.clientWidth / 1920
+  // 设置页面根节点字体大小(“Math.min(scale, 2)” 指最高放大比例为2,可根据实际业务需求调整)
+  document.documentElement.style.fontSize = baseSize * Math.min(scale, 2) + 'px'
+}
+// 初始化
+setRem()
+// 改变窗口大小时重新设置 rem
+window.onresize = function () {
+  setRem()
+}
\ No newline at end of file
diff --git a/src/libs/route/addRoutes.js b/src/libs/route/addRoutes.js
new file mode 100644
index 0000000..ea953ee
--- /dev/null
+++ b/src/libs/route/addRoutes.js
@@ -0,0 +1,32 @@
+import store from '@/store';
+import router from '@/router';
+import generateBtnPermission from '../auth/generateBtnPermission';
+
+const newRoutes = []
+
+function createMeta(item){
+    let meta = { title: item.name }
+    return meta
+}
+
+function createRoute(data){
+    data.map(e => {
+        if(e.select && e.path){
+            let meta = createMeta(e)
+            newRoutes.push({
+                name: e.path,
+                path: e.path,
+                path: () => import(`@/pages/${e.path}.vue`),
+                meta
+            })
+        }
+        e.children && e.children.length && createRoute(e.children)
+    })
+}
+
+export default function(data,path){
+    generateBtnPermission(data)
+    createRoute(data)
+    store.dispatch('auth/addRoutes',newRoutes)
+    // router.addRoutes(routes)
+}
\ No newline at end of file
diff --git a/src/libs/route/generateRoutes.js b/src/libs/route/generateRoutes.js
new file mode 100644
index 0000000..638f846
--- /dev/null
+++ b/src/libs/route/generateRoutes.js
@@ -0,0 +1,26 @@
+import store from '@/store';
+import router from '@/router';
+
+export default function(){
+    setTimeout(() => {
+        let routes = store.state.auth.routes
+        routes.forEach(e => {
+            if(e.path == '/'){
+                e.component = () => import('@/layouts/home/index.vue')
+            }else{
+                e.component = () => import(`@/pages/${e.path}.vue`)
+            }
+            
+            e.children && e.children.forEach(n => {
+                n.path && (n.component = () => import(`@/pages/${n.path}.vue`))
+            })
+        })
+        
+        routes.push({
+            path: '*',
+            redirect: '404'
+        })
+        
+        router.addRoutes(routes)
+    },500)
+}
\ No newline at end of file
diff --git a/src/libs/route/resetRouter.js b/src/libs/route/resetRouter.js
new file mode 100644
index 0000000..096e4f5
--- /dev/null
+++ b/src/libs/route/resetRouter.js
@@ -0,0 +1,6 @@
+import router from '@/router';
+
+export default function(){
+    const newRouter = createRouter()
+    router.matcher = newRouter.matcher
+}
\ No newline at end of file
diff --git a/src/libs/util.cookies.js b/src/libs/util.cookies.js
new file mode 100644
index 0000000..63c9a8b
--- /dev/null
+++ b/src/libs/util.cookies.js
@@ -0,0 +1,43 @@
+import Cookies from 'js-cookie';
+import Setting from '@/setting';
+
+const cookies = {};
+
+/**
+ * @description 存储 cookie 值
+ * @param {String} name cookie name
+ * @param {String} value cookie value
+ * @param {Object} cookieSetting cookie setting
+ */
+cookies.set = function (name = 'default', value = '', cookieSetting = {}) {
+    let currentCookieSetting = {
+        expires: Setting.cookiesExpires
+    };
+    Object.assign(currentCookieSetting, cookieSetting);
+    Cookies.set(`admin-${name}`, value, currentCookieSetting);
+};
+
+/**
+ * @description 拿到 cookie 值
+ * @param {String} name cookie name
+ */
+cookies.get = function (name = 'default') {
+    return Cookies.get(`admin-${name}`);
+};
+
+/**
+ * @description 拿到 cookie 全部的值
+ */
+cookies.getAll = function () {
+    return Cookies.get();
+};
+
+/**
+ * @description 删除 cookie
+ * @param {String} name cookie name
+ */
+cookies.remove = function (name = 'default') {
+    return Cookies.remove(`admin-${name}`);
+};
+
+export default cookies;
diff --git a/src/libs/util.db.js b/src/libs/util.db.js
new file mode 100644
index 0000000..944ea81
--- /dev/null
+++ b/src/libs/util.db.js
@@ -0,0 +1,83 @@
+/**
+ * localStorage
+ * @调用:_local.set('access_token', '123456', 5000);
+ * @调用:_local.get('access_token');
+ */
+
+var _local = {
+    //存储,可设置过期时间
+    set(key, value, expires) {
+        let params = { key, value, expires };
+        if (expires) {
+            // 记录何时将值存入缓存,毫秒级
+            var data = Object.assign(params, { startTime: new Date().getTime() });
+            localStorage.setItem(key, JSON.stringify(data));
+        } else {
+            if (Object.prototype.toString.call(value) == '[object Object]') {
+                value = JSON.stringify(value);
+            }
+            if (Object.prototype.toString.call(value) == '[object Array]') {
+                value = JSON.stringify(value);
+            }
+            localStorage.setItem(key, value);
+        }
+    },
+    //取出
+    get(key) {
+        let item = localStorage.getItem(key);
+        // 先将拿到的试着进行json转为对象的形式
+        try {
+            item = JSON.parse(item);
+        } catch (error) {
+            // eslint-disable-next-line no-self-assign
+            item = item;
+        }
+        // 如果有startTime的值,说明设置了失效时间
+        if (item && item.startTime) {
+            let date = new Date().getTime();
+
+            // 如果大于就是过期了,如果小于或等于就还没过期
+            if (date - item.startTime > item.expires) {
+                localStorage.removeItem(key);
+                return false;
+            } else {
+                return item.value;
+            }
+        } else {
+            return item;
+        }
+    },
+    // 删除
+    remove(key) {
+        localStorage.removeItem(key);
+    },
+    // 清除全部
+    clear() {
+        localStorage.clear();
+    }
+}
+
+/**
+ * sessionStorage
+ */
+var _session = {
+    get: function (key) {
+        var data = sessionStorage[key];
+        if (!data || data === "null") {
+            return null;
+        }
+        return data;
+    },
+    set: function (key, value) {
+        sessionStorage[key] = value;
+    },
+    // 删除
+    remove(key) {
+        sessionStorage.removeItem(key);
+    },
+    // 清除全部
+    clear() {
+        sessionStorage.clear();
+    }
+}
+export { _local, _session }
\ No newline at end of file
diff --git a/src/libs/util.js b/src/libs/util.js
new file mode 100644
index 0000000..ad0d0ba
--- /dev/null
+++ b/src/libs/util.js
@@ -0,0 +1,159 @@
+import cookies from './util.cookies'
+import {_local,_session} from './util.db'
+import { Message } from 'element-ui'
+import store from '@/store'
+import axios from 'axios'
+import api from '@/api'
+import Setting from '@/setting'
+
+let logout = false
+const util = {
+  cookies,
+  local: _local,
+  session: _session,
+  // 传入身份证获取生日
+  getBirth(idCard) {
+    var birthday = "";
+    if(idCard != null && idCard != ""){
+      if(idCard.length == 15){
+        birthday = "19"+idCard.slice(6,12);
+      } else if(idCard.length == 18){
+        birthday = idCard.slice(6,14);
+      }	
+      birthday = birthday.replace(/(.{4})(.{2})/,"$1-$2-");
+      //通过正则表达式来指定输出格式为:1990-01-01
+    }	
+    return birthday;
+  },
+  // new Date('2020-11-12 00:00:00') 在IE下失效,因此把-替换成/
+  dateCompatible(date) {
+    return date.replace(/\-/g, '/')
+  },
+  // 日期时间前面补零
+  formateTime(num) {
+    return num < 10 ? `0${num}` : num
+  },
+  //返回格式化时间,传参例如:"yyyy-MM-dd hh:mm:ss"
+  formatDate(fmt,date) {
+    var date = date ? date : new Date()
+    var o = { 
+      "M+" : date.getMonth()+1,                 //月份 
+      "d+" : date.getDate(),                    //日 
+      "h+" : date.getHours(),                   //小时 
+      "m+" : date.getMinutes(),                 //分 
+      "s+" : date.getSeconds(),                 //秒 
+      "q+" : Math.floor((date.getMonth()+3)/3), //季度 
+      "S"  : date.getMilliseconds()             //毫秒 
+    }; 
+    if(/(y+)/.test(fmt)) {
+            fmt=fmt.replace(RegExp.$1, (date.getFullYear()+"").substr(4 - RegExp.$1.length)); 
+    }
+    for(var k in o) {
+        if(new RegExp("("+ k +")").test(fmt)){
+            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
+        }
+    }
+    return fmt; 
+  },
+  // 移除数组中指定值
+  removeByValue(arr, val) {
+    for(var i=0; i<arr.length; i++) {
+        if(arr[i] == val) {
+          arr.splice(i, 1);
+          break;
+        }
+    }
+  },
+  // 传入文件后缀判断是否是视频
+  isVideo(ext) {
+    if('mp4,3gp,mov,m4v,avi,dat,mkv,flv,vob,rmvb,rm,qlv'.includes(ext)) return true
+    return false
+  },
+  // 传入文件后缀判断是否是音频
+  isAudio(ext) {
+    if('mp3,aac,ape,flac,wav,wma,amr,mid'.includes(ext)) return true
+    return false
+  },
+  // 传入文件后缀判断是否是图片
+  isImg(ext) {
+    if('jpg,jpeg,png,gif,svg,psd'.includes(ext)) return true
+    return false
+  },
+  // 传入文件后缀判断是否是pdf以外的文档
+  isDoc(ext) {
+    if(!util.isVideo(ext) && !util.isAudio(ext) && !util.isImg(ext) && ext != 'pdf') return true
+    return false
+  },
+  // 循环去除html标签
+  removeHtmlTag(list,attr) {
+    list.map(n => {
+      n[attr] = n[attr].replace(/<\/?.+?>/gi,'')
+    })
+    return list
+  },
+  // 传入文件名获取文件后缀
+  getFileExt(fileName) {
+    return fileName.substring(fileName.lastIndexOf('.') + 1)
+  },
+  // 传入文件名和路径,下载图片视频,支持跨域,a标签加download不支持跨域
+  downloadFile(fileName,url) {
+    var x = new XMLHttpRequest()
+    x.open("GET", url, true)
+    x.responseType = 'blob'
+    x.onload=function(e) {
+        var url = window.URL.createObjectURL(x.response)
+        var a = document.createElement('a')
+        a.href = url
+        a.download = fileName
+        a.click()
+    }
+    x.send()
+  },
+  // 传入文件名和数据,下载文件
+  downloadFileDirect(fileName,data) {
+    if ('download' in document.createElement('a')) { // 非IE下载
+      const elink = document.createElement('a')
+      elink.download = fileName
+      elink.style.display = 'none'
+      elink.href = URL.createObjectURL(data)
+      document.body.appendChild(elink)
+      elink.click()
+      URL.revokeObjectURL(elink.href) // 释放URL 对象
+      document.body.removeChild(elink)
+    } else { // IE10+下载
+      navigator.msSaveBlob(data, fileName)
+    }
+  },
+  // 成功提示
+  successMsg(message,duration = 3000) {
+    return Message.success({message,showClose: true,offset: (document.documentElement.clientHeight - 40) / 2,duration})
+  },
+  // 警告提示
+  warningMsg(message,duration = 3000) {
+    return Message.warning({message,showClose: true,offset: (document.documentElement.clientHeight - 40) / 2,duration})
+  },
+  // 错误提示
+  errorMsg(message,duration = 3000) {
+    return Message.error({message,showClose: true,offset: (document.documentElement.clientHeight - 40) / 2,duration})
+  },
+  // 登录互踢
+  getToken(){
+    if(process.env.NODE_ENV == 'production'){
+        if(store.state.user.dataTime && !logout){
+            axios.get(`${api.queryToken}?token=${_local.get(Setting.tokenKey)}`).then(res => {
+                if(store.state.user.dataTime && (res.data.message != store.state.user.dataTime)){
+                    logout || Message.error('您已在另一台设备登录,本次登录已下线!')
+                    logout = true
+                    setTimeout(() => {
+                        _local.remove(Setting.storeKey)
+                        _local.remove(Setting.tokenKey)
+                        location.reload()
+                    },1500)
+                }
+            }).catch(err => {})
+        }
+    }
+  }
+}
+
+export default util
\ No newline at end of file
diff --git a/src/main.js b/src/main.js
new file mode 100644
index 0000000..5a63a36
--- /dev/null
+++ b/src/main.js
@@ -0,0 +1,45 @@
+import Vue from 'vue';
+import App from '@/App.vue';
+import router from '@/router';
+import ElementUI from 'element-ui';
+import '@/styles/index.scss'
+import VueI18n from 'vue-i18n';
+import mixinApp from '@/mixins/app';
+import { messages } from '@/i18n';
+import 'babel-polyfill';
+import '@/libs/resize';
+import {post,get,del,put} from '@/plugins/requests/index.js';
+import api from '@/api';
+import store from '@/store'
+import Setting from '@/setting';
+import permission from '@/router/permission';
+
+// 插件
+import plugins from '@/plugins';
+import filters from '@/plugins/filters'
+
+Vue.use(plugins);
+
+Object.keys(filters).forEach(item => Vue.filter(item,filters[item]))
+
+Vue.prototype.api = api;
+Vue.prototype.$get = get;
+Vue.prototype.$post = post;
+Vue.prototype.$del = del;
+Vue.prototype.$put = put;
+
+Vue.config.productionTip = false;
+Vue.use(VueI18n);
+Vue.use(ElementUI);
+const i18n = new VueI18n({
+    locale: Setting.i18n.default,
+    messages
+});
+
+new Vue({
+    mixins: [mixinApp],
+    router,
+    i18n,
+    store,
+    render: h => h(App)
+}).$mount('#app');
diff --git a/src/mixins/app.js b/src/mixins/app.js
new file mode 100644
index 0000000..64aaa70
--- /dev/null
+++ b/src/mixins/app.js
@@ -0,0 +1,11 @@
+/**
+ * 通用混合
+ * */
+export default {
+    methods: {
+        // 当 $route 更新时触发
+        appRouteChange (to, from) {
+
+        }
+    }
+}
diff --git a/src/mixins/setBackground/index.js b/src/mixins/setBackground/index.js
new file mode 100644
index 0000000..9d9fd4a
--- /dev/null
+++ b/src/mixins/setBackground/index.js
@@ -0,0 +1,8 @@
+export default {
+    beforeCreate() {
+        document.querySelector('body').setAttribute('style', 'background-color:#fff')
+    },
+    beforeDestroy() {
+        document.body.removeAttribute('style')
+    }
+}
\ No newline at end of file
diff --git a/src/pages/account/login/index.vue b/src/pages/account/login/index.vue
new file mode 100644
index 0000000..e3f5fb9
--- /dev/null
+++ b/src/pages/account/login/index.vue
@@ -0,0 +1,574 @@
+<template>
+    <div class="wrap">
+        <div class="header" v-if="!isHh">
+            <img class="logo" src="@/assets/img/logo.png" />
+        </div>
+
+        <div class="bg">
+            <div class="left">
+                <div class="text" v-if="isHh">
+                    <p>欢迎使用</p>
+                    <p style="margin-bottom: 15px">商学院金融工程</p>
+                    <p>与大数据实验平台</p>
+                </div>
+                <div class="text" v-else>
+                    <p>欢迎使用</p>
+                    <p>Occupation Lab</p>
+                </div>
+            </div>
+            <div class="right"></div>
+        </div>
+
+        <div class="right-form">
+            <img v-if="isHh" class="logo" src="@/assets/img/logo-hh1.png" />
+
+            <div class="form">
+                <div class="back" v-show="isReg" @click="toReg(false)">
+                    <i class="el-icon-back"></i>
+                </div>
+                <div v-if="!isReg">
+                    <el-tabs v-model="activeName">
+                        <el-tab-pane label="账号登录" name="0">
+                            <el-form :model="loginForm" :rules="loginRules" ref="loginForm" style="margin-top: 20px">
+                                <el-form-item label="用户名" prop="username">
+                                    <el-input v-model="loginForm.username" placeholder="请输入账号"></el-input>
+                                </el-form-item>
+                                <el-form-item label="密码" prop="password">
+                                    <el-input
+                                        type="password"
+                                        placeholder="请输入密码"
+                                        v-model="loginForm.password"
+                                        @keyup.enter.native="getSchool('loginForm')"
+                                    >
+                                    </el-input>
+                                </el-form-item>
+                                <el-button class="submit" type="primary" @click="getSchool('loginForm')">登录</el-button>
+                            </el-form>
+                        </el-tab-pane>
+
+                        <el-tab-pane label="手机号/邮箱登录" name="1">
+                            <el-form :model="phoneParam" :rules="phoneRules" ref="phoneParam" style="margin-top: 20px">
+                                <el-form-item label="手机号/邮箱" prop="userphone">
+                                    <el-input v-model="phoneParam.userphone" placeholder="请输入手机号/邮箱"></el-input>
+                                </el-form-item>
+                                <el-form-item label="密码" prop="phonePassword">
+                                    <el-input
+                                        type="password"
+                                        placeholder="请输入密码"
+                                        v-model="phoneParam.phonePassword"
+                                        @keyup.enter.native="getSchool('phoneParam')"
+                                    >
+                                    </el-input>
+                                </el-form-item>
+                                <el-button class="submit" type="primary" @click="getSchool('phoneParam')">登录</el-button>
+                            </el-form>
+                        </el-tab-pane>
+                    </el-tabs>
+                    <div class="links">
+                        <!-- <el-button type="text" class="ques" @click="toReg(true)">前往注册</el-button> -->
+                        <el-button type="text" class="forget" @click="forget">忘记密码?</el-button>
+                    </div>
+                </div>
+                <register v-else :isReg.sync="isReg" @updateInfo="updateInfo"></register>
+            </div>
+        </div>
+
+        <v-footer ref="footer"></v-footer>
+
+        <el-dialog title="选择角色" :visible.sync="roleDialog" width="24%" center :close-on-click-modal="false">
+            <div>
+                <el-select v-model="roleId" placeholder="请选择角色">
+                    <el-option v-for="(item,index) in roleList" :key="index" :label="item.roleName" :value="item.roleId"></el-option>
+                </el-select>
+            </div>
+            <span slot="footer" class="dialog-footer">
+                <el-button @click="cancleRoleDia">取 消</el-button>
+                <el-button v-if="activeName == '0'" type="primary" @click="roleSure('loginForm')">确 定</el-button>
+                <el-button v-else type="primary" @click="roleSure('phoneParam')">确 定</el-button>
+            </span>
+        </el-dialog>
+
+        <el-dialog :title="phoneReset ? '手机重置密码' : '邮箱重置密码'" :visible.sync="forgetVisible" :close-on-click-modal="false" @close="closeForget" width="30%">
+            <template v-if="phoneReset">
+                <el-form ref="form" label-width="60px">
+                    <el-form-item label="手机号">
+                        <el-input placeholder="请输入手机号" v-model.number="phone" maxlength="11"></el-input>
+                    </el-form-item>
+                    <el-form-item label="验证码">
+                        <div class="flex-between">
+                            <el-input v-model.number="phoneCode" placeholder="请输入验证码" maxlength="6"></el-input>
+                            <el-button style="margin-left: 10px" type="text" @click="sendPhoneCode" :disabled="phoneDisabled">{{phoneBtnText}}</el-button>
+                        </div>
+                    </el-form-item>
+                    <el-form-item label="新密码">
+                        <el-input type="password" placeholder="请输入新密码" v-model="newPassword"></el-input>
+                    </el-form-item>
+                </el-form>
+                <div class="switch" @click="switchType(false)"><span>邮箱重置密码</span></div>
+                <span slot="footer" class="dialog-footer">
+                    <el-button @click="forgetVisible = false">取 消</el-button>
+                    <el-button type="primary" @click="updatePassword(1)">确 定</el-button>
+                </span>
+            </template>
+            <template v-else>
+                <el-form ref="form" label-width="60px">
+                    <el-form-item label="邮箱">
+                        <el-input placeholder="请输入邮箱" v-model="email"></el-input>
+                    </el-form-item>
+                    <el-form-item label="验证码">
+                        <div class="flex-between">
+                            <el-input v-model.number="emailCode" placeholder="请输入验证码" maxlength="6"></el-input>
+                            <el-button style="margin-left: 10px" type="text" @click="sendEmailCode" :disabled="emailDisabled">{{emailBtnText}}</el-button>
+                        </div>
+                    </el-form-item>
+                    <el-form-item label="新密码">
+                        <el-input type="password" placeholder="请输入新密码" v-model="newPassword"></el-input>
+                    </el-form-item>
+                </el-form>
+                <div class="switch" @click="switchType(true)"><span>手机重置密码</span></div>
+                <span slot="footer" class="dialog-footer">
+                    <el-button @click="forgetVisible = false">取 消</el-button>
+                    <el-button type="primary" @click="updatePassword">确 定</el-button>
+                </span>
+            </template>
+        </el-dialog>
+    </div>
+</template>
+
+<script>
+import register from '../register'
+import vFooter from '@/layouts/footer'
+import { mapState, mapActions } from 'vuex'
+import util from '@/libs/util'
+import Setting from '@/setting'
+export default {
+    data: function() {
+        return {
+            isHh: Setting.isHh,
+            schoolId: Setting.schoolId,
+            activeName: '0',
+            isReg: false,
+            loginForm: {
+                username: '',
+                password: '',
+            },
+            loginRules: {
+                username: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
+                password: [{ required: true, message: '请输入密码', trigger: 'blur' }],
+            },
+            phoneParam: {
+                userphone: '',
+                phonePassword: ''
+            },
+            phoneRules: {
+                userphone: [{ required: true, message: '请输入手机号/邮箱', trigger: 'blur' }],
+                phonePassword: [{ required: true, message: '请输入密码', trigger: 'blur' }],
+            },
+            roleDialog: false,
+            userId: '',
+            roleId: '',
+            roleList: [],
+            forgetVisible: false,
+            phoneReset: true,
+            email: '',
+            emailBtnText: '发送验证码',
+            emailCode: '',
+            emailDisabled: false,
+            emailTimer: null,
+            phone: '',
+            phoneBtnText: '发送验证码',
+            phoneCode: '',
+            phoneDisabled: false,
+            phoneTimer: null,
+            newPassword: '',
+            emailOpener: '',
+            phoneOpener: ''
+        };
+    },
+    components: {
+        register,
+        vFooter
+    },
+    mounted(){
+        this.$once('hook:beforeDestroy', function () {
+            clearInterval(this.phoneTimer)
+            this.phoneTimer = null
+            clearInterval(this.emailTimer)
+            this.emailTimer = null
+        })
+    },
+    methods: {
+        ...mapActions('user', [
+            'setInfo'
+        ]),
+        getSchool(form) {
+            this.$refs[form].validate(valid => {
+                if (valid) {
+                    let data = {
+                        account: this.activeName == '0' ? this.loginForm.username : this.phoneParam.userphone,
+                        password: this.activeName == '0' ? this.loginForm.password : this.phoneParam.phonePassword,
+                        schoolId: this.schoolId,
+                        source: this.activeName
+                    };                       
+                    this.$get(this.api.loginSchool, data)
+                        .then(res => {
+                            this.schoolList = [...res.message.staffList,...res.message.studentList]
+                            let indexs = {}
+                            this.schoolList = this.schoolList.reduce((cur,next) => {
+                                indexs[next.schoolId] ? '' : indexs[next.schoolId] = true && cur.push(next)
+                                return cur
+                            },[])
+                            if(this.schoolList.length >= 1) {
+                                this.schoolId = this.schoolList[0].schoolId
+                                this.userId = this.schoolList[0].userId
+                                this.studentId = this.schoolList[0].studentId
+                                this.getRole(form)
+                            }else{
+                                util.errorMsg('账号不存在')
+                            }
+                        })
+                        .catch(res => {})
+                } else {
+                    util.errorMsg('请输入账号和密码')
+                    return false
+                }
+            });
+        },
+        getRole(form) {
+            let data = {
+                userId: this.userId,
+                schoolId: this.schoolId
+            };                       
+            this.$get(this.api.loginRole, data)
+                .then(res => {
+                    this.roleList = [...res.message.staffList,...res.message.studentList]
+                    let indexs = {}
+                    this.roleList = this.roleList.reduce((cur,next) => {
+                        indexs[next.roleId] ? '' : indexs[next.roleId] = true && cur.push(next)
+                        return cur
+                    },[])
+                    this.roleList.forEach((n,k) => {
+                        switch(n.roleId){
+                            case 2:
+                                n.roleName = '管理员'
+                                break
+                            case 3:
+                                n.roleName = '老师'
+                                break
+                            case 4:
+                                n.roleName = '学生'
+                                break
+                        }
+                    })
+                    if(this.roleList.length > 1) {
+                        this.roleDialog = true
+                    }else{
+                        this.roleId = this.roleList[0].roleId
+                        this.submitForm(form)
+                    }
+                })
+                .catch(res => {});
+        },
+        updateInfo(data){
+            this.loginForm.username = data.username
+            this.loginForm.password = data.password
+        },
+        roleSure(form){
+            if(this.roleId){
+                this.submitForm(form)
+            }else{
+                util.errorMsg('请选择角色!')
+            }
+        },
+        submitForm(form) {
+            this.$refs[form].validate(valid => {
+                if (valid) {
+                    let data = {
+                        roleId: this.roleId,
+                        userId: this.userId,
+                        schoolId: this.schoolId
+                    }
+                    this.$get(this.api.logins,data).then(res => {
+                        this.$post(this.api.updateLogInNumber,{userId: this.userId}).then(res => {}).catch(res => {})
+                        let data = res.message.user
+                        util.local.set(Setting.tokenKey,data.token,Setting.tokenExpires)
+                        this.setInfo({
+                            userId: this.userId,
+                            roleId: this.roleId,
+                            studentId: this.studentId,
+                            schoolId: this.schoolId,
+                            avatar: data.userAvatars,
+                            userName: data.userName,
+                            dataTime: data.dataTime,
+                        })
+                        util.successMsg('登录成功')
+                        let redirect = decodeURIComponent(this.$route.query.redirect || '/index')
+                        this.$router.replace(redirect)
+                    }).catch(res => {}); 
+                }
+            });
+        },
+        cancleRoleDia() {
+            this.roleId = ''
+            this.roleDialog = false
+        },
+        toReg(status) {
+            this.isReg = status
+        },
+        forget(){
+            this.forgetVisible = true
+        },
+        emailCountdown(){
+            let count = 60
+            if(!this.emailTimer){
+                this.emailDisabled = true
+                this.emailTimer = setInterval(() => {
+                    if(count > 0){
+                        count--
+                        this.emailBtnText = `${count}秒后重试`
+                    }else{
+                        this.emailDisabled = false
+                        clearInterval(this.emailTimer)
+                        this.emailTimer = null
+                        this.emailBtnText = `发送验证码`
+                    }
+                },1000)
+            }
+        },
+        phoneCountdown(){
+            let count = 60
+            if(!this.phoneTimer){
+                this.phoneDisabled = true
+                this.phoneTimer = setInterval(() => {
+                    if(count > 0){
+                        count--
+                        this.phoneBtnText = `${count}秒后重试`
+                    }else{
+                        this.phoneDisabled = false
+                        clearInterval(this.phoneTimer)
+                        this.phoneTimer = null
+                        this.phoneBtnText = `发送验证码`
+                    }
+                },1000)
+            }
+        },
+        closeForget(){
+            this.phoneCode = ''
+            this.emailCode = ''
+            this.userId = ''
+            this.newPassword = ''
+        },
+        sendEmailCode(){
+            if(!this.email) return util.warningMsg('请输入邮箱')
+            if(!/^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/.test(this.email)) return util.warningMsg('请输入正确的邮箱')
+            let data = {
+                email: this.email
+            }
+            this.$get(this.api.findPasswordByEmail,data).then(res => {
+                if(res.errmessage == 'success'){
+                    util.successMsg('发送成功')
+                    this.emailCountdown()
+                    this.userId = res.data.userId
+                    this.emailOpener = res.data.opener
+                }
+            }).catch(res => {})
+        },
+        sendPhoneCode(){
+            if(!this.phone) return util.warningMsg('请输入手机号')
+            if(!/^1[3456789]\d{9}$/.test(this.phone)) return util.warningMsg('请输入正确的手机号')
+            let data = {
+                phone: this.phone
+            }
+            this.$get(this.api.findPasswordByPhone,data).then(res => {
+                if(res.errmessage == 'success'){
+                    util.successMsg('发送成功')
+                    this.phoneCountdown()
+                    this.userId = res.data.userId
+                    this.phoneOpener = res.data.opener
+                }
+            }).catch(res => {})
+        },
+        async updatePassword(type){
+            if(type == 1){ 
+                if(!this.phone) return util.warningMsg('请输入手机号')
+                if(!/^1[3456789]\d{9}$/.test(this.phone)) return util.warningMsg('请输入正确的手机号')
+                if(!this.phoneCode) return util.warningMsg('请输入验证码')
+            }else{
+                if(!this.email) return util.warningMsg('请输入邮箱')
+                if(!/^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/.test(this.email)) return util.warningMsg('请输入正确的邮箱')
+                if(!this.emailCode) return util.warningMsg('请输入验证码')
+            }
+            if(!this.newPassword) return util.warningMsg('请输入新密码')
+
+            let checkData = {
+                code: type == 1 ? this.phoneCode : this.emailCode,
+                opener: type == 1 ? this.phoneOpener : this.emailOpener
+            }
+            let checkRes = await this.$post(this.api.checkCode,checkData)
+            if(checkRes.errmessage == 'success'){
+                let resetData = {
+                    userId: this.userId,
+                    password: this.newPassword
+                }
+                let resetRes = await this.$post(this.api.resetPassword,resetData)
+                if(resetRes.errmessage == 'success'){
+                    util.successMsg('重置成功')
+                    this.forgetVisible = false
+                }
+            }
+        },
+        switchType(type){
+            this.phoneReset = type
+        }
+    },
+};
+</script>
+
+<style scoped lang="scss">
+    .wrap {
+        position: relative;
+        width: 100%;
+        height: 100%;
+        overflow: hidden;
+
+        .header {
+            width: 100%;
+            height: 60px;
+            background-color: #fff;
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+            font-size: 18px;
+            box-shadow: 1px 1px 3px 2px #ececec;
+            .logo {
+                width: 150px;
+                margin-left: 20px;
+            }
+        }
+        .bg{
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+            height: calc(100% - 116px);
+            .left{
+                position: relative;
+                width: 40%;
+                height: 100%;
+                background: url(../../../assets/img/bg_2.png) 0 0/100% 100% no-repeat;
+                .text{
+                    position: absolute;
+                    top: 35%;
+                    left: 15%;
+                    color: #fff;
+                    font-size: 46px;
+                    font-weight: bold;
+                    p:first-child{
+                        margin-bottom: 20px;
+                    }
+                }
+            }
+            .right{
+                width: 50%;
+                height: 100%;
+                background: url(../../../assets/img/bg_1.png) center center/80% auto no-repeat;
+            }
+        }
+        
+
+        /deep/.right-form{
+            position: absolute;
+            top: 47%;
+            right: 12%;
+            transform: translateY(-50%);
+            width: 30%;
+            
+            .logo{
+                width: 100%;
+                margin-bottom: 40px;
+            }
+            .form{
+                padding: 50px 20px 20px;
+                background-color: #fff;
+                border-radius: 16px;
+                box-sizing: border-box;
+                box-shadow: 0 1px 20px rgba(146,120,255,0.3);
+            }
+            .back{
+                position: absolute;
+                top: 20px;
+                left: 20px;
+                font-size: 24px;
+                color: #9278ff;
+                cursor: pointer;
+
+                &:hover{
+                    opacity: .8;
+                }
+            }
+            .el-tabs__nav-scroll{
+                display: flex;
+                justify-content: center;
+            }
+
+            h2{
+                padding-bottom: 10px;
+                font-size: 20px;
+                font-weight: 400;
+                color: #8F73FF;
+                text-align: center;
+                border-bottom: 1px solid #f3f3f3;
+            }
+            .el-form{
+                width: 70%;
+                margin: 30px auto 0;
+                .label{
+                    line-height: 1.8;
+                    color: #929292;
+                }
+                /deep/.el-input__inner{
+                    height: 46px;
+                    padding: 0 23px;
+                    line-height: 46px;
+                    border: 1px solid #E5E5E5;
+                    border-radius: 8px !important;
+                }
+                /deep/.el-form-item__error{
+                    top: 105%;
+                    left: auto;
+                    right: 0;
+                    color: #FFA94E;
+                }
+                .submit{
+                    width: 100%;
+                    height: 48px;
+                    margin-top: 40px;
+                    line-height: 48px;
+                    padding: 0;
+                    font-size: 18px;
+                    background-color: #9278ff;
+                    border-radius: 6px;
+                    border: 0;
+                }
+            }
+        }
+    }
+    .switch{
+        span{
+            cursor: pointer;
+            color: #9076FF;
+        }
+    }
+    .links{
+        width: 70%;
+        margin: 20px auto 0;
+        text-align: right;
+    }
+    .ques{
+        color: #9278ff;
+        font-size: 14px;
+    }
+    .forget{
+        color: #ffa94e;
+        font-size: 14px;
+    }
+</style>
\ No newline at end of file
diff --git a/src/pages/account/register/index.vue b/src/pages/account/register/index.vue
new file mode 100644
index 0000000..ab9f6f5
--- /dev/null
+++ b/src/pages/account/register/index.vue
@@ -0,0 +1,237 @@
+<template>
+    <div>
+        <!-- <h2><div class="back" @click="toLogin"><i class="el-icon-arrow-left">返回</i></div> 学生注册</h2> -->
+        <h2>账号注册</h2>
+        
+        <el-form class="register" :model="regForm" :rules="regRules" ref="reg" label-width="0px">
+            <div class="line">
+                <el-form-item prop="userName">
+                    <p class="label">*学生姓名</p>
+                    <el-input v-model="regForm.userName" placeholder="姓名"></el-input>
+                </el-form-item>
+                <el-form-item prop="workNumber" style="margin-right: 5%">
+                    <p class="label">学生学号</p>
+                    <el-input v-model="regForm.workNumber" placeholder="学生学号" @change="worknumberChange"></el-input>
+                </el-form-item>
+                <el-form-item prop="phone">
+                    <p class="label">*手机号</p>
+                    <el-input v-model="regForm.phone" placeholder="手机号" maxlength="11" @change="phoneChange"></el-input>
+                </el-form-item>
+            </div>
+
+            <p class="label">*学校</p>
+            <div class="line">
+                <el-form-item prop="provinceId">
+                    <p class="prop">省份</p>
+                    <el-select v-model="regForm.provinceId" placeholder="省份" @change="getCity">
+                        <el-option
+                        v-for="item in provinceList"
+                        :key="item.value"
+                        :label="item.provinceName"
+                        :value="item.provinceId"
+                    ></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item prop="cityId" style="margin-right: 5%">
+                    <p class="prop">城市</p>
+                    <el-select v-model="regForm.cityId" placeholder="城市" @change="getSchoolData">
+                        <el-option
+                        v-for="item in cityList"
+                        :key="item.value"
+                        :label="item.cityName"
+                        :value="item.cityId"
+                    ></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item prop="schoolAppellationId">
+                    <p class="prop">学校</p>
+                    <el-select v-model="regForm.schoolAppellationId" placeholder="学校名称">
+                        <el-option v-for="(item,index) in schoolList" :key="index" :label="item.schoolName" :value="item.schoolId"></el-option>
+                    </el-select>
+                </el-form-item>
+            </div>
+            <!-- <div class="line">
+                <el-form-item prop="phone">
+                    <p class="label">手机号</p>
+                    <el-input v-model="regForm.phone" placeholder="请输入手机号"></el-input>
+                </el-form-item>
+                <el-form-item style="margin-right: 5%">
+                    <button type="button" class="code-btn">发送验证码</button>
+                </el-form-item>
+                <el-form-item prop="code">
+                    <el-input v-model="regForm.code" placeholder="输入验证码"></el-input>
+                </el-form-item>
+            </div> -->
+            <div class="line">
+                <el-form-item prop="password">
+                    <p class="label">*密码设置</p>
+                    <el-input type="password" v-model="regForm.password" placeholder="请输入密码"></el-input>
+                </el-form-item>
+                <el-form-item prop="rePassword">
+                    <el-input type="password" v-model="regForm.rePassword" placeholder="请再次输入密码" @keyup.enter.native="registerForm"></el-input>
+                </el-form-item>
+            </div>
+            
+            <el-button class="submit" type="primary" @click="registerForm">注册</el-button>
+        </el-form>
+    </div>
+</template>
+
+<script>
+export default {
+    data: function() {
+        return {
+            regForm: {
+                userName: '',
+                workNumber: '',
+                provinceId: '',
+                cityId: '',
+                schoolAppellationId: '',
+                phone: '',
+                password: '',
+                rePassword: '',
+                roleId: 4,
+                schoolId: this.$config.schoolId
+            },
+            regRules: {
+                userName: [{ required: true, message: '请输入学生姓名', trigger: 'blur' }],
+                workNumber: [{ required: true, message: '请输入学生学号', trigger: 'blur' }],
+                provinceId: [{ required: true, message: '请选择省份', trigger: 'change' }],
+                cityId: [{ required: true, message: '请选择城市', trigger: 'change' }],
+                schoolAppellationId: [{ required: true, message: '请选择学校', trigger: 'change' }],
+                phone: [
+                    { required: true, message: '请输入手机号', trigger: 'blur' },
+                    { pattern: /^1[3456789]\d{9}$/, message: '请输入正确的手机号', trigger: 'blur' }
+                ],
+                password: [
+                    { required: true, message: '请输入密码', trigger: 'blur' },
+                    { pattern: /^.{6,}$/, message: '请输入6位数以上的密码', trigger: 'blur' }
+                ],
+                rePassword: [
+                    { required: true, message: '请再次输入密码', trigger: 'blur' },
+                    { pattern: /^.{6,}$/, message: '请输入6位数以上的密码', trigger: 'blur' }
+                ]
+            },
+            provinceList: this.$store.state.provinceList, //省份
+            cityList: [], //城市
+            schoolList: [],
+            phoneRepeat: false,
+            workNumberReapeat: false
+        };
+    },
+    mounted() {
+        this.getProvince()
+        this.getSchoolData()
+    },
+    methods: {
+        getProvince(){
+            this.$get(this.api.queryProvince).then(res => {
+                this.provinceList = res.message
+                this.$store.commit("provinceData", { provinceList : this.provinceList});
+            }).catch(res => {});
+        },
+        // 获取城市
+        getCity(){
+            this.regForm.cityId = ''
+            this.$get(this.api.queryCity,{provinceId: this.regForm.provinceId}).then(res => {
+                this.cityList = res.message
+                this.getSchoolData()
+            }).catch(res => {})
+        },
+        // 获取学校名称
+        getSchoolData(){
+            this.regForm.schoolAppellationId = ''
+            this.$get(this.api.querySchoolData,{provinceId: this.regForm.provinceId,cityId: this.regForm.cityId,schoolName: ''}).then(res => {
+                this.schoolList = res.message
+            }).catch(res => {});
+        },
+        registerForm() {
+            this.$refs.reg.validate(valid => {
+                if (valid) {
+                    if(this.phoneRepeat) return util.warningMsg('该手机号已存在')
+                    if(this.workNumberReapeat) return util.warningMsg('该学生学号已存在')
+                    if(this.regForm.password !== this.regForm.rePassword) return util.warningMsg('两次输入的密码不一致,请重新输入')
+
+                    let data = this.regForm
+                    data.account = data.phone
+                    data.uniqueIdentificationAccount = new Date().getTime()
+                    this.$post(`${this.api.save}?workNumber=${this.regForm.workNumber}`,data).then(res => {
+                        util.successMsg('注册成功')
+                        this.$emit('update:isReg',false)
+                        this.$emit('updateInfo',{username: this.regForm.phone,password: this.regForm.password})
+                        this.$refs.reg.resetFields()
+                    }).catch(res => {});
+                } else {
+                    // util.errorMsg('请输入账号和密码');
+                    return false;
+                }
+            });
+        },
+        async phoneChange(){
+            let res = await this.$get(this.api.queryPhone, { phone: this.regForm.phone });
+            if(res.message.length != 0){
+                util.warningMsg('该手机号已存在');
+                this.phoneRepeat = true
+            }else{
+                this.phoneRepeat = false
+            }
+        },
+        async worknumberChange(){
+            let res = await this.$get(this.api.queryWorkNumberIsExist, { 
+                workNumber: this.regForm.workNumber,
+                roleId: 4,
+                schoolAppellationId: this.regForm.schoolAppellationId
+            });
+            if(JSON.stringify(res.message) != '{}'){
+                util.warningMsg('该学生学号已存在');
+                this.workNumberReapeat = true
+            }else{
+                this.workNumberReapeat = false
+            }
+        },
+        toLogin() {
+            this.$emit('update:isReg',false)
+        }
+    },
+};
+</script>
+
+<style scoped lang="scss">
+    .wrap {
+        .form{
+            .register{
+                width: 90% !important;
+                .line{
+                    display: flex;
+                    justify-content: space-between;
+                    align-items: flex-end;
+                }
+                .el-form-item{
+                    &:first-child{
+                        margin-right: 5%;
+                    }
+                }
+                .label{
+                    margin-bottom: 0;
+                }
+                .prop{
+                    color: #929292;
+                }
+                .code-btn{
+                    min-width: 120px;
+                    height: 46px;
+                    padding: 0 10px;
+                    line-height: 46px;
+                    color: #fff;
+                    font-size: 14px;
+                    border-radius: 23px;
+                    border: 0;
+                    background-color: #105cb2;
+                }
+                .submit{
+                    margin-bottom: 20px;
+                }
+            }
+        }
+    }
+</style>
\ No newline at end of file
diff --git a/src/pages/ass/list/index.vue b/src/pages/ass/list/index.vue
new file mode 100644
index 0000000..a1afca6
--- /dev/null
+++ b/src/pages/ass/list/index.vue
@@ -0,0 +1,369 @@
+<template>
+    <div>
+        <div class="page">
+            <h6 class="p-title">筛选</h6>
+            <div class="tool">
+                <ul class="filter">
+                    <li>
+                        <label>考核时间</label>
+                        <el-radio-group size="small" v-model="form.month" @change="getData">
+                            <el-radio v-for="(item,index) in dateList" :key="index" :label="item.id" border>{{item.name}}</el-radio>
+                        </el-radio-group>
+                        <el-date-picker size="small" v-model="date" align="right" unlink-panels type="daterange" start-placeholder="开始日期" end-placeholder="结束日期" format="yyyy-MM-dd" value-format="yyyy-MM-dd" clearable></el-date-picker>
+                    </li>
+                    <li>
+                        <label>实验状态</label>
+                        <el-select size="small" v-model="form.status" placeholder="请选择实验状态" @change="getData">
+                            <el-option v-for="(item,index) in statusList" :key="index" :label="item.name" :value="item.value"></el-option>
+                        </el-select>
+                    </li>
+                    <li>
+                        <el-input size="small" placeholder="请输入实验班级/考核名称" prefix-icon="el-icon-search" v-model="keyword" clearable></el-input>
+                    </li>
+                </ul>
+            </div>
+
+            <el-table :data="listData" class="table" stripe header-align="center" :row-key="getRowKeys">
+                <el-table-column type="index" width="100" label="序号" align="center">
+                    <template slot-scope="scope">
+                        {{scope.$index + (page - 1) * pageSize + 1}}
+                    </template>
+                </el-table-column>
+                <el-table-column prop="experimentalName" label="考核名称" align="center">
+                </el-table-column>
+                <el-table-column prop="experimentalClassName" label="实验班级" align="center">
+                </el-table-column>
+                <el-table-column prop="experimentalNumber" label="实验人数" align="center"></el-table-column>
+                <el-table-column prop="experimentDuration" label="考试时长" align="center">
+                </el-table-column>
+                <el-table-column prop="creationTime" label="创建时间" align="center">
+                </el-table-column>
+                <el-table-column prop="startTime" label="起始时间" align="center">
+                </el-table-column>
+                <el-table-column prop="stopTime" label="结束时间" align="center">
+                </el-table-column>
+                <el-table-column label="倒计时" align="center">
+                    <template slot-scope="scope">
+                        <span v-countdown="scope.row.surplusTime">{{scope.row.surplusTime}}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column label="实验状态" align="center">
+                    <template slot-scope="scope">
+                        <span class="ellipsis">{{status[scope.row.status]}}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column label="操作" align="center">
+                    <template slot-scope="scope">
+                        <el-button v-if="scope.row.status == 3 && !scope.row.done" type="text" disabled>未参加</el-button>
+                        <el-button v-if="scope.row.status != 3 && !scope.row.done" type="text" @click="entry(scope.row)" :disabled="scope.row.status != 2">进入</el-button>
+                        <el-button v-if="scope.row.status == 2 && scope.row.done" type="text" disabled>已提交</el-button>
+                        <el-button v-if="scope.row.status == 3 && scope.row.done" type="text" @click="show(scope.row)">查看成绩</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+            <div class="pagination">
+                <el-pagination background layout="total, prev, pager, next" :total="totals" @current-change="handleCurrentChange" :current-page="page"></el-pagination>
+            </div>
+        </div>
+
+        <el-dialog title="请输入邀请码" :visible.sync="icVisible" width="30%" @close="closeIc" center :close-on-click-modal="false">
+            <el-input v-model="invitationCode" placeholder="邀请码" maxlength="6"></el-input>
+            <div slot="footer" class="dialog-footer">
+                <el-button type="primary" @click="saveIc">确 定</el-button>
+            </div>
+        </el-dialog>
+    </div>
+</template>
+
+<script>
+import { mapState,mapActions } from 'vuex'
+import Setting from '@/setting'
+import util from '@/libs/util'
+export default {
+    name: 'ass',
+    data() {
+        return {
+            host: Setting.host,
+            status: ['','待开始','进行中','已完成'],
+            statusList: [{
+                name:'不限',
+                value: 0
+            },{
+                name:'待开始',
+                value: 1
+            },{
+                name:'进行中',
+                value: 2
+            },{
+                name:'已完成',
+                value: 3
+            }],
+            listData: [],
+            date: [],
+            form: {
+                month:'',
+                startTime: '',
+                endTime: '',
+                status: 0,
+            },
+            keyword: '',
+            dateList: [
+                {
+                    id: '',
+                    name: '不限'
+                },
+                {
+                    id: 1,
+                    name: '近一个月'
+                },
+                {
+                    id: 3,
+                    name: '近三个月'
+                },
+                {
+                    id: 6,
+                    name: '近六个月'
+                }
+            ],
+            page: 1,
+            pageSize: 10,
+            totals: 0,
+            icVisible: false,
+            invitationCode: '',
+            searchTimer: null,
+            timerList: [],
+            curRow: {}
+        };
+    },
+    computed: {
+        ...mapState('user', [
+            'userId','schoolId','studentId','userName'
+        ]),
+    },
+    watch: {
+        'form.month': function(val){
+            if(val){
+                let unit = 24 * 60 * 60 * 1000
+                this.date = [util.formatDate('yyyy-MM-dd',new Date(new Date().getTime() - unit * 30 * val)),util.formatDate('yyyy-MM-dd',new Date(new Date().getTime() + unit))]
+            }else{
+                this.date = []
+            }
+        },
+        date: function(val){
+            if(val){
+                this.form.startTime = val[0]
+                this.form.endTime = val[1]
+            }else{
+                this.form.startTime = ''
+                this.form.endTime = ''
+            }
+            this.getData()
+        },
+        keyword: function(val) {
+            clearTimeout(this.searchTimer)
+            this.searchTimer = setTimeout(() => {
+                this.getData()
+            },500)
+        }
+    },
+    mounted() {
+        this.getData()
+        this.$once('hook:beforeDestroy', function () {
+            this.timerList.forEach((n,k) => {
+                clearInterval(n)
+            })
+            this.timerList = []
+        })
+    },
+    directives: {
+        countdown: {
+            bind: function(el,binding,vnode) {
+                let that = vnode.context
+                let time = binding.value
+                let timer = setInterval(() => {
+                    let timeList = time.split(':')
+                    let total = Number.parseInt(timeList[0] * 60 * 60) + Number.parseInt(timeList[1] * 60) + Number.parseInt(timeList[2])
+                    if(total > 0){
+                        --total
+                        let hours = Math.floor(total / (60 * 60))
+                        let minutes = Math.floor(total % (60 * 60) / 60)
+                        let seconds = Math.floor(total % (60 * 60) % 60)
+                        time = `${that.core.formateTime(hours)}:${that.core.formateTime(minutes)}:${that.core.formateTime(seconds)}`
+                    }else{
+                        clearInterval(timer)
+                    }
+                    el.innerHTML = time
+                },1000)
+                that.timerList.push(timer)
+            }
+        }
+    },
+    methods: {
+        getData() {
+            let data = {
+                schoolId: this.schoolId,
+                month: this.form.month,
+                startTime: this.form.startTime,
+                endTime: this.form.endTime,
+                condition: this.keyword,
+                status: this.form.status,
+                page: this.page,
+                size: this.pageSize,
+                rowId: '',
+                projectId: ''
+            }
+            this.$get(this.api.userRecord,data).then(res => {
+                let list = res.page.list
+                this.totals = res.page.totalCount
+                let doneNum = 0
+                let recordList = []
+                for(let i = 1; i < 11; i++){
+                    if(i != 2 && i != 3){
+                        this.$get(this.api.experimentRecord, { 
+                            userid: this.userId,
+                            page: 1,
+                            size: 10000,
+                            systemId: i
+                        }).then(res => {
+                            doneNum++
+                            recordList = recordList.concat(res.data.list)
+                            if(doneNum == 8){
+                                list.map(n => {
+                                    let same = recordList.find(e => e.id == n.id)
+                                    if(same){
+                                        n.done = true
+                                        n.recordid = same.recordid
+                                        n.reportId = same.reportId
+                                    }
+                                })
+                                this.listData = list
+                            }
+                        }).catch(err => {})
+                    }
+                }
+            }).catch(res => {})
+        },
+        add(){
+            this.$store.commit("listData", { customer_id : ''});
+            this.$router.push('/addclass');
+        },
+        edit(row){
+            this.$store.commit("listData", { customer_id : row.customerId });
+            this.$router.push('/addcustomer');
+        },
+        getRowKeys(row) {
+            return row.customerId;
+        },
+        onSearch(){
+            this.page = 1
+            this.getData()
+        },
+        handleCurrentChange(val) {
+            this.page = val
+            this.getData()
+        },
+        entry(row) {
+            if(row.status == 1){
+                return util.warningMsg('该实验尚未开始')
+            }else if(row.status == 3){
+                return util.warningMsg('该实验已经结束')
+            }else{
+                this.curRow = row
+                if(row.isCode == 1){
+                    this.goSubSystem()
+                }else{
+                    this.$get(this.api.checkInvitationCode,{
+                        userId: this.userId,
+                        id: row.id
+                    }).then(res => {
+                        if(res.errmessage == 'false'){
+                            this.icVisible = true
+                        }else{
+                            this.goSubSystem()
+                        }
+                    }).catch(res => {});
+                }
+            }
+        },
+        show(row) {
+            this.$router.push(`/showExperiment?id=${row.id}&recordId=${row.recordid}&reportId=${row.reportId}`)
+        },
+        saveIc() {
+            if(!this.invitationCode) return util.warningMsg('请输入邀请码')
+            if(!this.invitationCode || String(this.invitationCode).length < 6 || isNaN(this.invitationCode)) return util.warningMsg('请输入6位纯数字邀请码')
+            let data = {
+                id: this.curRow.id,
+                userId: this.userId,
+                invitationCode: Number(this.invitationCode)
+            }
+            this.$post(this.api.joinPractice,data).then(res => {
+                if(res.errmessage == 'success') {
+                    util.successMsg('验证成功!')
+                    this.icVisible = false
+                    setTimeout(() => {
+                        this.goSubSystem()
+                    },1000)
+                }
+            }).catch(res => {});
+        },
+        closeIc() {
+            this.invitationCode = ''
+        },
+        goback() {
+            this.$router.back()
+        },
+        goSubSystem(){
+            let host = this.host
+            util.cookies.set("assessmentId",this.curRow.id)
+            util.cookies.set("studentId",this.studentId)
+            util.cookies.set("userId",this.userId)
+            util.cookies.set("projectId",this.curRow.projectId)
+            util.cookies.set("startTime",this.curRow.startTime)
+            util.cookies.set("stopTime",this.curRow.stopTime)
+            let systemId = this.curRow.systemId
+            let href = ''
+            switch(systemId){
+                case 1:
+                    href = `${host}pyTrials/#/`
+                    break;
+                case 4:
+                    href = `${host}pyFinance/#/`
+                    break;
+                case 5:
+                    href = `${host}pyProjects/#/`
+                    break;
+                case 6:
+                    href = `${host}pyRandom/#/`
+                    break;
+                case 7:
+                    href = `${host}pyQuantification/#/`
+                    break;
+                case 8:
+                    href = `${host}pyAnalysis/#/`
+                    break;
+                case 9:
+                    href = `${host}pyDataclean/#/`
+                    break;
+                case 10:
+                    href = `${host}pyAcquisition/#/`
+                    break;
+            }
+            if(!href) return util.errorMsg('该考核非Python考核,请选择其他考核')
+            location.href = href
+            // location.href = 'http://192.168.31.154:8080/'
+        },
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+    /deep/.el-tabs__nav-wrap::after{
+        display: none;
+    }
+    .no-mb /deep/.el-form-item{
+        margin-bottom: 0;
+    }
+    .el-radio.is-bordered+.el-radio.is-bordered{
+        margin-left: 0;
+    }
+</style>
\ No newline at end of file
diff --git a/src/pages/exception/error/403/index.vue b/src/pages/exception/error/403/index.vue
new file mode 100644
index 0000000..e6576d2
--- /dev/null
+++ b/src/pages/exception/error/403/index.vue
@@ -0,0 +1,59 @@
+<template>
+    <div class="error-page">
+        <div class="error-code">4<span>0</span>3</div>
+        <div class="error-desc">啊哦~ 你没有权限访问该页面哦</div>
+        <div class="error-handle">
+            <router-link to="/">
+                <el-button type="primary" size="large" @click="toIndex">返回首页</el-button>
+            </router-link>
+            <el-button class="error-btn" type="primary" size="large" @click="goBack">返回上一页</el-button>
+        </div>
+    </div>
+</template>
+
+<script>
+export default {
+    methods: {
+        toIndex(){
+            this.$router.push('/')
+        },
+        goBack(){
+            this.$router.go(-1);
+        }
+    }
+}
+</script>
+
+
+<style scoped>
+    .error-page{
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        flex-direction: column;
+        width: 100%;
+        height: 100%;
+        background: #f3f3f3;
+        box-sizing: border-box;
+    }
+    .error-code{
+        line-height: 1;
+        font-size: 250px;
+        font-weight: bolder;
+        color: #f02d2d;
+    }
+    .error-code span{
+        color: #00a854;
+    }
+    .error-desc{
+        font-size: 30px;
+        color: #777;
+    }
+    .error-handle{
+        margin-top: 30px;
+        padding-bottom: 200px;
+    }
+    .error-btn{
+        margin-left: 100px;
+    }
+</style>
diff --git a/src/pages/exception/error/404/index.vue b/src/pages/exception/error/404/index.vue
new file mode 100644
index 0000000..bbb8580
--- /dev/null
+++ b/src/pages/exception/error/404/index.vue
@@ -0,0 +1,59 @@
+<template>
+    <div class="error-page">
+            <div class="error-code">4<span>0</span>4</div>
+            <div class="error-desc">啊哦~ 你所访问的页面不存在</div>
+            <div class="error-handle">
+                <router-link to="/">
+                    <el-button type="primary" size="large" @click="toIndex">返回首页</el-button>
+                </router-link>
+                <el-button class="error-btn" type="primary" size="large" @click="goBack">返回上一页</el-button>
+            </div>
+    </div>
+</template>
+
+<script>
+export default {
+    methods: {
+        toIndex(){
+            this.$router.push('/')
+        },
+        goBack(){
+            this.$router.go(-1);
+        }
+    }
+}
+</script>
+
+
+<style scoped>
+    .error-page{
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        flex-direction: column;
+        width: 100%;
+        height: 100%;
+        background: #f3f3f3;
+        box-sizing: border-box;
+    }
+    .error-code{
+        line-height: 1;
+        font-size: 250px;
+        font-weight: bolder;
+        color: #2d8cf0;
+    }
+    .error-code span{
+        color: #00a854;
+    }
+    .error-desc{
+        font-size: 30px;
+        color: #777;
+    }
+    .error-handle{
+        margin-top: 30px;
+        padding-bottom: 200px;
+    }
+    .error-btn{
+        margin-left: 100px;
+    }
+</style>
diff --git a/src/pages/exception/i18n/index.vue b/src/pages/exception/i18n/index.vue
new file mode 100644
index 0000000..69074bd
--- /dev/null
+++ b/src/pages/exception/i18n/index.vue
@@ -0,0 +1,46 @@
+<template>
+    <section class="main">
+        <div class="crumbs">
+            <el-breadcrumb separator="/">
+                <el-breadcrumb-item><i class="el-icon-lx-global"></i> {{$t('i18n.breadcrumb')}}</el-breadcrumb-item>
+            </el-breadcrumb>
+        </div>
+        <div class="container">
+            <span>{{$t('i18n.tips')}}</span>
+            <el-button type="primary" @click="$i18n.locale = $i18n.locale === 'zh'?'en':'zh';">{{$t('i18n.btn')}}</el-button>
+            <div class="list">
+            <h2>{{$t('i18n.title1')}}</h2>
+                <p>{{$t('i18n.p1')}}</p>
+                <p>{{$t('i18n.p2')}}</p>
+                <p>{{$t('i18n.p3')}}</p>
+            </div>
+            <h2>{{$t('i18n.title2')}}</h2>
+            <div>
+                <i18n path="i18n.info" tag="p">
+                    <a place="action" href="https://element.eleme.cn/2.0/#/zh-CN/component/i18n">{{ $t('i18n.value') }}</a>
+                </i18n>
+            </div>
+        </div>
+    </section>
+</template>
+
+<script>
+export default {
+    data(){
+        return {
+        }
+    }
+}
+</script>
+
+<style scoped>
+.list{
+    padding: 30px 0;
+}
+.list p{
+    margin-bottom: 20px;
+}
+a{
+    color: #cb221c;
+}
+</style>
diff --git a/src/pages/exception/icon/index.vue b/src/pages/exception/icon/index.vue
new file mode 100644
index 0000000..352d38b
--- /dev/null
+++ b/src/pages/exception/icon/index.vue
@@ -0,0 +1,225 @@
+<template>
+    <div>
+        <div class="crumbs">
+            <el-breadcrumb separator="/">
+                <el-breadcrumb-item><i class="el-icon-lx-emoji"></i> 自定义图标</el-breadcrumb-item>
+            </el-breadcrumb>
+        </div>
+        <div class="container">
+            <h2>使用方法</h2>
+            <p style="line-height: 50px;">
+                直接通过设置类名为 el-icon-lx-iconName 来使用即可。例如:(共{{iconList.length}}个图标)
+            </p>
+            <p class="example-p">
+                <i class="el-icon-lx-redpacket_fill" style="font-size: 30px;color: #ff5900"></i>
+                <span>&lt;i class=&quot;el-icon-lx-redpacket_fill&quot;&gt;&lt;/i&gt;</span>
+            </p>
+            <p class="example-p">
+                <i class="el-icon-lx-weibo" style="font-size: 30px;color:#fd5656"></i>
+                <span>&lt;i class=&quot;el-icon-lx-weibo&quot;&gt;&lt;/i&gt;</span>
+            </p>
+            <p class="example-p">
+                <i class="el-icon-lx-emojifill" style="font-size: 30px;color: #ffc300"></i>
+                <span>&lt;i class=&quot;el-icon-lx-emojifill&quot;&gt;&lt;/i&gt;</span>
+            </p>
+            <br>
+            <h2>图标</h2>
+            <div class="search-box">
+                <el-input class="search" size="large" v-model="keyword" clearable placeholder="请输入图标名称"></el-input>
+            </div>
+            <ul>
+                <li class="icon-li" v-for="(item,index) in list" :key="index">
+                    <div class="icon-li-content">
+                        <i :class="`el-icon-lx-${item}`"></i>
+                        <span>{{item}}</span>
+                    </div>
+                </li>
+            </ul>
+        </div>
+
+    </div>
+</template>
+
+<script>
+    export default {
+        data: function(){
+            return {
+                keyword: '',
+                iconList: [
+                    'attentionforbid',
+                    'attentionforbidfill',
+                    'attention',
+                    'attentionfill',
+                    'tag',
+                    'tagfill',
+                    'people',
+                    'peoplefill',
+                    'notice',
+                    'noticefill',
+                    'mobile',
+                    'mobilefill',
+                    'voice',
+                    'voicefill',
+                    'unlock',
+                    'lock',
+                    'home',
+                    'homefill',
+                    'delete',
+                    'deletefill',
+                    'notification',
+                    'notificationfill',
+                    'notificationforbidfill',
+                    'like',
+                    'likefill',
+                    'comment',
+                    'commentfill',
+                    'camera',
+                    'camerafill',
+                    'warn',
+                    'warnfill',
+                    'time',
+                    'timefill',
+                    'location',
+                    'locationfill',
+                    'favor',
+                    'favorfill',
+                    'skin',
+                    'skinfill',
+                    'news',
+                    'newsfill',
+                    'record',
+                    'recordfill',
+                    'emoji',
+                    'emojifill',
+                    'message',
+                    'messagefill',
+                    'goods',
+                    'goodsfill',
+                    'crown',
+                    'crownfill',
+                    'move',
+                    'add',
+                    'hot',
+                    'hotfill',
+                    'service',
+                    'servicefill',
+                    'present',
+                    'presentfill',
+                    'pic',
+                    'picfill',
+                    'rank',
+                    'rankfill',
+                    'male',
+                    'female',
+                    'down',
+                    'top',
+                    'recharge',
+                    'rechargefill',
+                    'forward',
+                    'forwardfill',
+                    'info',
+                    'infofill',
+                    'redpacket',
+                    'redpacket_fill',
+                    'roundadd',
+                    'roundaddfill',
+                    'friendadd',
+                    'friendaddfill',
+                    'cart',
+                    'cartfill',
+                    'more',
+                    'moreandroid',
+                    'back',
+                    'right',
+                    'shop',
+                    'shopfill',
+                    'question',
+                    'questionfill',
+                    'roundclose',
+                    'roundclosefill',
+                    'roundcheck',
+                    'roundcheckfill',
+                    'global',
+                    'mail',
+                    'punch',
+                    'exit',
+                    'upload',
+                    'read',
+                    'file',
+                    'link',
+                    'full',
+                    'group',
+                    'friend',
+                    'profile',
+                    'addressbook',
+                    'calendar',
+                    'text',
+                    'copy',
+                    'share',
+                    'wifi',
+                    'vipcard',
+                    'weibo',
+                    'remind',
+                    'refresh',
+                    'filter',
+                    'settings',
+                    'scan',
+                    'qrcode',
+                    'cascades',
+                    'apps',
+                    'sort',
+                    'searchlist',
+                    'search',
+                    'edit'
+                ]
+            }
+        },
+        computed: {
+            list(){
+                return this.iconList.filter((item) => {
+                    return item.indexOf(this.keyword) !== -1;
+                })
+            }
+        }
+    }
+</script>
+
+<style scoped>
+.example-p{
+    height: 45px;
+    display: flex;
+    align-items: center;
+}
+.search-box{
+    text-align: center;
+    margin-top: 10px;
+}
+.search{
+    width: 300px;
+}
+ul,li{
+    list-style: none;
+}
+.icon-li{
+    display: inline-block;
+    padding: 10px;
+    width: 120px;
+    height: 120px;
+}
+.icon-li-content{
+    display: flex;
+    height: 100%;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+    cursor: pointer;
+}
+.icon-li-content i{
+    font-size: 36px;
+    color: #606266;
+}
+.icon-li-content span{
+    margin-top: 10px;
+    color: #787878;
+}
+</style>
\ No newline at end of file
diff --git a/src/pages/index/list/index.vue b/src/pages/index/list/index.vue
new file mode 100644
index 0000000..7424de2
--- /dev/null
+++ b/src/pages/index/list/index.vue
@@ -0,0 +1,31 @@
+<template>
+    <div class="wrap">
+        
+    </div>
+</template>
+
+<script>
+import { mapState } from 'vuex'
+export default {
+    name: 'index',
+    data() {
+        return {
+            
+        }
+    },
+    mounted() {
+        this.getHot()
+    },
+    methods: {
+        getData(){
+            
+        },
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+    .wrap{
+        
+    }
+</style>
\ No newline at end of file
diff --git a/src/pages/preview/list/index.vue b/src/pages/preview/list/index.vue
new file mode 100644
index 0000000..f66dff1
--- /dev/null
+++ b/src/pages/preview/list/index.vue
@@ -0,0 +1,1615 @@
+<template>
+    <div class="box" style="overflow-x: hidden">
+        <el-row :gutter="20" style="padding-top: 20px;">
+            <el-col :span="24">
+                <el-col :span="18">
+                    <div class="cover">
+                        <img v-if="coverUrl" :src="coverUrl" alt="" width="100%" height="100%">
+                        <template v-else-if="iframeSrc">
+                            <iframe class="inner fileIframe" id="fileIframe" :src="iframeSrc" frameborder="0"></iframe>
+                            <template v-if="showMask">
+                                <div class="mask" style="width: 500px;height: 30px;top: 53px;right: 320px"></div>
+                                <div class="mask" style="width: 175px;height: 30px;top: 53px;right: 5px"></div>
+                            </template>
+                            <template v-if="showMask1">
+                                <div class="word-mask" style="height: 40px;"></div>
+                                <div class="word-mask2" style="top: 55px;left: 28%;width: 44%;height: calc(100% - 80px);"></div>
+                            </template>
+                            <template v-if="showMask2">
+                                <div class="excel-mask1" style="height: 48px;"></div>
+                            </template>
+                        </template>
+                        <div class="pdf inner" v-else-if="pdfSrc">
+                            <pdf :visible.sync="pdfVisible" :src.sync="pdfSrc"></pdf>
+                        </div>
+                        <div v-else>
+                            <video ref="video" controls class="video_wid" :src="videoSrc" controlsList="nodownload"></video>
+                        </div>
+                    </div>
+                </el-col>
+                <el-col :span="6">
+                    <div class="catalog">
+                        <div class="btns">
+                            <!-- <el-button type="primary" @click="toEvaluation(1,2)">虚拟仿真实验</el-button>
+                            <el-button type="primary" @click="toEvaluation(1,3)">教学实验</el-button> -->
+                            <el-button type="primary" @click="toEvaluation(0,2)">能力测评</el-button>
+                        </div>
+                            <ul class="filter" style="margin: 10px 0">
+                                <li>
+                                    <label>系统</label>
+                                    <el-select v-model="systemId" placeholder="请选择" @change="systemChange">
+                                        <el-option
+                                            v-for="item in systemList"
+                                            :key="item.value"
+                                            :label="item.label"
+                                            :value="item.id"
+                                        ></el-option>
+                                    </el-select>
+                                </li>
+                            </ul>
+                                
+                        <div class="list_he">
+                            <h4 class="list_title">学习资源</h4>
+                            <template v-if="systemId == 1">
+                                <div v-for="(item,index) in videoList1" :key="index">
+                                    <div class="flex-between list_catalog">
+                                        <p class="experimental_title" :class="{active: curLink == item.title}" @click="preview(item)">{{index+1}} {{item.title}}</p>
+                                    </div>
+                                </div>
+                            </template>
+                            <template v-else-if="systemId == 4">
+                                <div v-for="(item,index) in videoList4" :key="index">
+                                    <div class="flex-between list_catalog">
+                                        <p class="experimental_title" :class="{active: curLink == item.title}" @click="preview(item)">{{index+1}} {{item.title}}</p>
+                                    </div>
+                                </div>
+                            </template>
+                            <template v-else-if="systemId == 5">
+                                <div v-for="(item,index) in videoList5" :key="index">
+                                    <div class="flex-between list_catalog">
+                                        <p class="experimental_title" :class="{active: curLink == item.title}" @click="preview(item)">{{index+1}} {{item.title}}</p>
+                                    </div>
+                                </div>
+                            </template>
+                            <template v-else-if="systemId == 6">
+                                <div v-for="(item,index) in videoList6" :key="index">
+                                    <div class="flex-between list_catalog">
+                                        <p class="experimental_title" :class="{active: curLink == item.title}" @click="preview(item)">{{index+1}} {{item.title}}</p>
+                                    </div>
+                                </div>
+                            </template>
+                            <template v-else-if="systemId == 7">
+                                <div v-for="(item,index) in videoList7" :key="index">
+                                    <div class="flex-between list_catalog">
+                                        <p class="experimental_title" :class="{active: curLink == item.title}" @click="preview(item)">{{index+1}} {{item.title}}</p>
+                                    </div>
+                                </div>
+                            </template>
+                            <template v-else-if="systemId == 8">
+                                <div v-for="(item,index) in videoList8" :key="index">
+                                    <div class="flex-between list_catalog">
+                                        <p class="experimental_title" :class="{active: curLink == item.title}" @click="preview(item)">{{index+1}} {{item.title}}</p>
+                                    </div>
+                                </div>
+                            </template>
+                            <template v-else-if="systemId == 9">
+                                <div v-for="(item,index) in videoList9" :key="index">
+                                    <div class="flex-between list_catalog">
+                                        <p class="experimental_title" :class="{active: curLink == item.title}" @click="preview(item)">{{index+1}} {{item.title}}</p>
+                                    </div>
+                                </div>
+                            </template>
+                            <template v-else-if="systemId == 10">
+                                <div v-for="(item,index) in videoList10" :key="index">
+                                    <div class="flex-between list_catalog">
+                                        <p class="experimental_title" :class="{active: curLink == item.title}" @click="preview(item)">{{index+1}} {{item.title}}</p>
+                                    </div>
+                                </div>
+                            </template>
+                            <template v-else>
+                                <div v-for="(item,index) in videoList1" :key="index">
+                                    <div class="flex-between list_catalog">
+                                        <p class="experimental_title" :class="{active: curLink == item.title}" @click="preview(item)">{{index+1}} {{item.title}}</p>
+                                    </div>
+                                </div>
+                            </template>
+                        </div>
+                    </div>
+                </el-col>
+            </el-col>
+        </el-row>
+
+        <!-- 答题弹框 -->
+        <el-dialog :visible.sync="evaluationVisible" width="30%" custom-class="evaluation_dialog" center :close-on-click-modal="false">
+            <div class="title">能力测评</div>
+
+            <div class="ques-wrap">
+                <p class="serial">{{question.currentQuestionSortNo}}/{{question.totalQuestionNum}}</p>
+                <p class="type">({{question.questionTypeName}})</p>
+                <div class="ques">{{question.questionStem}}</div>
+                <div class="countdown flex-center">
+                    <img src="@/assets/img/hourglass.png" alt="">
+                    <span>倒计时:{{countdown}}</span>
+                </div>
+                <ul class="options" :class="{isDone}">
+                    <li v-for="(item,key) in question.options" :key="key" :class="{active: selected.includes(key)}" @click="selectOption(key)"><em>{{key}}.</em><span>{{item}}</span></li>
+                </ul>
+            </div>
+            
+            <div slot="footer" class="dialog-footer" v-if="!isDone">
+                <template v-if="lastOne">
+                    <el-button @click="prevQues">上一题</el-button>
+                    <el-button type="primary" @click="submitQues">提交</el-button>
+                </template>
+                <template v-else>
+                    <el-button class="first" @click="prevQues">上一题</el-button>
+                    <el-button class="second" type="primary" @click="nextQues">下一题</el-button>
+                </template>
+            </div>
+        </el-dialog>
+
+        <!-- 提交成绩弹框 -->
+        <el-dialog :visible.sync="resultVisible" width="30%" custom-class="result_dialog" center :close-on-click-modal="false">
+            <div class="result"><span>{{result.isPassed}}</span></div>
+
+            <div class="ques-wrap">
+                <div class="point">
+                    <span>{{result.totalScore}}</span>分
+                </div>
+                <p class="tips">{{result.isPassed == '通过' ? '恭喜' : ''}}你答对{{result.correctQuestionNum}}题,正确率{{result.correctRate}}!</p>
+            </div>
+            
+            <div slot="footer" class="dialog-footer">
+                <el-button class="first" @click="toEvaluation(0)">再试一次</el-button>
+                <el-button class="second" type="primary" @click="getDetail">成绩详情</el-button>
+                <el-button v-if="result.isPassed == '通过'" class="third" type="primary" @click="goSubSystem">进入实训</el-button>
+            </div>
+        </el-dialog>
+
+        <!-- 成绩详情弹框 -->
+        <el-dialog :visible.sync="detailVisible" width="30%" custom-class="detail_dialog" center :close-on-click-modal="false">
+            <div class="title">成绩详情</div>
+            <div style="min-height: 370px">
+                <el-table :data="detailData" height="340" border style="width: 100%">
+                    <el-table-column type="index" label="序号" width="60" align="center"></el-table-column>
+                    <el-table-column prop="date" label="正误" min-width="45" align="center">
+                        <template slot-scope="scope">
+                            <img v-if="scope.row.questionScore" width="15" src="@/assets/img/true.png" alt="">
+                            <img v-else width="15" src="@/assets/img/false.png" alt="">
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="questionScore" label="得分" min-width="45" align="center"></el-table-column>
+                    <el-table-column prop="answer" label="正确答案" min-width="70" align="center"></el-table-column>
+                    <el-table-column prop="userAnswer" label="你的答案" min-width="70" align="center"></el-table-column>
+                    <el-table-column prop="answerAnalysis" label="解析" min-width="80"></el-table-column>
+                </el-table>
+            </div>
+            <p class="total">得分:{{totalScore}}分</p>
+        </el-dialog>
+    </div>
+</template>
+
+<script>
+import { mapState, mapActions } from 'vuex'
+import util from '@/libs/util'
+import Setting from '@/setting'
+import pdf from '@/components/pdf'
+export default {
+    components: { pdf },
+    data() {
+        return {
+            systemId: Setting.systemId,
+            systemList: Setting.systemList,
+            video: 'http://liuwanr.oss-cn-shenzhen.aliyuncs.com/mp4/20200519/1589871025648.mp4',
+            videoSrc: '',
+            curLink: '',
+            videoList1: [ {
+                "id": 5,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1ppt%281%29/print%28%29%E5%87%BD%E6%95%B0.pptx",
+                "isdel": 0,
+                "title": "项目一 print()函数"
+            },{
+                "id": 5,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/programming/项目一.mp4",
+                "isdel": 0,
+                "title": "项目一 print()函数(操作视频)"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1ppt%281%29/%E6%95%B0%E6%8D%AE%E8%BD%AC%E6%8D%A2%E4%B8%8E%E6%8B%BC%E6%8E%A5.pptx",
+                "isdel": 0,
+                "title": "项目二 数据转换与拼接"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/programming/程序设计项目二数据转换与拼接.mp4",
+                "isdel": 0,
+                "title": "项目二 数据转换与拼接(操作视频)"
+            }, {
+                "id": 3,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1ppt%281%29/if%E6%9D%A1%E4%BB%B6%E5%88%A4%E6%96%AD%E8%AF%AD%E5%8F%A5.pptx",
+                "isdel": 0,
+                "title": "项目三 if条件判断语句"
+            },{
+                "id": 3,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/programming/if.mp4",
+                "isdel": 0,
+                "title": "项目三 if条件判断语句(操作视频)"
+            }, {
+                "id": 6,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1ppt%281%29/input%28%29%E5%87%BD%E6%95%B0.pptx",
+                "isdel": 0,
+                "title": "项目四 input()函数"
+            }, {
+                "id": 6,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/进阶(input)函数.mp4",
+                "isdel": 0,
+                "title": "项目四 input()函数(操作视频)"
+            }, {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1ppt%281%29/%E5%88%97%E8%A1%A8%E5%85%83%E7%BB%84%E5%AD%97%E5%85%B8.pptx",
+                "isdel": 0,
+                "title": "项目五 列表元组字典"
+            }, {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/programming/列表元组字典.mp4",
+                "isdel": 0,
+                "title": "项目五 列表元组字典(操作视频)"
+            },{
+                "id": 1,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1ppt%281%29/for%E5%BE%AA%E7%8E%AF.pptx",
+                "isdel": 0,
+                "title": "项目六 for循环"
+            },{
+                "id": 1,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/programming/for循环.mp4",
+                "isdel": 0,
+                "title": "项目六 for循环(操作视频)"
+            }, {
+                "id": 2,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1ppt%281%29/while%E5%BE%AA%E7%8E%AF.pptx",
+                "isdel": 0,
+                "title": "项目七 while循环"
+            },{
+                "id": 2,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/programming/while循环.mp4",
+                "isdel": 0,
+                "title": "项目七 while循环(操作视频)"
+            }, {
+                "id": 7,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1ppt%281%29/%E5%87%BD%E6%95%B0.pptx",
+                "isdel": 0,
+                "title": "项目八 函数"
+            },{
+                "id": 7,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/programming/函数.mp4",
+                "isdel": 0,
+                "title": "项目八 函数(操作视频)"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1ppt%281%29/%E7%B1%BB%E4%B8%8E%E5%AF%B9%E8%B1%A1%E4%B8%80.pptx",
+                "isdel": 0,
+                "title": "项目九 类与对象一"
+            },{
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/programming/类与对象1.mp4",
+                "isdel": 0,
+                "title": "项目九 类与对象一(操作视频)"
+            }, {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1ppt%281%29/%E7%B1%BB%E4%B8%8E%E5%AF%B9%E8%B1%A1%E4%BA%8C.pptx",
+                "isdel": 0,
+                "title": "项目十 类与对象二"
+            },{
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/programming/类与对象2.mp4",
+                "isdel": 0,
+                "title": "项目十 类与对象二(操作视频)"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1ppt%281%29/%E6%A8%A1%E5%9D%97.pptx",
+                "isdel": 0,
+                "title": "项目十一 模块"
+            },{
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/programming/模块.mp4",
+                "isdel": 0,
+                "title": "项目十一 模块(操作视频)"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1ppt%281%29/%E7%BB%BC%E5%90%88%E8%AE%AD%E7%BB%83.pptx",
+                "isdel": 0,
+                "title": "项目十二 综合训练"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/综合训练1.mp4",
+                "isdel": 0,
+                "title": "项目十二 综合训练(操作视频)"
+            }, {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1ppt%281%29/%E5%BA%8F%E5%88%97%E5%BA%94%E7%94%A8.pptx",
+                "isdel": 0,
+                "title": "项目十三 序列应用"
+            }, {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/序列应用.mp4",
+                "isdel": 0,
+                "title": "项目十三 序列应用(操作视频)"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1ppt%281%29/%E6%95%B0%E6%8D%AE%E5%BA%93.pptx",
+                "isdel": 0,
+                "title": "项目十四 数据库"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/数据库(1).mp4",
+                "isdel": 0,
+                "title": "项目十四 数据库(操作视频)"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1ppt%281%29/%E7%88%AC%E8%99%AB.pptx",
+                "isdel": 0,
+                "title": "项目十五 爬虫"
+            },{
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/programming/爬虫.mp4",
+                "isdel": 0,
+                "title": "项目十五 爬虫(操作视频)"
+            }, {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1ppt%281%29/%E6%9C%B4%E7%B4%A0%E8%B4%9D%E5%8F%B6%E6%96%AF%E5%88%86%E7%B1%BB%E7%AE%97%E6%B3%95.pptx",
+                "isdel": 0,
+                "title": "项目十六 朴素贝叶斯分类算法"
+            }, {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/programming/贝叶斯.mp4",
+                "isdel": 0,
+                "title": "项目十六 朴素贝叶斯分类算法(操作视频)"
+            }],
+            videoList4: [{
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E9%87%91%E8%9E%8D%E5%BB%BA%E6%A8%A1ppt%281%29/%E8%B4%A7%E5%B8%81%E6%97%B6%E9%97%B4%E4%BB%B7%E5%80%BC.pptx",
+                "isdel": 0,
+                "title": "项目一 货币时间价值"
+            },{
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/jinrong/%E9%A1%B9%E7%9B%AE%E4%B8%80%EF%BC%9A%E8%B4%A7%E5%B8%81%E6%97%B6%E9%97%B4%E4%BB%B7%E5%80%BC.mp4",
+                "isdel": 0,
+                "title": "项目一 货币时间价值(操作视频)"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E9%87%91%E8%9E%8D%E5%BB%BA%E6%A8%A1ppt%281%29/%E6%95%B0%E6%8D%AE%E9%A9%B1%E5%8A%A8%E7%9A%84%E8%B4%A2%E5%8A%A1%E5%86%B3%E7%AD%96.pptx",
+                "isdel": 0,
+                "title": "项目二 数据驱动的财务决策"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/jinrong/%E9%A1%B9%E7%9B%AE%E4%BA%8C%EF%BC%9A%E6%95%B0%E6%8D%AE%E9%A9%B1%E5%8A%A8%E7%9A%84%E8%B4%A2%E5%8A%A1%E5%86%B3%E7%AD%96.mp4",
+                "isdel": 0,
+                "title": "项目二 数据驱动的财务决策(操作视频)"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E9%87%91%E8%9E%8D%E5%BB%BA%E6%A8%A1ppt%281%29/%E5%80%BA%E5%88%B8%E7%9A%84%E5%AE%9A%E4%BB%B7.pptx",
+                "isdel": 0,
+                "title": "项目三 债券的定价"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/jinrong/%E9%A1%B9%E7%9B%AE%E4%B8%89%EF%BC%9A%E5%80%BA%E5%88%B8%E7%9A%84%E5%AE%9A%E4%BB%B7.mp4",
+                "isdel": 0,
+                "title": "项目三 债券的定价(操作视频)"
+            },  {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E9%87%91%E8%9E%8D%E5%BB%BA%E6%A8%A1ppt%281%29/%E6%AC%A7%E5%BC%8F%E6%9C%9F%E6%9D%83%E7%9A%84%E5%AE%9A%E4%BB%B7.pptx",
+                "isdel": 0,
+                "title": "项目四 欧式期权的定价"
+            },  {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/jinrong/%E9%A1%B9%E7%9B%AE%E5%9B%9B%EF%BC%9A%E6%AC%A7%E5%BC%8F%E6%9C%9F%E6%9D%83%E5%AE%9A%E4%BB%B7.mp4",
+                "isdel": 0,
+                "title": "项目四 欧式期权的定价(操作视频)"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E9%87%91%E8%9E%8D%E5%BB%BA%E6%A8%A1ppt%281%29/%E8%82%A1%E7%A5%A8%E7%9A%84%E5%AE%9A%E4%BB%B7.pptx",
+                "isdel": 0,
+                "title": "项目五 股票的定价"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/jinrong/%E9%A1%B9%E7%9B%AE%E4%BA%94%EF%BC%9A%E8%82%A1%E7%A5%A8%E5%AE%9A%E4%BB%B7.mp4",
+                "isdel": 0,
+                "title": "项目五 股票的定价(操作视频)"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E9%87%91%E8%9E%8D%E5%BB%BA%E6%A8%A1ppt%281%29/%E5%9B%BA%E5%AE%9A%E6%94%B6%E7%9B%8A%E8%AF%81%E5%88%B8%E8%AE%A1%E7%AE%97.pptx",
+                "isdel": 0,
+                "title": "项目六 固定收益证券计算"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/jinrong/%E9%A1%B9%E7%9B%AE%E5%85%AD%EF%BC%9A%E5%9B%BA%E5%AE%9A%E6%94%B6%E7%9B%8A%E8%AF%81%E5%88%B8%E8%AE%A1%E7%AE%97.mp4",
+                "isdel": 0,
+                "title": "项目六 固定收益证券计算(操作视频)"
+            }, {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E9%87%91%E8%9E%8D%E5%BB%BA%E6%A8%A1ppt%281%29/%E4%BC%B0%E8%AE%A1%CE%B2%E7%B3%BB%E6%95%B0.pptx",
+                "isdel": 0,
+                "title": "项目七 估计β系数"
+            }, {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/jinrong/%E9%A1%B9%E7%9B%AE%E4%B8%83%EF%BC%9A%E4%BC%B0%E8%AE%A1%CE%B2%E7%B3%BB%E6%95%B0.mp4",
+                "isdel": 0,
+                "title": "项目七 估计β系数(操作视频)"
+            }, {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E9%87%91%E8%9E%8D%E5%BB%BA%E6%A8%A1ppt%281%29/%E5%9B%BD%E5%80%BA%E6%9C%9F%E8%B4%A7.pptx",
+                "isdel": 0,
+                "title": "项目八 国债期货"
+            }, {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/jinrong/%E9%A1%B9%E7%9B%AE%E5%85%AB%EF%BC%9A%E5%9B%BD%E5%80%BA%E6%9C%9F%E8%B4%A7%E6%A8%A1%E6%8B%9F%E8%AE%BE%E8%AE%A1.mp4",
+                "isdel": 0,
+                "title": "项目八 国债期货(操作视频)"
+            }, {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E9%87%91%E8%9E%8D%E5%BB%BA%E6%A8%A1ppt%281%29/%E8%82%A1%E6%8C%87%E6%9C%9F%E8%B4%A7%E5%A5%97%E6%9C%9F%E4%BF%9D%E9%9A%9C%E7%AD%96%E7%95%A5%E8%AE%BE%E8%AE%A1.pptx",
+                "isdel": 0,
+                "title": "项目九 股指期货套期保障策略设计"
+            }, {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/jinrong/%E9%A1%B9%E7%9B%AE%E4%B9%9D%EF%BC%9A%E8%82%A1%E6%8C%87%E6%9C%9F%E8%B4%A7%E5%A5%97%E6%9C%9F%E4%BF%9D%E9%9A%9C%E7%AD%96%E7%95%A5%E8%AE%BE%E8%AE%A1.mp4",
+                "isdel": 0,
+                "title": "项目九 股指期货套期保障策略设计(操作视频)"
+            }, {
+                "id": 6,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E9%87%91%E8%9E%8D%E5%BB%BA%E6%A8%A1ppt%281%29/JR%E4%BA%8C%E5%8F%89%E6%A0%91%E6%AC%A7%E5%BC%8F%E6%9C%9F%E6%9D%83%E8%AE%BE%E8%AE%A1.pptx",
+                "isdel": 0,
+                "title": "项目十 JR二叉树欧式期权设计"
+            }, {
+                "id": 6,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/jinrong/%E9%A1%B9%E7%9B%AE%E5%8D%81%EF%BC%9A%E4%BA%8C%E5%8F%89%E6%A0%91%E6%AC%A7%E5%BC%8F%E6%9C%9F%E6%9D%83.mp4",
+                "isdel": 0,
+                "title": "项目十 JR二叉树欧式期权设计(操作视频)"
+            }, {
+                "id": 2,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/jinrong/%E9%A1%B9%E7%9B%AE%E5%8D%81%E4%B8%80%EF%BC%9A%E5%B8%83%E8%8E%B1%E5%85%8B%E2%80%94%E8%88%92%E5%B0%94%E6%96%AF%E6%AC%A7%E5%BC%8F%E6%9C%9F%E6%9D%83.mp4",
+                "isdel": 0,
+                "title": "项目十一 布莱克-舒尔斯欧式期权设计"
+            }, {
+                "id": 2,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/jinrong/%E9%A1%B9%E7%9B%AE%E5%8D%81%E4%B8%80%EF%BC%9A%E5%B8%83%E8%8E%B1%E5%85%8B%E2%80%94%E8%88%92%E5%B0%94%E6%96%AF%E6%AC%A7%E5%BC%8F%E6%9C%9F%E6%9D%83.mp4",
+                "isdel": 0,
+                "title": "项目十一 布莱克-舒尔斯欧式期权设计(操作视频)"
+            }, {
+                "id": 7,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E9%87%91%E8%9E%8D%E5%BB%BA%E6%A8%A1ppt%281%29/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%BE%8E%E5%BC%8F%E6%9C%9F%E6%9D%83%E8%AE%BE%E8%AE%A1.pptx",
+                "isdel": 0,
+                "title": "项目十二 二叉树美式期权设计"
+            }, {
+                "id": 7,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/jinrong/%E9%A1%B9%E7%9B%AE%E5%8D%81%E4%BA%8C%EF%BC%9A%E4%BA%8C%E5%8F%89%E6%A0%91%E7%BE%8E%E5%BC%8F%E6%9C%9F%E6%9D%83%E3%80%81.mp4",
+                "isdel": 0,
+                "title": "项目十二 二叉树美式期权设计(操作视频)"
+            }, {
+                "id": 5,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E9%87%91%E8%9E%8D%E5%BB%BA%E6%A8%A1ppt%281%29/%E5%B8%83%E8%8E%B1%E5%85%8B-%E8%88%92%E5%B0%94%E6%96%AF%E7%BE%8E%E5%BC%8F%E6%9C%9F%E6%9D%83%E8%AE%BE%E8%AE%A1.pptx",
+                "isdel": 0,
+                "title": "项目十三 布莱克-舒尔斯美式期权设计"
+            }, {
+                "id": 5,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/jinrong/%E9%A1%B9%E7%9B%AE%E5%8D%81%E4%B8%89%EF%BC%9A%E5%B8%83%E8%8E%B1%E5%85%8B-%E8%88%92%E5%B0%94%E6%96%AF%E7%BE%8E%E5%BC%8F%E6%9C%9F%E6%9D%83.mp4",
+                "isdel": 0,
+                "title": "项目十三 布莱克-舒尔斯美式期权设计(操作视频)"
+            }, {
+                "id": 3,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E9%87%91%E8%9E%8D%E5%BB%BA%E6%A8%A1ppt%281%29/Covered%20Call.pptx",
+                "isdel": 0,
+                "title": "项目十四 Covered Call"
+            }, {
+                "id": 3,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/jinrong/%E9%A1%B9%E7%9B%AE%E5%8D%81%E5%9B%9B%EF%BC%9ACovered%20Call.mp4",
+                "isdel": 0,
+                "title": "项目十四 Covered Call(操作视频)"
+            },{
+                "id": 1,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E9%87%91%E8%9E%8D%E5%BB%BA%E6%A8%A1ppt%281%29/Butterfiy%20Spread.pptx",
+                "isdel": 0,
+                "title": "项目十五 Butterfiy Spread"
+            },{
+                "id": 1,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/jinrong/%E9%A1%B9%E7%9B%AE%E5%8D%81%E4%BA%94%EF%BC%9A%E7%A2%9F%E5%BC%8F%E4%BB%B7%E5%B7%AE.mp4",
+                "isdel": 0,
+                "title": "项目十五 Butterfiy Spread(操作视频)"
+            }],
+            videoList5: [{
+                "id": 1,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E5%8F%AF%E8%A7%86%E5%8C%96ppt%281%29%281%29/%E9%A1%B9%E7%9B%AE%E4%B8%80%20%E4%BA%86%E8%A7%A3matplotlib.pptx",
+                "isdel": 0,
+                "title": "项目一 了解matplotlib"
+            },{
+                "id": 1,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/visualization/%E9%A1%B9%E7%9B%AE%E4%B8%80%EF%BC%9A%E5%9F%BA%E7%A1%801%E2%80%94%E2%80%94%E4%BA%86%E8%A7%A3matplotlib%E7%9A%84%E5%8A%9F%E8%83%BD.mp4",
+                "isdel": 0,
+                "title": "项目一 了解matplotlib(操作视频)"
+            }, {
+                "id": 3,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E5%8F%AF%E8%A7%86%E5%8C%96ppt%281%29%281%29/%E9%A1%B9%E7%9B%AE%E4%BA%8C%20%E7%BB%98%E5%88%B6%E6%9D%A1%E5%BD%A2%E5%9B%BE.pptx",
+                "isdel": 0,
+                "title": "项目二 绘制条形图"
+            }, {
+                "id": 3,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/visualization/%E9%A1%B9%E7%9B%AE%E4%BA%8C%EF%BC%9A%E5%9F%BA%E7%A1%802%E2%80%94%E2%80%94%E5%9B%BE%E5%BD%A2%E7%9A%84%E7%BB%98%E5%88%B6%28%E6%9D%A1%E5%BD%A2%E5%9B%BE%29.mp4",
+                "isdel": 0,
+                "title": "项目二 绘制条形图(操作视频)"
+            },{
+                "id": 5,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E5%8F%AF%E8%A7%86%E5%8C%96ppt%281%29%281%29/%E9%A1%B9%E7%9B%AE%E4%B8%89%20%E7%BB%98%E5%88%B6%E7%9B%B4%E6%96%B9%E5%9B%BE.pptx",
+                "isdel": 0,
+                "title": "项目三 绘制直方图"
+            },{
+                "id": 5,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/visualization/项目三:基础3——图形的绘制(直方图).mp4",
+                "isdel": 0,
+                "title": "项目三 绘制直方图(操作视频)"
+            }, {
+                "id": 2,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E5%8F%AF%E8%A7%86%E5%8C%96ppt%281%29%281%29/%E9%A1%B9%E7%9B%AE%E5%9B%9B%20%E7%BB%98%E5%88%B6%E6%8A%98%E7%BA%BF%E5%9B%BE.pptx",
+                "isdel": 0,
+                "title": "项目四 绘制折线图"
+            }, {
+                "id": 2,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/visualization/项目四:基础4——图形的绘制(折线图).mp4",
+                "isdel": 0,
+                "title": "项目四 绘制折线图(操作视频)"
+            }, {
+                "id": 7,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E5%8F%AF%E8%A7%86%E5%8C%96ppt%281%29%281%29/%E9%A1%B9%E7%9B%AE%E4%BA%94%20%E7%BB%98%E5%88%B6%E6%95%A3%E7%82%B9%E5%9B%BE.pptx",
+                "isdel": 0,
+                "title": "项目五 绘制散点图"
+            }, {
+                "id": 7,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/visualization/项目五:基础5——图形的绘制(散点图).mp4",
+                "isdel": 0,
+                "title": "项目五 绘制散点图(操作视频)"
+            }, {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E5%8F%AF%E8%A7%86%E5%8C%96ppt%281%29%281%29/%E9%A1%B9%E7%9B%AE%E5%85%AD%20%E7%BB%98%E5%88%B6%E7%AE%B1%E7%BA%BF%E5%9B%BE.pptx",
+                "isdel": 0,
+                "title": "项目六 绘制箱线图"
+            }, {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/visualization/项目六:基础6——图形的绘制(箱线图).mp4",
+                "isdel": 0,
+                "title": "项目六 绘制箱线图(操作视频)"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E5%8F%AF%E8%A7%86%E5%8C%96ppt%281%29%281%29/%E9%A1%B9%E7%9B%AE%E4%B8%83%20%E7%BB%98%E5%88%B6%E9%A5%BC%E5%9B%BE.pptx",
+                "isdel": 0,
+                "title": "项目七 绘制饼图"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/visualization/项目七:基础7——图形的绘制(饼图).mp4",
+                "isdel": 0,
+                "title": "项目七 绘制饼图(操作视频)"
+            }, {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E5%8F%AF%E8%A7%86%E5%8C%96ppt%281%29%281%29/%E9%A1%B9%E7%9B%AE%E5%85%AB%20%E7%BB%98%E5%88%B6%E9%9D%A2%E7%A7%AF%E5%9B%BE.pptx",
+                "isdel": 0,
+                "title": "项目八 绘制面积图"
+            }, {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/visualization/项目八:基础8——图形的绘制(面积图).mp4",
+                "isdel": 0,
+                "title": "项目八 绘制面积图(操作视频)"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E5%8F%AF%E8%A7%86%E5%8C%96ppt%281%29%281%29/%E9%A1%B9%E7%9B%AE%E4%B9%9D%20%E7%BB%98%E5%88%B62D%E7%AD%89%E9%AB%98%E7%BA%BF%E5%9B%BE.pptx",
+                "isdel": 0,
+                "title": "项目九 绘制2D等高线图"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/visualization/项目九:进阶1——绘制2D等高线图.mp4",
+                "isdel": 0,
+                "title": "项目九 绘制2D等高线图(操作视频)"
+            }, {
+                "id": 11,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E5%8F%AF%E8%A7%86%E5%8C%96ppt%281%29%281%29/%E9%A1%B9%E7%9B%AE%E5%8D%81%20%E5%BD%93%E7%94%9F%E6%88%90%E7%9A%84%E5%9B%BE%E7%89%87%E6%9C%89%E4%B8%A4%E5%BC%A0%E6%88%96%E5%A4%9A%E5%BC%A0%E6%97%B6%E4%BF%9D%E8%AF%81%E5%9B%BE%E7%89%87%E4%B8%8D%E8%A6%86%E7%9B%96.pptx",
+                "isdel": 0,
+                "title": "项目十 当生成的图片有两张或多张时保证图片不覆盖"
+            }, {
+                "id": 12,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E5%8F%AF%E8%A7%86%E5%8C%96ppt%281%29%281%29/%E9%A1%B9%E7%9B%AE%E5%8D%81%E4%B8%80%20%E7%BB%99%E6%89%80%E7%94%9F%E6%88%90%E7%9A%84%E5%9B%BE%E7%89%87%E6%B7%BB%E5%8A%A0%E6%A0%87%E7%AD%BE.pptx",
+                "isdel": 0,
+                "title": "项目十一 给所生成的图片添加标签"
+            }, {
+                "id": 12,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/visualization/项目十一:进阶3——给所生成的图片添加标签.mp4",
+                "isdel": 0,
+                "title": "项目十一 给所生成的图片添加标签(操作视频)"
+            }, {
+                "id": 13,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E5%8F%AF%E8%A7%86%E5%8C%96ppt%281%29%281%29/%E9%A1%B9%E7%9B%AE%E5%8D%81%E4%BA%8C%20%E5%A4%9A%E5%AD%90%E5%9B%BE.pptx",
+                "isdel": 0,
+                "title": "项目十二 多子图"
+            }, {
+                "id": 13,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/visualization/项目十二:进阶4——多子图.mp4",
+                "isdel": 0,
+                "title": "项目十二 多子图(操作视频)"
+            }, {
+                "id": 11,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E5%8F%AF%E8%A7%86%E5%8C%96ppt%281%29%281%29/%E9%A1%B9%E7%9B%AE%E5%8D%81%E4%B8%89%20%E7%BB%98%E5%88%B6%E4%BA%8C%E7%BB%B4%E7%9B%B4%E6%96%B9%E5%9B%BE.pptx",
+                "isdel": 0,
+                "title": "项目十三 绘制二维直方图"
+            }, {
+                "id": 11,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/visualization/项目十三:进阶5——绘制一张二维直方图.mp4",
+                "isdel": 0,
+                "title": "项目十三 绘制二维直方图(操作视频)"
+            }, {
+                "id": 12,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E5%8F%AF%E8%A7%86%E5%8C%96ppt%281%29%281%29/%E9%A1%B9%E7%9B%AE%E5%8D%81%E5%9B%9B%20%E8%87%AA%E5%AE%9A%E4%B9%89%E8%89%B2%E9%98%B6.pptx",
+                "isdel": 0,
+                "title": "项目十四 自定义色阶"
+            }, {
+                "id": 12,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/visualization/项目十四:进阶6——在一张图中绘制3组不同的直方图,并给所生成的图片设置透明度.mp4",
+                "isdel": 0,
+                "title": "项目十四 自定义色阶(操作视频)"
+            }, {
+                "id": 13,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E5%8F%AF%E8%A7%86%E5%8C%96ppt%281%29%281%29/%E9%A1%B9%E7%9B%AE%E5%8D%81%E4%BA%94%20%E4%B8%89%E7%BB%B4%E5%9B%BE%E5%83%8F.pptx",
+                "isdel": 0,
+                "title": "项目十五 三维图像"
+            }, {
+                "id": 13,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/visualization/项目十五:进阶7——自定义色阶.mp4",
+                "isdel": 0,
+                "title": "项目十五 三维图像(操作视频)"
+            }, {
+                "id": 13,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/visualization/项目十六:进阶8——三维图像.mp4",
+                "isdel": 0,
+                "title": "项目十六 进阶8——三维图像(操作视频)"
+            }, {
+                "id": 13,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/visualization/%E9%A1%B9%E7%9B%AE%E5%8D%81%E4%B8%83%EF%BC%9A%E7%BB%88%E9%98%B6%E2%80%94%E2%80%94%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96.mp4",
+                "isdel": 0,
+                "title": "项目十七 终阶——数据可视化"
+            }],
+            videoList6: [{
+                "id": 1,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9/%E9%A1%B9%E7%9B%AE%E4%B8%80%EF%BC%9A%E5%80%BA%E5%88%B8%E5%92%8C%E5%88%A9%E7%8E%87.pptx",
+                "isdel": 0,
+                "title": "项目一 债券和利率"
+            },{
+                "id": 1,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/zz/系统一项目一. 债券与利率.MP4",
+                "isdel": 0,
+                "title": "项目一 债券和利率(操作视频)"
+            }, {
+                "id": 3,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9/%E9%A1%B9%E7%9B%AE%E4%BA%8C%20%E8%B5%84%E4%BA%A7%E7%BB%84%E5%90%88.pptx",
+                "isdel": 0,
+                "title": "项目二 资产组合"
+            }, {
+                "id": 3,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/zz/系统一项目二资产组合.mp4",
+                "isdel": 0,
+                "title": "项目二 资产组合(操作视频)"
+            },{
+                "id": 5,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9/3%E6%9C%9F%E6%9D%83%E5%AE%9A%E4%BB%B7%E7%90%86%E8%AE%BA%E5%92%8C%E5%A5%97%E5%88%A9%E5%AE%9A%E4%BB%B7.pptx",
+                "isdel": 0,
+                "title": "项目三 期权定价理论和套利定价"
+            },{
+                "id": 5,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/zz/系统一项目三.期权定价理论和套利定价.mp4",
+                "isdel": 0,
+                "title": "项目三 期权定价理论和套利定价(操作视频)"
+            }, {
+                "id": 2,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9/%E9%A1%B9%E7%9B%AE%E5%9B%9Bppt.pptx",
+                "isdel": 0,
+                "title": "项目四 证券市场和股票的波动"
+            }, {
+                "id": 2,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/zz/系统一项目四.证券市场和股票的波动.mp4",
+                "isdel": 0,
+                "title": "项目四 证券市场和股票的波动(操作视频)"
+            }, {
+                "id": 7,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9/5-%E9%A1%B9%E7%9B%AEppt.pptx",
+                "isdel": 0,
+                "title": "项目五 正态随机过程"
+            }, {
+                "id": 7,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/zz/系统一项目五:正态随机过程.mp4",
+                "isdel": 0,
+                "title": "项目五 正态随机过程(操作视频)"
+            }, {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9/6Poisson%E8%BF%87%E7%A8%8B.pptx",
+                "isdel": 0,
+                "title": "项目六 Poisson过程"
+            }, {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/zz/系统一项目六.Poisson过程.mp4",
+                "isdel": 0,
+                "title": "项目六 Poisson过程(操作视频)"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9/7Python%E9%87%91%E8%9E%8D%E9%9A%8F%E6%9C%BA%E8%BF%87%E7%A8%8B%E5%AE%9E%E9%AA%8C%E6%95%99%E5%AD%A6%E7%B3%BB%E7%BB%9F%EF%BC%88%E7%AC%AC%E4%B8%83%E9%A1%B9%EF%BC%89.pptx",
+                "isdel": 0,
+                "title": "项目七 平稳随机过程"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/系统一 项目七 金融随机过程.mp4",
+                "isdel": 0,
+                "title": "项目七 平稳随机过程(操作视频)"
+            }, {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9/8%E7%A6%BB%E6%95%A3%E5%8F%82%E6%95%B0Markov%E9%93%BE.pptx",
+                "isdel": 0,
+                "title": "项目八 离散参数Markov链"
+            }, {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/zz/系统一项目八:离散参数Markov链.mp4",
+                "isdel": 0,
+                "title": "项目八 离散参数Markov链(操作视频)"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9/%E9%A1%B9%E7%9B%AE%E4%B9%9D%20%E8%BF%9E%E7%BB%AD%E6%97%B6%E9%97%B4Markov%E9%93%BE.pptx",
+                "isdel": 0,
+                "title": "项目九 连续时间Markov链"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/zz/系统一项目九.连续时间Markov链.mp4",
+                "isdel": 0,
+                "title": "项目九 连续时间Markov链(操作视频)"
+            }, {
+                "id": 11,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9/%E9%A1%B9%E7%9B%AE10_%E5%B8%83%E6%9C%97%E8%BF%90%E5%8A%A8.pptx",
+                "isdel": 0,
+                "title": "项目十 布朗运动"
+            }, {
+                "id": 11,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/zz/系统一项目十.布朗运动.mp4",
+                "isdel": 0,
+                "title": "项目十 布朗运动(操作视频)"
+            }, {
+                "id": 12,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9/%E9%A1%B9%E7%9B%AE11_%E9%9E%85%E5%8F%8A%E5%85%B6%E5%BA%94%E7%94%A8.pptx",
+                "isdel": 0,
+                "title": "项目十一 鞅及其应用"
+            }, {
+                "id": 12,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/zz/系统一项目十一.鞅及其应用.mp4",
+                "isdel": 0,
+                "title": "项目十一 鞅及其应用(操作视频)"
+            }, {
+                "id": 13,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9/%E9%A1%B9%E7%9B%AE12_%E9%9A%8F%E6%9C%BA%E5%BE%AE%E5%88%86%E6%96%B9%E7%A8%8B%E5%8F%8A%E5%85%B6%E5%9C%A8%E9%87%91%E8%9E%8D%E4%B8%AD%E7%9A%84%E5%BA%94%E7%94%A8.pptx",
+                "isdel": 0,
+                "title": "项目十二 随机微分方程及其在金融中的应用"
+            }, {
+                "id": 13,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/zz/系统一项目十二:随机微分方程及其在金融中的应用.mp4",
+                "isdel": 0,
+                "title": "项目十二 随机微分方程及其在金融中的应用(操作视频)"
+            }],
+            videoList7: [{
+                "id": 1,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E7%B3%BB%E7%BB%9F%E4%BA%8C-%E9%87%8F%E5%8C%96%E6%8A%95%E8%B5%84%281%29/1.pptx",
+                "isdel": 0,
+                "title": "项目一 了解matplotlib的功能"
+            },{
+                "id": 1,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/zz/量化投资项目一:基础了解maplab.mp4",
+                "isdel": 0,
+                "title": "项目一 了解matplotlib的功能(操作视频)"
+            }, {
+                "id": 3,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E7%B3%BB%E7%BB%9F%E4%BA%8C-%E9%87%8F%E5%8C%96%E6%8A%95%E8%B5%84%281%29/2.pptx",
+                "isdel": 0,
+                "title": "项目二 K线图"
+            }, {
+                "id": 3,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/zz/量化投资项目二:基础——K线图.mp4",
+                "isdel": 0,
+                "title": "项目二 K线图(操作视频)"
+            }, {
+                "id": 6,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E7%B3%BB%E7%BB%9F%E4%BA%8C-%E9%87%8F%E5%8C%96%E6%8A%95%E8%B5%84%281%29/3.pptx",
+                "isdel": 0,
+                "title": "项目三 动量交易策略"
+            }, {
+                "id": 6,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/zz/量化投资项目三:基础——动量交易策略.mp4",
+                "isdel": 0,
+                "title": "项目三 动量交易策略(操作视频)"
+            }, {
+                "id": 5,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E7%B3%BB%E7%BB%9F%E4%BA%8C-%E9%87%8F%E5%8C%96%E6%8A%95%E8%B5%84%281%29/4.pptx",
+                "isdel": 0,
+                "title": "项目四 RSI相对强弱指标"
+            }, {
+                "id": 5,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/zz/量化投资项目四:基础——RSI相对强弱指标.mp4",
+                "isdel": 0,
+                "title": "项目四 RSI相对强弱指标(操作视频)"
+            }, {
+                "id": 2,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E7%B3%BB%E7%BB%9F%E4%BA%8C-%E9%87%8F%E5%8C%96%E6%8A%95%E8%B5%84%281%29/5.pptx",
+                "isdel": 0,
+                "title": "项目五 简单移动平均"
+            }, {
+                "id": 2,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/zz/量化投资项目五:基础——简单移动平均.mp4",
+                "isdel": 0,
+                "title": "项目五 简单移动平均(操作视频)"
+            }, {
+                "id": 7,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E7%B3%BB%E7%BB%9F%E4%BA%8C-%E9%87%8F%E5%8C%96%E6%8A%95%E8%B5%84%281%29/6.pptx",
+                "isdel": 0,
+                "title": "项目六 加权移动平均"
+            }, {
+                "id": 7,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/zz/量化投资项目六:基础——加权移动平均.mp4",
+                "isdel": 0,
+                "title": "项目六 加权移动平均(操作视频)"
+            }, {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E7%B3%BB%E7%BB%9F%E4%BA%8C-%E9%87%8F%E5%8C%96%E6%8A%95%E8%B5%84%281%29/7.pptx",
+                "isdel": 0,
+                "title": "项目七 通道突破策略"
+            }, {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/zz/量化投资项目七:进阶1——通道突破策略.mp4",
+                "isdel": 0,
+                "title": "项目七 通道突破策略(操作视频)"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E7%B3%BB%E7%BB%9F%E4%BA%8C-%E9%87%8F%E5%8C%96%E6%8A%95%E8%B5%84%281%29/8.pptx",
+                "isdel": 0,
+                "title": "项目八 KDJ交易策略"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/zz/量化投资项目八:进阶2——KDJ交易策略.mp4",
+                "isdel": 0,
+                "title": "项目八 KDJ交易策略(操作视频)"
+            }, {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E7%B3%BB%E7%BB%9F%E4%BA%8C-%E9%87%8F%E5%8C%96%E6%8A%95%E8%B5%84%281%29/9.pptx",
+                "isdel": 0,
+                "title": "项目九 OBV指标交易策略"
+            }, {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/zz/量化投资项目九:进阶3——OBV指标交易策略.mp4",
+                "isdel": 0,
+                "title": "项目九 OBV指标交易策略(操作视频)"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E7%B3%BB%E7%BB%9F%E4%BA%8C-%E9%87%8F%E5%8C%96%E6%8A%95%E8%B5%84%281%29/10.pptx",
+                "isdel": 0,
+                "title": "项目十 基于机器学习的量化投资策略概览"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/zz/量化投资项目十:终阶——基于机器学习的量化投资概览.mp4",
+                "isdel": 0,
+                "title": "项目十 基于机器学习的量化投资策略概览(操作视频)"
+            }],
+            videoList8: [{
+                "id": 1,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E5%A4%A7%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E9%A1%B9%E7%9B%AE/%E9%A1%B9%E7%9B%AE%E4%B8%80%20%E6%95%B0%E6%8D%AE%E5%8C%85%E7%9A%84%E4%BD%BF%E7%94%A8.pptx",
+                "isdel": 0,
+                "title": "项目一 数据包的使用"
+            },{
+                "id": 1,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/dataAnalysis/系统三项目一.mp4",
+                "isdel": 0,
+                "title": "项目一 数据包的使用(操作视频)"
+            }, {
+                "id": 3,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E5%A4%A7%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E9%A1%B9%E7%9B%AE/%E5%9F%BA%E7%A1%80%E2%80%94%E2%80%94%E4%BD%BF%E7%94%A8numpy%E5%AE%9A%E4%B9%89%E4%B8%80%E7%BB%B4%E6%95%B0%E7%BB%84--2.pptx",
+                "isdel": 0,
+                "title": "项目二 使用numpy定义一维数组"
+            }, {
+                "id": 3,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/dataAnalysis/系统三项目二.mp4",
+                "isdel": 0,
+                "title": "项目二 使用numpy定义一维数组(操作视频)"
+            }, {
+                "id": 6,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E5%A4%A7%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E9%A1%B9%E7%9B%AE/%E5%9F%BA%E7%A1%80%E2%80%94%E2%80%94%E4%BD%BF%E7%94%A8pandas%E5%AE%9A%E4%B9%89%E4%B8%80%E7%BB%B4%E6%95%B0%E7%BB%84--3.pptx",
+                "isdel": 0,
+                "title": "项目三 使用pandas定义一维数组"
+            }, {
+                "id": 6,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/dataAnalysis/系统三项目三.mp4",
+                "isdel": 0,
+                "title": "项目三 使用pandas定义一维数组(操作视频)"
+            }, {
+                "id": 5,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E5%A4%A7%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E9%A1%B9%E7%9B%AE/%E5%9F%BA%E7%A1%80%E2%80%94%E2%80%94%E4%BD%BF%E7%94%A8numpy%E5%AE%9A%E4%B9%89%E4%BA%8C%E7%BB%B4%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84--4.pptx",
+                "isdel": 0,
+                "title": "项目四  使用numpy定义二维数据结构"
+            }, {
+                "id": 5,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/dataAnalysis/系统三项目四.mp4",
+                "isdel": 0,
+                "title": "项目四  使用numpy定义二维数据结构(操作视频)"
+            }, {
+                "id": 2,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E5%A4%A7%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E9%A1%B9%E7%9B%AE/%E5%9F%BA%E7%A1%80%E2%80%94%E2%80%94%E4%BD%BF%E7%94%A8pandas-DataFrame%EF%BC%88%E6%95%B0%E6%8D%AE%E6%A1%86%EF%BC%89%E5%AE%9A%E4%B9%89%E4%BA%8C%E7%BB%B4%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84--5.pptx",
+                "isdel": 0,
+                "title": "项目五 使用Pandas-DataFrame(数据框)定义二维数据结构"
+            }, {
+                "id": 2,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/dataAnalysis/系统三项目五.mp4",
+                "isdel": 0,
+                "title": "项目五 使用Pandas-DataFrame(数据框)定义二维数据结构(操作视频)"
+            }, {
+                "id": 7,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E5%A4%A7%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E9%A1%B9%E7%9B%AE/%E5%9F%BA%E7%A1%80%E2%80%94%E2%80%94%E6%95%B0%E6%8D%AE%E9%9B%86%E6%8F%8F%E8%BF%B0%E7%BB%9F%E8%AE%A1%E4%BF%A1%E6%81%AF--6.pptx",
+                "isdel": 0,
+                "title": "项目六 数据集描述统计信息"
+            }, {
+                "id": 7,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/dataAnalysis/系统三项目六.mp4",
+                "isdel": 0,
+                "title": "项目六 数据集描述统计信息(操作视频)"
+            }, {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E5%A4%A7%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E9%A1%B9%E7%9B%AE/%E9%A1%B9%E7%9B%AE7_%E7%90%86%E8%A7%A3%E6%95%B0%E6%8D%AE.pptx",
+                "isdel": 0,
+                "title": "项目七 理解数据"
+            }, {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/dataAnalysis/系统三项目七.mp4",
+                "isdel": 0,
+                "title": "项目七 理解数据(操作视频)"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E5%A4%A7%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E9%A1%B9%E7%9B%AE/%E9%A1%B9%E7%9B%AE%E5%85%AB%20%E6%A8%A1%E5%9E%8B%E6%9E%84%E5%BB%BA.pptx",
+                "isdel": 0,
+                "title": "项目八 模型构建"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/dataAnalysis/系统三项目八.mp4",
+                "isdel": 0,
+                "title": "项目八 模型构建(操作视频)"
+            }, {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E5%A4%A7%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E9%A1%B9%E7%9B%AE/%E8%BF%9B%E9%98%B63%E2%80%94%E2%80%94%E6%95%B0%E6%8D%AE%E6%B8%85%E6%B4%97--9.pptx",
+                "isdel": 0,
+                "title": "项目九 数据清洗"
+            }, {
+                "id": 4,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/dataAnalysis/系统三项目九.mp4",
+                "isdel": 0,
+                "title": "项目九 数据清洗(操作视频)"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/ppt/%E5%A4%A7%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E9%A1%B9%E7%9B%AE/%E9%A1%B9%E7%9B%AE%E5%8D%81%20%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%A7%86%E5%8C%96.pptx",
+                "isdel": 0,
+                "title": "项目十 数据可视化"
+            }, {
+                "id": 9,
+                "links": "https://huoran.oss-cn-shenzhen.aliyuncs.com/video/dataAnalysis/系统三项目十.mp4",
+                "isdel": 0,
+                "title": "项目十 数据可视化(操作视频)"
+            }],
+            evaluationVisible: false,
+            resultVisible: false,
+            detailVisible: false,
+            lastOne: false,
+            question: {
+                options: {}
+            },
+            countdown: '',
+            selected: '',
+            result: {},
+            detail: {},
+            timer: null,
+            totalScore: 0,
+            detailData: [],
+            isDone: false,
+            history: [],
+            btnType: 1,
+            
+            coverUrl: '',
+            playAuth: '',
+            player: null,
+            previewImg: '',
+            iframeSrc: '',
+            isWord: false,
+            isPPT: false,
+            isExcel: false,
+            showMask: false,
+            showMask1: false,
+            showMask2: false,
+            closePosi: {
+                top: '80px'
+            },
+            pdfVisible: false,
+            pdfSrc: '',
+        };
+    },
+    computed: {
+        ...mapState('user', [
+            'studentId','userId'
+        ]),
+    },
+    watch: {
+        question: {
+            handler(newVal,oldVal) {
+                for(let n in newVal.options) {
+                    if(newVal.options[n] == '') delete(newVal.options[n])
+                }
+            },
+            deep: true
+        }
+    },
+    mounted() {
+        this.insertScript()
+        // this.getData()
+        this.preview(this.videoList1[0])
+        this.$once('hook:beforeDestroy', function () {
+            clearInterval(this.timer)
+            this.timer = null
+        })
+    },
+    methods: {
+        // async getData(){
+        //     let res = await this.$get(this.api.getCoursevideo, { 
+        //         page: 1,
+        //         size: 10
+        //     })
+        //     this.videoList = res.data.list
+        // },
+        async toEvaluation(type,btn) {
+            clearInterval(this.timer)
+            this.lastOne = false
+            this.selected = ''
+            this.resultVisible = false
+            this.history = []
+            if(btn) this.btnType = btn
+            if(type){
+                let res = null
+                if(btn == 2){
+                    res = await this.$get(this.api.openExercise, { userId: this.userId })
+                }else{
+                    res = await this.$get(this.api.openTeaching, { userId: this.userId })
+                }
+                if(res.errmessage == 'true'){
+                    if(btn == 2){
+                        this.goSubSystem()
+                    }
+                    if(btn == 3){
+                        this.$router.push('/project')
+                    }
+                }else{
+                    this.$alert('请先完成能力测评并达到60分以上才可以进行实验', '提示', {
+                        confirmButtonText: '进入测评',
+                        callback: action => {
+                            action == 'confirm' && this.toEvaluation(0)
+                        }
+                    });
+                }
+            }else{
+                this.start()
+                this.getCountdown()
+            }
+        },
+        handleQues() {
+            this.question.options = {}
+            for(let n in this.question) {
+                if(n.includes('option') && n != 'options') {
+                    this.question.options[n.replace('option','')] = this.question[n]
+                }
+            }
+            if(this.question.currentQuestionSortNo == this.question.totalQuestionNum){
+                this.lastOne = true
+            }else{
+                this.lastOne = false
+            }
+        },
+        async start() {
+            let res = await this.$get(this.api.experimentStart, { userId: this.userId,types: this.btnType })
+            if(res.data){
+                this.question = res.data
+                this.isDone = false
+                this.question.currentQuestionSortNo == 1 && this.$store.commit("answerHistoryData", { answerHistory : []})
+                this.handleQues()
+                this.evaluationVisible = true
+            }else{
+                util.warningMsg(res.message)
+            }
+        },
+        async getCountdown() {
+            let res = await this.$get(this.api.experimentRemaining, { userId: this.userId })
+            res.data && this.countDown(res.data)
+            // this.countDown('00:00:05')
+        },
+        countDown(time) {
+            this.countdown = time
+            this.timer = setInterval(() => {
+                let timeList = this.countdown.split(':')
+                let total = Number.parseInt(timeList[1] * 60) + Number.parseInt(timeList[2])
+                if(total > 0){
+                    --total
+                    let minutes = Math.floor(total / 60)
+                    let seconds = Math.floor(total % 60)
+                    this.countdown = `00:${util.formateTime(minutes)}:${util.formateTime(seconds)}`
+                }else{
+                    this.isDone = true
+                    util.warningMsg('测评时间结束');
+                    clearInterval(this.timer)
+                    this.prevQues()
+                }
+            },1000)
+        },
+        selectOption(option) {
+            if(!this.isDone) {
+                if(this.selected.includes(option)) {
+                    this.selected = this.selected.replace(option,'')
+                }else{
+                    if(this.question.questionType == 2) {
+                        this.selected += option
+                    }else{
+                        this.selected = option
+                    }
+                }
+            }
+        },
+        getHistory() {
+            this.history = this.$store.state.answerHistory
+        },
+        async nextQues() {
+            if(!this.selected) return util.warningMsg('请选择答案')
+            this.getHistory()
+            if(this.history.length > this.question.currentQuestionSortNo){
+                this.history[this.question.currentQuestionSortNo-1] = this.selected
+            }else if(this.history.length < this.question.currentQuestionSortNo){
+                this.history.push(this.selected)
+            }
+            this.$store.commit("answerHistoryData", { answerHistory : this.history})
+            let res = await this.$post(this.api.experimentNext, { 
+                id: this.question.id,
+                currentQuestionSortNo: this.question.currentQuestionSortNo,
+                // userAnswer: this.selected.split('').sort().join(',')
+                userAnswer: this.selected
+            })
+            if(res.data){
+                this.question = res.data
+                this.selected = ''
+                if(this.history.length >= this.question.currentQuestionSortNo){
+                    this.selected = this.history[this.question.currentQuestionSortNo-1]
+                }else{
+                    this.selected = ''
+                }
+                this.handleQues()
+            }
+        },
+        async prevQues() {
+            if(this.question.currentQuestionSortNo > 1){
+                this.getHistory()
+                let res = await this.$post(this.api.experimentPrevious, { 
+                    id: this.question.id,
+                    currentQuestionSortNo: this.question.currentQuestionSortNo,
+                    // userAnswer: this.selected.split('').sort().join(',')
+                    userAnswer: this.selected
+                })
+                if(res.data){
+                    this.question = res.data
+                    this.selected = this.history[this.question.currentQuestionSortNo-1]
+                    this.isDone ? this.submitQues() : this.handleQues()
+                }
+            }else if(this.isDone){
+                if(!this.selected) this.selected = 'A'
+                this.submitQues()
+            }
+        },
+        async submitQues() {
+            if(!this.selected) return util.warningMsg('请选择答案');
+            let res = await this.$post(this.api.experimentSubmit, { 
+                id: this.question.id,
+                currentQuestionSortNo: this.question.currentQuestionSortNo,
+                // userAnswer: this.selected.split('').sort().join(','),
+                userAnswer: this.selected,
+                userId: this.userId,
+                types: this.btnType
+            })
+            if(res.data) {
+                this.result = res.data
+                this.evaluationVisible = false
+                this.resultVisible = true
+            }
+        },
+        async getDetail() {
+            let res = await this.$get(this.api.experimentDetail, { 
+                evaluationRecordId: this.question.id
+            })
+            if(res.data){
+                this.totalScore = res.data.totalScore
+                this.detailData = res.data.evaluationDetailVOS
+                this.resultVisible = false
+                this.detailVisible = true
+            }
+        },
+        systemChange(){
+            this.videoSrc = ''
+            this.preview(this[`videoList${this.systemId}`][0])
+        },
+        preview(row){
+            let url = row.links
+            this.videoSrc = ''
+            this.coverUrl = ''
+            this.pdfSrc = ''
+            this.iframeSrc = ''
+            this.curLink = row.title
+            let ext = util.getFileExt(url)
+            if(util.isVideo(ext)){
+                this.videoSrc = url
+            }else if(ext == 'pdf'){
+                this.pdfSrc = url
+                this.pdfVisible = true
+            }else if(util.isImg(ext)){
+                window.open(url)
+            }else if(util.isDoc(ext)){
+                if(ext == 'pptx'){
+                    this.isPPT = true
+                    this.isWord = false
+                    this.isExcel = false
+                }else if(ext == 'doc' || ext == 'docx'){
+                    this.isPPT = false
+                    this.isWord = true
+                    this.isExcel = false
+                }else if(ext == 'xls' || ext == 'xlsx'){
+                    this.isExcel = true
+                    this.isPPT = false
+                    this.isWord = false
+                }else{
+                    this.isPPT = false
+                    this.isWord = false
+                    this.isExcel = false
+                }
+                if(this.isPPT){
+                    this.showMask = true
+                }else{
+                    this.showMask = false
+                }
+                if(this.isWord){
+                    this.showMask1 = true
+                }else{
+                    this.showMask1 = false
+                }
+                if(this.isExcel){
+                    this.showMask2 = true
+                }else{
+                    this.showMask2 = false
+                }
+                this.iframeSrc = `https://view.officeapps.live.com/op/view.aspx?src=${url}`
+            }
+        },
+        closeIframe(){
+            this.iframeSrc = ''
+            this.showMask = false
+            this.showMask1 = false
+            this.showMask2 = false
+            this.curLink = ''
+        },
+        insertScript(){
+            const linkTag = document.createElement('link')
+            linkTag.id = 'aliplayerLink'
+            linkTag.rel = 'stylesheet'
+            linkTag.href = 'https://g.alicdn.com/de/prismplayer/2.8.2/skins/default/aliplayer-min.css'
+            document.body.appendChild(linkTag)
+
+            const scriptTag = document.createElement('script')
+            scriptTag.id = 'aliplayerScript'
+            scriptTag.type = 'text/javascript'
+            scriptTag.src = 'https://g.alicdn.com/de/prismplayer/2.8.2/aliplayer-min.js'
+            document.body.appendChild(scriptTag)
+            this.$once('hook:beforeDestroy', function () {
+                document.body.removeChild(document.querySelector('#aliplayerLink'))
+                document.body.removeChild(document.querySelector('#aliplayerScript'))
+            })
+        },
+        goSubSystem(){
+            util.cookies.set("assessmentId",'',-1)
+            util.cookies.set("studentId",this.studentId)
+            util.cookies.set("projectId",'',-1)
+            util.cookies.set("startTime",'',-1)
+            util.cookies.set("stopTime",'',-1)
+            location.href = this.$config.subSystem
+        },
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+.video_wid{
+    width: 100%;
+    height: 650px;
+    border: 0;
+}
+.video_wid:focus{
+    outline: none;
+}
+.title_view{
+    background-color: #2F3236;
+    padding: 12px 10px;
+}
+h3{
+    color: #9076FF;
+    margin-bottom: 10px;
+}
+.catalog .title_view .el-button{
+    padding: 8px 20px;
+}
+.btns{
+    display: flex;
+    justify-content: space-between;
+}
+.btns .el-button{
+    flex: 1;
+    height: 90px;
+    font-size: 30px;
+    background: transparent url(../../../assets/img/ques1.png) 0 0/100% 100% no-repeat;
+    border: 0;
+}
+.list_he{
+    height: 500px;
+    overflow-y: auto;
+    padding: 20px 12px;
+    background: #3f4449;
+}
+.list_he ul{
+    padding: 20px 0;
+}
+.list_he ul li:first-child{
+    margin-top: 0;
+}
+.list_he ul li{
+    margin-top: 10px;
+    font-size: 14px;
+}
+.list_title{
+    color: #9278FF;
+    font-size: 20px;
+    margin-left: 12px;
+}
+.list_catalog{
+    padding: 0 8px;
+    font-size: 14px;
+    margin-top: 15px;
+    cursor: pointer;
+}
+.mar0{
+    margin-top: 0;
+}
+.list_catalog .catalog_button .el-button{
+    background-color: #2F3236;
+    border:1px solid rgba(144,118,255,1);
+    color: #9278FF;
+    padding: 6px 8px;
+}
+.experimental_title{
+    color: #fff;
+    word-wrap: break-word;
+    &.active{
+        color: #9278FF;
+    }
+}
+.experimental_status{
+    margin-right: 10px;
+    color: #7A7A7A;
+}
+.curriculum_name{
+    color: #fff;
+}
+.curriculum_name i{
+    margin-left: 5px;
+    margin-right: 5px;
+}
+.curriculum_status{
+    color: #7A7A7A;
+}
+/deep/.evaluation_dialog{
+    min-height: 700px;
+    background: url(../../../assets/img/evaluation_bg1.png) 0 0/100% 100% no-repeat;
+}
+/deep/.evaluation_dialog .el-dialog__headerbtn,/deep/.evaluation_dialog .el-dialog__headerbtn,/deep/.detail_dialog .el-dialog__headerbtn{
+    font-size: 28px;
+}
+/deep/.evaluation_dialog .title,/deep/.detail_dialog .title{
+    margin-bottom: 45px;
+    text-align: center;
+    font-size: 24px
+}
+/deep/.evaluation_dialog .title{
+    margin-bottom: 55px;
+}
+/deep/.evaluation_dialog .serial{
+    font-size: 12px;
+    text-align: center;
+}
+/deep/.evaluation_dialog .ques-wrap{
+    width: 80%;
+    margin: 0 auto;
+}
+/deep/.evaluation_dialog .type{
+    color: #666;
+}
+/deep/.evaluation_dialog .ques{
+    margin: 20px 0;
+    min-height: 145px;
+    color: #666;
+    font-size: 16px;
+}
+/deep/.evaluation_dialog .countdown{
+    margin-bottom: 20px;
+    justify-content: center;
+    text-align: center;
+    color: #DC3434;
+    font-size: 14px;
+}
+/deep/.evaluation_dialog .countdown img{
+    width: 15px !important;
+    margin-right: 10px;
+}
+/deep/.evaluation_dialog .options{
+    display: flex;
+    flex-direction: column;
+    min-height: 340px;
+}
+/deep/.evaluation_dialog .options.isDone{
+    min-height: 395px;
+}
+/deep/.evaluation_dialog .options li{
+    padding: 0 15px;
+    margin-bottom: 15px;
+    line-height: 40px;
+    border: 1px solid #9070FF;
+    border-radius: 20px;
+    color: #666;
+    cursor: pointer;
+}
+/deep/.evaluation_dialog .options li:hover{
+    color: #fff;
+    background-color: #b038bb;
+    border-color: #b038bb;
+}
+/deep/.evaluation_dialog .options li.active{
+    color: #fff;
+    background-color: #916CFF;
+    border-color: #916CFF;
+}
+/deep/.evaluation_dialog .options em{
+    margin-right: 10px;
+    font-weight: bold;
+    font-style: normal;
+    font-size: 16px;
+}
+/deep/.evaluation_dialog .options span{
+    font-size: 16px;
+}
+/deep/.evaluation_dialog .el-dialog__footer{
+    text-align: center;
+}
+/deep/.evaluation_dialog .first,/deep/.result_dialog .first{
+    color: #fff;
+    background-color: #9268FF;
+    border-color: #9268FF;
+}
+/deep/.evaluation_dialog .second,/deep/.result_dialog .second{
+    color: #fff;
+    background-color: #E371DA;
+    border-color: #E371DA;
+}
+
+/deep/.result_dialog{
+    min-height: 500px;
+    background: url(../../../assets/img/evaluation_bg2.png) 0 0/100% 100% no-repeat;
+}
+/deep/.result_dialog .el-dialog__headerbtn .el-dialog__close{
+    color: #5a5a5a;
+    font-size: 28px;
+}
+/deep/.result_dialog .result{
+    margin-top: 60px;
+    text-align: center;
+    color: #fff;
+    font-size: 24px;
+}
+/deep/.result_dialog .point{
+    margin: 30px 0 20px;
+    text-align: center;
+    font-size: 30px;
+    color: #666;
+}
+/deep/.result_dialog .point span{
+    font-size: 120px;
+    font-weight: bold;
+}
+/deep/.result_dialog .tips{
+    color: #666;
+    text-align: center;
+    font-size: 14px;
+}
+/deep/.result_dialog .third{
+    color: #fff;
+    background-color: #418cf5;
+    border-color: #418cf5;
+}
+
+/deep/.detail_dialog{
+    background: url(../../../assets/img/evaluation_bg3.png) 0 0/100% 100% no-repeat;
+}
+/deep/.detail_dialog .title{
+    margin-top: -20px;
+}
+/deep/.detail_dialog .el-table__header th:nth-last-child(2){
+    text-align: center;
+}
+/deep/.detail_dialog .total{
+    margin-top: 20px;
+    text-align: center;
+    font-size: 30px;
+    color: #DC3434;
+}
+/deep/.evaluation_dialog{
+    margin:0 !important;
+    position:absolute;
+    top:50%;
+    left:50%;
+    transform:translate(-50%,-50%);
+    max-height:calc(100% - 30px);
+    max-width:calc(100% - 30px);
+}
+/deep/.evaluation_dialog .el-dialog__body{
+    flex:1;
+    overflow: auto;
+}
+
+.mask{
+    z-index: 9;
+    position: absolute;
+    background-color: rgb(57,58,61);
+}
+.word-mask{
+    z-index: 9;
+    position: absolute;
+    top: 0;
+    right: 0;
+    width: 100%;
+    background-color: rgb(243,242,241);
+}
+.word-mask1{
+    z-index: 9;
+    position: absolute;
+    top: 0;
+    right: 0;
+    width: 100%;
+    background-color: #185abd;
+}
+.word-mask2{
+    z-index: 9;
+    position: absolute;
+    background-color: transparent;
+}
+.excel-mask1{
+    z-index: 9;
+    position: absolute;
+    top: 0;
+    left: 20%;
+    width: 60%;
+    background-color: #107c41;
+}
+$height: 650px;
+.cover{
+    position: relative;
+    height: $height;
+    border: 0;
+    .fileIframe{
+        width: 100%;
+        height: $height !important;
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/pages/record/list/ass.vue b/src/pages/record/list/ass.vue
new file mode 100644
index 0000000..3187841
--- /dev/null
+++ b/src/pages/record/list/ass.vue
@@ -0,0 +1,97 @@
+<template>
+    <div>
+        <el-table
+            :cell-style="tableRowStyle"
+            :header-cell-style="{background:'#9278FF',color:'#FFFFFF'}"
+            :data="listData"
+            stripe
+        >
+            <el-table-column prop="id" label="次序" width="120" align="center" type="index"></el-table-column>
+            <el-table-column prop="experimentalName" label="考核名称" align="center"></el-table-column>
+            <el-table-column prop="experimentalClassName" label="班级" align="center"></el-table-column>
+            <el-table-column prop="projectName" label="实验项目名称" align="center"></el-table-column>
+            <el-table-column prop="score" label="得分" align="center"></el-table-column>
+            <el-table-column prop="timeSum" label="耗时" align="center">
+                <template slot-scope="scope">
+                    {{scope.row.timeSum}}分
+                </template>
+            </el-table-column>
+            <el-table-column prop="startTime" label="起始时间" align="center"></el-table-column>
+            <el-table-column prop="endTime" label="结束时间" align="center"></el-table-column>
+            <el-table-column label="操作" align="center">
+                <template slot-scope="scope">
+                    <el-button type="text" @click="toReport(scope.row)">实验成绩报告</el-button>
+                </template>
+            </el-table-column>
+        </el-table>
+        <div class="pagination">
+            <el-pagination background :current-page="page" layout="total, prev, pager, next" :total="total" @current-change="handleCurrentChange"></el-pagination>
+        </div>
+    </div>
+</template>
+
+<script>
+import { mapState, mapActions } from 'vuex'
+import util from '@/libs/util'
+import Setting from '@/setting'
+export default {
+    props: ['systemId'],
+    data() {
+        return {
+            listData: [],
+            page: 1,
+            pageSize: 10,
+            total: 0,
+        };
+    },
+    computed: {
+        ...mapState('user', [
+            'userId'
+        ]),
+    },
+    mounted() {
+        this.getData()
+    },
+    methods: {
+        ...mapActions('project', [
+            'setSystemId'
+        ]),
+        tableRowStyle({ row, column, rowIndex, columnIndex }) {
+            if (rowIndex % 2 === 0) {
+                return 'background-color: #FFF'
+            } else {
+                return 'background-color: #F5F2FF'
+            }
+        },
+        handleCurrentChange(val) {
+            this.page = val
+            this.getData()
+        },
+        getData() {
+            this.$get(this.api.experimentRecord, { 
+                userid: this.userId,
+                page: this.page,
+                size: this.pageSize,
+                systemId: this.systemId
+             })
+            .then(res => {
+                let data = res.data
+                this.listData = data.list
+                this.total = data.totalCount
+            })
+            .catch(err => {})
+        },
+        exportData() {
+            location.href = `${this.api.exportProjectRecord}?userId=${this.userId}`
+        },
+        toReport(row) {
+            this.setSystemId(this.systemId)
+            this.$router.push(`show?id=${row.id}&recordId=${row.recordid}&reportId=${row.reportId}`)
+        }
+    }
+};
+</script>
+
+<style lang="scss" scopted>
+    
+</style>
\ No newline at end of file
diff --git a/src/pages/record/list/index.vue b/src/pages/record/list/index.vue
new file mode 100644
index 0000000..8355a97
--- /dev/null
+++ b/src/pages/record/list/index.vue
@@ -0,0 +1,188 @@
+<template>
+    <div>
+        <el-card shadow="hover" class="m-b-20">
+            <div class="overview">
+                <h6>实验概览</h6>
+                <div class="nums">
+                    <div class="item">
+                        <p class="name">姓名</p>
+                        <p class="val">{{overview.userName}}</p>
+                    </div>
+
+                    <div class="item">
+                        <p class="name">实验次数</p>
+                        <p class="val">{{overview.experimentNumber}}</p>
+                    </div>
+
+                    <div class="item">
+                        <p class="name">实验总时长</p>
+                        <p class="val">{{overview.totalTime ? overview.totalTime : 0}}小时</p>
+                    </div>
+
+                    <div class="item"> 
+                        <p class="name">实验平均分</p>
+                        <p class="val">{{overview.avgScore ? overview.avgScore.toFixed(2) : overview.avgScore}}</p>
+                    </div>
+                </div>
+            </div>
+        </el-card>
+
+        <div class="page">
+            <div class="tabs">
+                <a class="item" v-for="(item,index) in tabList" :key="index" :class="{active: index == active}" @click="tabChange(index)">{{item}}</a>
+            </div>
+
+            <div class="tool" style="align-items: center">
+                <p style="font-size: 16px">实验记录明细</p>
+                <ul class="filter" style="flex: 0 1 auto;">
+                    <li style="margin-right: 0">
+                        <label>系统</label>
+                        <el-select size="small" v-model="systemId" placeholder="请选择系统">
+                            <el-option v-for="item in systemList" :key="item.value" :label="item.label" :value="item.id"></el-option>
+                        </el-select>
+                        <el-button style="margin-left: 10px;" size="small" round type="primary" @click="exportData">导出</el-button>
+                    </li>
+                </ul>
+            </div>
+
+            <practice v-if="active == 'practice'" :systemId.sync="systemId" :key="systemId"></practice>
+            <ass v-else :systemId.sync="systemId" :key="systemId"></ass>
+        </div>
+    </div>
+</template>
+
+<script>
+import { mapState, mapActions } from 'vuex'
+import util from '@/libs/util'
+import Setting from '@/setting'
+import practice from './practice'
+import ass from './ass'
+export default {
+    data() {
+        return {
+            systemId: 1,
+            systemList: Setting.systemList,
+            overview: {},
+            active: 'practice',
+            tabList: {
+                practice: '练习',
+                ass: '考核'
+            }
+        };
+    },
+    computed: {
+        ...mapState('user', [
+            'userId'
+        ]),
+        ...mapState('project', [
+            'lastRecordType','lastSystemId'
+        ]),
+    },
+    mounted() {
+        this.systemId = this.lastSystemId ? this.lastSystemId : Setting.systemId
+        this.active = this.lastRecordType ? this.lastRecordType : 'practice'
+        this.getData()
+    },
+    methods: {
+        ...mapActions('user', [
+            'setRecord'
+        ]),
+        getData() {
+            this.$get(`${this.api.fictitiousScore}/${this.userId}`).then(res => {
+                this.overview = res.data
+            }).catch(err => {})
+        },
+        exportData() {
+            if(this.active == 'practice'){
+                location.href = `${this.api.exportProjectRecord}?userId=${this.userId}`
+            }else{
+                location.href = `${this.api.exportExperimentProjectRecord}?userId=${this.userId}`
+            }
+        },
+        tabChange(index){
+            this.active = index
+            this.setRecord(this.actice)
+        },
+    },
+    components: {
+        practice,
+        ass
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+    .tabs{
+        display: flex;
+        align-items: center;
+        padding: 20px 0 0;
+        margin-bottom: 10px;
+        background-color: #fff;
+        .item{
+            padding: 12px 20px;
+            margin-right: 10px;
+            color:#606266;
+            line-height: 1;
+            border-radius: 4px;
+            background-color: #fff;
+            border: 1px solid #dcdfe6;
+            cursor: pointer;
+
+            &.active{
+                color: #fff;
+                background-color: #9278ff;
+                border-color: #9278ff;
+            }
+        }
+    }
+    .overview {
+        padding: 20px;
+        margin-top: 20px;
+        background: rgba(255, 255, 255, 1);
+        box-shadow: 0px 0px 21px 0px rgba(48, 115, 248, 0.1);
+        border-radius: 10px;
+        h6{
+            margin-bottom: 10px;
+            font-size: 16px;
+            font-weight: 400;
+        }
+        .nums {
+            display: flex;
+            justify-content: space-between;
+            .item:nth-child(1) {
+                background-image: url('../../../assets/img/student1.png');
+                box-shadow: 0px 25px 20px -22px #ec92e0;
+            }
+            .item:nth-child(2) {
+                background-image: url('../../../assets/img/student2.png');
+                box-shadow: 0px 25px 20px -22px #60b8f6;
+            }
+            .item:nth-child(3) {
+                background-image: url('../../../assets/img/student3.png');
+                box-shadow: 0px 25px 20px -22px #fe787a;
+            }
+            .item:nth-child(4) {
+                background-image: url('../../../assets/img/student4.png');
+                box-shadow: 0px 25px 20px -22px #fbbb6e;
+            }
+
+            .item {
+                width: 24%;
+                padding: 20px 30px;
+                box-shadow: 0px 3px 18px 0px rgba(84, 84, 84, 0.09);
+                border-radius: 8px;
+                background-size: 100% 100%;
+                background-repeat: no-repeat;
+                .name {
+                    font-size: 18px;
+                    color: #ffffff;
+                }
+                .val{
+                    margin-top: 10px;
+                    color: #ffffff;
+                    font-size: 30px;
+                }
+            }
+        }
+    }
+</style>
\ No newline at end of file
diff --git a/src/pages/record/list/practice.vue b/src/pages/record/list/practice.vue
new file mode 100644
index 0000000..5ddfa84
--- /dev/null
+++ b/src/pages/record/list/practice.vue
@@ -0,0 +1,91 @@
+<template>
+    <div>
+        <el-table :cell-style="tableRowStyle" :header-cell-style="{background:'#9278FF',color:'#FFFFFF'}" :data="listData" stripe>
+            <el-table-column prop="id" label="次序" width="120" align="center" type="index"></el-table-column>
+            <el-table-column prop="projectName" label="实验项目名称" align="center"></el-table-column>
+            <el-table-column prop="score" label="得分" align="center"></el-table-column>
+            <el-table-column prop="timeSum" label="耗时" align="center">
+                <template slot-scope="scope">
+                    {{scope.row.timeSum}}分
+                </template>
+            </el-table-column>
+            <el-table-column prop="startingTime" label="起始时间" align="center"></el-table-column>
+            <el-table-column prop="submitTime" label="结束时间" align="center"></el-table-column>
+            <el-table-column prop="creationTime" label="操作" align="center">
+                <template slot-scope="scope">
+                    <el-button type="text" @click="toReport(scope.row)">实验报告</el-button>
+                </template>
+            </el-table-column>
+        </el-table>
+        <div class="pagination">
+            <el-pagination background :current-page="page" layout="total, prev, pager, next" :total="total" @current-change="handleCurrentChange"></el-pagination>
+        </div>
+    </div>
+</template>
+
+<script>
+import { mapState, mapActions } from 'vuex'
+import util from '@/libs/util'
+import Setting from '@/setting'
+export default {
+    props: ['systemId'],
+    data() {
+        return {
+            listData: [],
+            page: 1,
+            pageSize: 10,
+            total: 0
+        };
+    },
+    computed: {
+        ...mapState('user', [
+            'userId'
+        ]),
+    },
+    mounted() {
+        this.getData()
+    },
+    methods: {
+        ...mapActions('project', [
+            'setSystemId'
+        ]),
+        tableRowStyle({ row, column, rowIndex, columnIndex }) {
+            if (rowIndex % 2 === 0) {
+                return 'background-color: #FFF'
+            } else {
+                return 'background-color: #F5F2FF'
+            }
+        },
+        handleCurrentChange(val) {
+            this.page = val
+            this.getData()
+        },
+        getData() {
+            this.$get(this.api.fictitiousRecord, { 
+                userId: this.userId,
+                page: this.page,
+                size: this.pageSize,
+                projectPermissions: 0,
+                systemId: this.systemId
+             })
+            .then(res => {
+                let data = res.data
+                this.listData = data.list
+                this.total = data.totalCount
+            })
+            .catch(err => {})
+        },
+        exportData() {
+            location.href = `${this.api.exportProjectRecord}?userId=${this.userId}`
+        },
+        toReport(row) {
+            this.setSystemId(this.systemId)
+            this.$router.push(`show?id=${row.recordId}&reportId=${row.reportId}&type=1`)
+        }
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+    
+</style>
\ No newline at end of file
diff --git a/src/pages/record/show/index.vue b/src/pages/record/show/index.vue
new file mode 100644
index 0000000..e4384ec
--- /dev/null
+++ b/src/pages/record/show/index.vue
@@ -0,0 +1,488 @@
+<template>
+    <div class="box">
+        <div class="exp-header">
+            <div class="flex-between">
+                <el-page-header @back="goBack" content="查看报告"></el-page-header>
+                <div>
+                    <el-button type="primary" size="mini" @click="exportPage">导出实验报告</el-button>
+                </div>
+            </div>
+        </div>
+        <div class="report-wrap" :class="{loading}" id="pdfDom">
+            <div style="position: relative;">
+                <h6 style="text-align: center;font-size: 20px">标准实验报告</h6>
+                <el-button v-if="!loading" style="position: absolute;top: 0;right: 0;" size="mini" @click="editReport">{{editing ? '保存' : '编辑'}}</el-button>
+            </div>
+            
+            <div class="flex-center m-b-20 user_header">
+                <p class="addhr_tag"></p>
+                <span style="font-size: 18px">基本信息</span>
+            </div>
+
+            <div>
+                <el-table :data="infoData" class="info-table" stripe header-align="center">
+                    <el-table-column prop="userName" label="学生姓名" align="center">
+                    </el-table-column>
+                    <el-table-column prop="workNumber" label="学生学号" align="center">
+                    </el-table-column>
+                    <el-table-column prop="experimentalClassName" label="学生班级" align="center">
+                        <template slot-scope="scope">
+                            <template v-if="editing">
+                                <el-input v-model="form.experimentalClassName"></el-input>
+                            </template>
+                            <template v-else>{{form.experimentalClassName}}</template>
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="instructor" label="指导老师" align="center">
+                        <template slot-scope="scope">
+                            <template v-if="editing">
+                                <el-input v-model="form.instructor"></el-input>
+                            </template>
+                            <template v-else>{{form.instructor}}</template>
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="period" label="实验学时" align="center">
+                        <template slot-scope="scope">
+                            <template v-if="editing">
+                                <el-input v-model="form.period"></el-input>
+                            </template>
+                            <template v-else>{{form.period}}</template>
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="submitTime" label="实验时间" align="center"></el-table-column>
+                    <el-table-column prop="score" label="实验成绩" align="center">
+                    </el-table-column>
+                </el-table>
+            </div>
+
+            <div class="m-b-20">
+                <div class="meta-title-wrap">
+                    <p class="meta-title"><img src="@/assets/img/cup.png" alt=""> 实验项目名称</p>
+                </div>
+                <el-input v-model="form.proName" type="textarea" :disabled="!editing" rows="5"></el-input>
+            </div>
+
+            <div class="m-b-20">
+                <div class="meta-title-wrap">
+                    <p class="meta-title">实验目的</p>
+                </div>
+                <div class="pre-wrap" v-html="form.purpose"></div>
+                <!-- <el-input v-model="form.purpose" type="textarea" :disabled="!editing" rows="5"></el-input> -->
+            </div>
+
+            <div class="m-b-20">
+                <div class="meta-title-wrap">
+                    <p class="meta-title">实验数据</p>
+                </div>
+                <el-table :data="expData" class="table" stripe header-align="center">
+                    <el-table-column type="index" width="100" label="序号" align="center">
+                        <template slot-scope="scope">
+                            {{scope.$index + 1}}
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="judgmentPointsName" label="任务名称" align="center">
+                    </el-table-column>
+                    <el-table-column prop="userAnswer" label="学生答案">
+                        <template slot-scope="scope">
+                            <pre v-html="scope.row.userAnswer" style="white-space: pre-wrap"></pre>
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="answer" label="参考答案">
+                        <template slot-scope="scope">
+                            <pre v-html="scope.row.answer" style="white-space: pre-wrap"></pre>
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="codeScore" label="得分" align="center"></el-table-column>
+                </el-table>
+            </div>
+
+            <div class="m-b-20">
+                <div class="meta-title-wrap">
+                    <p class="meta-title">实验总结与体会</p>
+                </div>
+                <el-input type="textarea" v-model="form.summarize" rows="5" :disabled="!editing"></el-input>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script>
+    import { Loading } from 'element-ui'
+    import html2Canvas from 'html2canvas'
+    import JsPDF from 'jspdf'
+    import { mapState, mapActions } from 'vuex'
+    import util from '@/libs/util'
+    import Setting from '@/setting'
+    export default {
+        data (){
+            return {
+                title: '实验报告',
+                form: {
+                    analysis: '',
+                    conclusion: '',
+                    content: ``,
+                    data: '',
+                    purpose: ``,
+                    experimentId: '',
+                    experimentalClassName: '',
+                    improvement: '',
+                    laboratory: '',
+                    period: '',
+                    principle: ``,
+                    proName: '',
+                    score: 0,
+                    step: ``,
+                    submitTime: '',
+                    summarize: '',
+                    instructor: '',
+                    userId: this.userId,
+                    userName: '',
+                    workNumber: '',
+                },
+                type: this.$route.query.type,
+                id: this.$route.query.id,
+                recordId: this.$route.query.recordId,
+                reportId: this.$route.query.reportId,
+                infoData: [],
+                expData: [],
+                accountData: [],
+                showData: '1',
+                autograph: '1',
+                pages: 1,
+                ipVisible: false,
+                fileList: [{name: 'food.jpeg', url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'}, {name: 'food2.jpeg', url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'}],
+                conclusionOptions: [
+                    {
+                        value: 1,
+                        label: '结论符合预期'
+                    }
+                ],
+                editing: false,
+                loadIns: null,
+                loading: false
+            }
+        },
+        computed: {
+            ...mapState('user', [
+                'userId','studentId'
+            ]),
+        },
+        mounted(){
+            this.getData()
+        },
+        methods: {
+            getData(){
+                if(this.type){
+                    let data = {
+                        recordId: this.id,
+                    }
+                    this.$get(this.api.queryVirtualReport,data).then(res => {
+                        this.form = res.data.report
+                        let expData = res.data.data
+                        let form = this.form
+                        let score = form.score
+
+                        if(expData){
+                            if(score){
+                                expData.map(n => {
+                                    if(n.isError){
+                                        score -= n.codeScore
+                                        n.codeScore = 0
+                                    }
+                                })
+                                form.score = score
+                            }
+                            expData[0].answer = expData[0].answer.replace('<pre class="ql-syntax" spellcheck="false">','')
+                            expData[0].answer = expData[0].answer.replace('</pre>','')
+
+                            this.expData = expData
+                        }
+                        this.infoData.push({
+                            workNumber: form.workNumber,
+                            experimentalClassName: form.experimentalClassName,
+                            instructor: form.instructor,
+                            period: form.period,
+                            laboratory: form.laboratory,
+                            submitTime: form.submitTime,
+                            score: form.score,
+                            userName: form.userName
+                        })
+                    }).catch(res => {});
+                }else{
+                    let data = {
+                        studentId: this.studentId,
+                        projectId: this.id,
+                        recordId: this.recordId,
+                        reportId: this.reportId
+                    }
+                    this.$get(this.api.queryArchievement,data).then(res => {
+                        this.form = res.data.report ? res.data.report : {}
+                        let expData = res.data.data
+                        let form = this.form
+                        let score = form.score
+
+                        if(expData){
+                            if(score){
+                                expData.map(n => {
+                                    if(n.isError){
+                                        score -= n.codeScore
+                                        n.codeScore = 0
+                                    }
+                                })
+                                form.score = score
+                            }
+
+                            this.expData = expData
+                        }
+                        this.infoData.push({
+                            workNumber: form.workNumber,
+                            experimentalClassName: form.experimentalClassName,
+                            instructor: form.instructor,
+                            period: form.period,
+                            laboratory: form.laboratory,
+                            submitTime: form.submitTime,
+                            score: form.score,
+                            userName: form.userName
+                        })
+                    }).catch(res => {});
+                }
+            },
+            handleRemove(file, fileList) {
+                console.log(file, fileList);
+            },
+            handlePreview(file) {
+                console.log(file);
+            },
+            saveAdd(){
+                let data = {
+                    systemId: this.configId,
+                    systemName: this.form.systemName,
+                    systemType: this.form.systemType,
+                    systemAttribution: this.form.systemAttribution,
+                }
+                if(this.configId){
+                    this.$post(this.api.updateServiceConfig,data).then((res) => {
+                            util.successMsg('编辑成功');
+                            this.goBack()
+                        }).catch((res) => {
+                    })
+                }else{
+                    this.$post(this.api.updateServiceConfig,data).then((res) => {
+                            util.successMsg('添加成功');
+                            this.goBack()
+                        }).catch((res) => {
+                    })
+                }
+            },
+            handleRemove(file, fileList) {
+                console.log(file, fileList);
+            },
+            handlePictureCardPreview(file) {
+                this.dialogImageUrl = file.url;
+                this.dialogVisible = true;
+            },
+            SpanMethod({ row, column, rowIndex, columnIndex }) {
+                if (rowIndex % 2 === 0) {
+                    if (columnIndex === 6) {
+                        if(!row.Intranet){
+                            return [1, 2];
+                        }
+                    } 
+                    // else if (columnIndex === 1) {
+                    //     return [0, 0];
+                    // }
+                }
+            },
+            goBack(){
+                this.$router.go(-1)
+            },
+            exportPage(){
+                document.querySelector('body').setAttribute('style', 'overflow: visible')
+                this.loading = true
+                this.loadIns = Loading.service({
+                    background: 'rgba(255,255,255,.6)'
+                })
+                document.querySelector('#pdfDom').scrollTop = 0
+                var title = this.title;
+                let dom = document.querySelector('#pdfDom')
+                setTimeout(() => {
+                    html2Canvas(dom, {
+                        height: dom.scrollHeight,
+                        allowTaint: true,
+                    }).then((canvas) => {
+                        let contentWidth = canvas.width
+                        let contentHeight = canvas.height
+                        let pageHeight = contentWidth / 592.28 * 841.89
+                        let leftHeight = contentHeight
+                        let position = 0
+                        let imgWidth = 595.28
+                        let imgHeight = 592.28 / contentWidth * contentHeight
+                        let pageData = canvas.toDataURL('image/jpeg', 1.0)
+                        let PDF = new JsPDF('', 'pt', 'a4')
+                        if (leftHeight < pageHeight) {
+                            PDF.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight)
+                        } else {
+                            while (leftHeight > 0) {
+                                PDF.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight)
+                                leftHeight -= pageHeight
+                                position -= 841.89
+                                if (leftHeight > 0) {
+                                    PDF.addPage()
+                                }
+                            }
+                        }
+                        this.loadIns.close()
+                        this.loading = false
+                        document.querySelector('body').setAttribute('style', 'overflow: hidden')
+                        PDF.save(title + '.pdf')
+                    }
+                    )
+                },1000)
+            },
+            editReport(){
+                if(this.editing){
+                    let data = {
+                        period: this.form.period,
+                        proName: this.form.proName,
+                        purpose: this.form.purpose,
+                        summarize: this.form.summarize,
+                        instructor: this.form.instructor,
+                        reportId: Number(this.reportId),
+                        experimentalClassName: this.form.experimentalClassName
+                    }
+                    this.$post(`${this.api.modifyReport}`,data)
+                    .then(res => {
+                        this.editing = false
+                        util.successMsg('修改成功')
+                        console.log(11,this.form)
+                    }).catch(err => {})
+                }else{
+                    this.editing = true
+                }
+            }
+        }
+    }
+</script>
+
+<style lang="scss" scoped>
+    .box{
+        background-color: #fff;
+    }
+    .exp-header{
+        padding: 20px 100px;
+        box-shadow:0px 0px 25px 2px rgba(48,115,248,0.14);
+        z-index: 999;
+        margin-top: 2px;
+    }
+    /deep/.el-textarea.is-disabled .el-textarea__inner{
+        color: #777;
+        background-color: #e5dfff;
+    }
+    #pdfDom{
+        height: calc(100vh - 170px);
+        overflow: auto;
+        padding: 30px 100px;
+        box-sizing: border-box;
+        &.loading{
+            height: auto;
+            overflow: visible;
+        }
+        /deep/.info-table{
+            margin-bottom: 40px;
+            border: 0;
+            th{
+                background-color: #fff !important;
+                .cell{
+                    color: #444;
+                }
+            }
+            tr{
+                border: 0;
+            }
+            tr:hover,tr:hover>td{
+                background-color: #e5dfff !important;
+            }
+            td{
+                border: {
+                    left: 4px solid #fff;
+                    right: 4px solid #fff;
+                }
+                &:first-child{
+                    border-left: 0;
+                }
+                &:last-child{
+                    border-right: 0;
+                }
+                background-color: #e5dfff;
+                border-bottom: 0;
+            }
+        }
+        /deep/.table th{
+            background-color: #e1eaff !important;
+            .cell{
+                color: #555555;
+            }
+        }
+    }
+    .pre-wrap{
+        min-height: 117px;
+        padding: 5px 15px;
+        color: #777;
+        background-color: #e5dfff;
+    }
+    
+    /deep/.cell{
+        font-size: 12px;
+    }
+    // /deep/.el-row{
+    //     // padding-top: 20px;
+    //     margin: 0 !important;
+    // }
+    .form-item{
+        display: flex;
+        align-items: center;
+    }
+    .form-item .el-input{
+        width: auto;
+    }
+    .form-item span{
+        margin-right: 10px;
+    }
+    .meta-title-wrap{
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        span{
+            font-size: 13px;
+            color: #444;
+        }
+    }
+    .flex-between{
+        span{
+            font-size: 13px;
+            color: #444;
+        }
+    }
+    .meta-title{
+        display: flex;
+        align-items: center;
+        padding: 10px 20px;
+        margin-bottom: 10px;
+        font-size: 16px;
+        color: #fff;
+        background-color: #9278ff;
+        img{
+            width: 20px;
+            margin-right: 10px;
+        }
+    }
+    .step-title{
+        margin-bottom: 10px;
+        font-size: 16px;
+        color: #9278ff;
+    }
+    .bd-title{
+        padding-top: 20px;
+        border-top: 1px dashed #ccc;
+    }
+</style>
\ No newline at end of file
diff --git a/src/pages/setting/person/index.vue b/src/pages/setting/person/index.vue
new file mode 100644
index 0000000..09ce200
--- /dev/null
+++ b/src/pages/setting/person/index.vue
@@ -0,0 +1,1360 @@
+<template>
+    <div class="wrap">
+        <!-- 头像部分 -->
+        <div class="header">
+            <el-avatar :size="80" :src="this.avatar" class="Headtop"></el-avatar>
+            <div style="color:#9278FF;font-size:14px;font-family:MicrosoftYaHei;margin-top:5px;">
+                <el-upload
+                    class="upload-demo"
+                    :action="this.api.uploadUserAvatars"
+                    :data="{userId: this.userId}"
+                    name="file"
+                    :limit="3"
+                    :on-success="getRes"
+                >
+                    <div>点击更改头像</div>
+                </el-upload>
+            </div>
+        </div>
+
+        <!-- 用户信息 -->
+        <div class="card" style="margin-top: -65px">
+            <p class="block-title" style="display: flex;justify-content: space-between;align-items: center;">
+                <span><img src="@/assets/img/person/user.png" alt=""> 用户信息</span> 
+                <el-button type="primary" size="small" @click="save">更新资料</el-button>
+            </p>
+            <p class="meta-title">
+                <span>个人信息</span>
+            </p>
+            <div class="information">
+                <div class="line">
+                    <div class="item">
+                        <span>姓名</span>
+                        <input id="username" class="username" placeholder="请输入姓名" type="text" v-model="personalInformation.userName"/>
+                        <!-- <label for="username">
+                            <i class="el-icon-edit"></i>
+                        </label> -->
+                    </div>
+                    <div class="item">
+                        <span>所在国家</span>
+                        <el-select
+                            v-model="personalInformation.countries"
+                            placeholder
+                        >
+                            <el-option
+                                v-for="item in countryList"
+                                :key="item.value"
+                                :label="item.label"
+                                :value="item.value"
+                            ></el-option>
+                        </el-select>
+                    </div>
+                </div>
+                <div class="line">
+                    <div class="item">
+                        <span>性别</span>
+                        <div class="sexRadio">
+                            <el-radio v-model="personalInformation.sex" :label="1">男</el-radio>
+                            <el-radio v-model="personalInformation.sex" :label="2">女</el-radio>
+                        </div>
+                        <!-- <el-select
+                            v-model="personalInformation.sex"
+                            placeholder
+                        >
+                            <el-option
+                                v-for="item in sexList"
+                                :key="item.value"
+                                :label="item.name"
+                                :value="item.value"
+                            ></el-option>
+                        </el-select> -->
+                    </div>
+                    <div class="item">
+                        <span>所在地</span>
+                        <div class="selects">
+                            <el-select
+                                v-model="personalInformation.countries"
+                                placeholder
+                            >
+                                <el-option
+                                    v-for="item in countryList"
+                                    :key="item.value"
+                                    :label="item.label"
+                                    :value="item.value"
+                                ></el-option>
+                            </el-select>
+                            <el-select
+                                v-model="personalInformation.provinceId"
+                                placeholder
+                                @change="id => getCity(id,1)"
+                            >
+                                <el-option
+                                    v-for="item in provinceList"
+                                    :key="item.provinceId"
+                                    :label="item.provinceName"
+                                    :value="item.provinceId"
+                                ></el-option>
+                            </el-select>
+                            <el-select
+                                v-model="personalInformation.cityId"
+                                placeholder
+                                :disabled="personalInformation.provinceId ? false : true"
+                            >
+                                <el-option
+                                    v-for="item in cityList"
+                                    :key="item.cityId"
+                                    :label="item.cityName"
+                                    :value="item.cityId"
+                                ></el-option>
+                            </el-select>
+                        </div>
+                    </div>
+                </div>
+                <div class="line">
+                    <div class="item">
+                        <span>出生年月日</span>
+                        <el-date-picker
+                            v-model="personalInformation.dateBirth"
+                            :clearable="false"
+                            class="block-right"
+                            type="date">
+                        </el-date-picker>
+                    </div>
+                    <div class="item">
+                        <span>证件</span>
+                        <input onkeyup="value=value.replace(/[^\w\.\/]/ig,'')" id="idnumber" class="idnumber" placeholder="请输入证件" type="text" v-model="personalInformation.idNumber"/>
+                    </div>
+                </div>
+                <div class="line">
+                    <div class="item">
+                        <span>教育程度</span>
+                        <el-select
+                            v-model="personalInformation.educationDegree"
+                            placeholder="请选择教育程度"
+                        >
+                            <el-option
+                                v-for="(item,index) in educationDegreeList"
+                                :key="index"
+                                :label="item.name"
+                                :value="item.value"
+                            ></el-option>
+                        </el-select>
+                    </div>
+                    <div class="item">
+                        <span>当前所在学校</span>
+                        <input id="schoolName" class="school" disabled placeholder="所在学校" type="text" v-model="personalInformation.schoolName"/>
+                    </div>
+                </div>
+
+                <!-- 个人档案 -->
+                <p class="meta-title plus">
+                    <span>个人档案</span>
+                    <el-button type="text" icon="el-icon-plus" @click="addArch">新增</el-button>
+                </p>
+            </div>
+
+            <div class="information" style="margin-top: 20px;">
+                <div class="archives" v-for="(archive,index) in archivesList" :key="index" v-show="index == 0 || showArch">
+                    <div class="line">
+                        <div class="item">
+                            <span>职业</span>
+                            <el-select
+                                v-model="archive.personalCareerId"
+                                placeholder="选择职业"
+                            >
+                                <el-option
+                                    v-for="item in occupationList"
+                                    :key="item.value"
+                                    :label="item.label"
+                                    :value="item.value"
+                                ></el-option>
+                            </el-select>
+                        </div>
+                        <div class="item">
+                            <span>国家</span>
+                            <el-select
+                                v-model="personalInformation.countries"
+                                placeholder
+                            >
+                                <el-option
+                                    v-for="item in countryList"
+                                    :key="item.value"
+                                    :label="item.label"
+                                    :value="item.value"
+                                ></el-option>
+                            </el-select>
+                        </div>
+                    </div>
+                    <div class="line">
+                        <div class="item">
+                            <span>学校名称</span>
+                            <el-select
+                                v-model="archive.schoolId"
+                                filterable
+                                placeholder="选择学校"
+                                @change="id => getSchoolName(id,index)"
+                            >
+                                <el-option
+                                    v-for="item in schoolList"
+                                    :key="item.value"
+                                    :label="item.schoolName"
+                                    :value="item.schoolId"
+                                ></el-option>
+                            </el-select>
+                        </div>
+                        <div class="item">
+                            <span>专业学科</span>
+                            <el-select
+                                v-model="archive.disciplineId"
+                                placeholder="选择专业学科"
+                                @change="id => getItemProfessionalClass(id,index)"
+                                @clear="() => clearItemClass(index)"
+                            >
+                                <el-option
+                                    v-for="item in subjectList"
+                                    :key="item.value"
+                                    :label="item.disciplineName"
+                                    :value="item.disciplineId"
+                                ></el-option>
+                            </el-select>
+                        </div>
+                    </div>
+                    <div class="line">
+                        <div class="item">
+                            <span>专业类</span>
+                            <el-select
+                                v-model="archive.professionalClassId"
+                                placeholder="选择专业类"
+                                :disabled="archive.disciplineId ? false : true"
+                                @change="id => getItemProfessional(id,index)"
+                                @clear="() => clearItemProfess(index)"
+                            >
+                                <el-option
+                                    v-for="item in archive.ProfessionalClassList"
+                                    :key="item.professionalClassId"
+                                    :label="item.professionalClassName"
+                                    :value="item.professionalClassId"
+                                ></el-option>
+                            </el-select>
+                        </div>
+                        <div class="item">
+                            <span>专业</span>
+                            <el-select
+                                v-model="archive.professionalId"
+                                placeholder="选择专业"
+                                :disabled="archive.professionalClassId ? false : true"
+                                @change="getItemStuGrade"
+                            >
+                                <el-option
+                                    v-for="item in archive.ProfessionalList"
+                                    :key="item.professionalId"
+                                    :label="item.professionalName"
+                                    :value="item.professionalId"
+                                ></el-option>
+                            </el-select>
+                        </div>
+                    </div>
+                </div>
+            </div>
+
+            <div class="fold" v-if="archivesList.length > 1">
+                <img :class="{ 'arrowTransform': showArch, 'arrowTransformReturn': !showArch}" style="width: 21px;height: 17px;" src="@/assets/img/open.png" alt="" @click="foldArch">
+            </div>
+        </div>
+
+        <div class="card mgb20">
+            <p class="block-title" style="margin-bottom: 15px">
+                <span><img src="@/assets/img/person/manag.png" alt=""> 账号信息</span>
+            </p>
+            <div class="information">
+                <div class="line">
+                    <div class="item">
+                        <span>用户账号</span>
+                        <input
+                            id="account"
+                            type="text"
+                            class="username" placeholder="请输入用户账号"
+                            v-model="personalInformation.account"
+                        />
+                    </div>
+                    <div class="item">
+                        <span>手机号</span>
+                        <div class="btns flex-between">
+                            <span>{{personalInformation.phone}}</span>
+                            <el-button v-if="personalInformation.phone" type="primary" size="small" @click="bindPhone">更换</el-button>
+                            <el-button v-else type="primary" size="small" @click="bindPhone">绑定</el-button>
+                        </div>
+                    </div>
+                </div>
+                <div class="line">
+                    <div class="item">
+                        <span>邮箱</span>
+                        <div class="btns flex-between">
+                            <span>{{personalInformation.email}}</span>
+                            <el-button v-if="personalInformation.email" type="primary" size="small" @click="bindEmail">更换</el-button>
+                            <el-button v-else type="primary" size="small" @click="bindEmail">绑定</el-button>
+                        </div>
+                    </div>
+                    <!-- <div class="item">
+                        <span>微信</span>
+                        <input id="weChat" class="weChat" disabled placeholder="微信" type="text" v-model="personalInformation.weChatID"/>
+                    </div> -->
+                    <div class="item">
+                        <span>密码</span>
+                        <div class="btns flex-between">
+                            <p>******</p>
+                            <el-button type="primary" size="small" @click="bindPassword">更换</el-button>
+                        </div>
+                    </div>
+                        <!-- <div class="item"></div> -->
+                </div>
+            </div>
+        </div>
+
+        <el-dialog
+        :title="personalInformation.email ? '更换邮箱' : '绑定邮箱'"
+        :visible.sync="emailVisible"
+        :close-on-click-modal="false"
+        @close="closeEmail"
+        width="30%">
+            <el-form ref="form" :model="form" label-width="60px">
+                <el-form-item label="邮箱">
+                    <el-input placeholder="请输入邮箱" v-model="email"></el-input>
+                </el-form-item>
+                <el-form-item label="验证码">
+                    <div class="flex-between">
+                        <el-input v-model="emailCode" placeholder="请输入验证码" maxlength="6"></el-input>
+                        <el-button style="margin-left: 10px" type="text" @click="sendEmailCode" :disabled="emailDisabled">{{emailBtnText}}</el-button>
+                    </div>
+                </el-form-item>
+            </el-form>
+            <span slot="footer" class="dialog-footer">
+                <el-button @click="emailVisible = false">取 消</el-button>
+                <el-button type="primary" @click="emailSubmit">确 定</el-button>
+            </span>
+        </el-dialog>
+
+        <el-dialog
+        :title="personalInformation.phone ? '更换手机号' : '绑定手机号'"
+        :visible.sync="phoneVisible"
+        :close-on-click-modal="false"
+        @close="closePhone"
+        width="30%">
+            <el-form ref="form" :model="form" label-width="60px">
+                <el-form-item label="手机号">
+                    <el-input placeholder="请输入手机号" v-model="phone" maxlength="11"></el-input>
+                </el-form-item>
+                <el-form-item label="验证码">
+                    <div class="flex-between">
+                        <el-input v-model="phoneCode" placeholder="请输入验证码" maxlength="6"></el-input>
+                        <el-button style="margin-left: 10px" type="text" @click="sendPhoneCode" :disabled="phoneDisabled">{{phoneBtnText}}</el-button>
+                    </div>
+                </el-form-item>
+            </el-form>
+            <span slot="footer" class="dialog-footer">
+                <el-button @click="phoneVisible = false">取 消</el-button>
+                <el-button type="primary" @click="phoneSubmit">确 定</el-button>
+            </span>
+        </el-dialog>
+
+        <el-dialog
+        title="更换密码"
+        :visible.sync="passwordVisible"
+        :close-on-click-modal="false"
+        @close="closePassword"
+        width="30%">
+            <el-form ref="passwordForm" :model="form" label-width="60px">
+                <el-form-item label="原密码">
+                    <el-input type="password" v-model="passwordForm.password" placeholder="请输入原密码"></el-input>
+                </el-form-item>
+                <el-form-item label="新密码">
+                    <el-input type="password" v-model="passwordForm.newPassword" placeholder="请输入新密码" @keyup.enter.native="editPassword"></el-input>
+                </el-form-item> 
+                <el-form-item label="新密码">
+                    <el-input type="password" v-model="passwordForm.reNewPassword" placeholder="请确认新密码" @keyup.enter.native="editPassword"></el-input>
+                </el-form-item>
+            </el-form>
+            <span slot="footer" class="dialog-footer">
+                <el-button @click="passwordVisible = false">取 消</el-button>
+                <el-button type="primary" @click="editPassword">确 定</el-button>
+            </span>
+        </el-dialog>
+    </div>
+</template>
+
+<script>
+import Setting from '@/setting'
+import util from '@/libs/util'
+import { mapState, mapActions } from 'vuex'
+export default {
+    data() {
+        return {
+            personalInformation: {
+                userName: '',
+                name:'',
+                workNumber:'',
+                password:"",
+                phone:'',
+                email:'',
+                provinceName:'',
+                cityName:'',
+                schoolName:'',
+                professionalName:'',
+                experimentName:'',
+                sex: 1,
+                dateBirth: '',
+                educationDegree: ''
+            },
+            profession: [
+                {
+                    value: '1',
+                    label: '学生'
+                },
+                {
+                    value: '2',
+                    label: '老师'
+                }
+            ],
+            emailVisible: false,
+            passwordVisible: false,
+            phoneVisible: false,
+            showArch: false,
+            passwordForm: {
+                password: '',
+                newPassword: '',
+                reNewPassword: ''
+            },
+            sexList: [
+                {
+                    name: '男',
+                    value: 1
+                },
+                {
+                    name: '女',
+                    value: 2
+                }
+            ],
+            countryList: [
+                {
+                    label: '中国'
+                }
+            ],
+            form: {},
+            occupationList: [{
+                value: 1,
+                label: '学生'
+            },
+            {
+                value: 2,
+                label: '老师'
+            }],
+            provinceList: [],
+            cityList: [],
+            // 教育程度
+            educationDegreeList: [
+                {
+                    name: '专科',
+                    value: 1
+                },
+                {
+                    name: '本科',
+                    value: 2
+                },
+                {
+                    name: '硕士',
+                    value: 3
+                },
+                {
+                    name: '博士',
+                    value: 4
+                },
+                {
+                    name: '其他',
+                    value: 5
+                }
+            ],
+            subjectList: [], //专业学科
+            ProfessionalClassList: [], //专业类
+            ProfessionalList: [], //专业
+            schoolList: [],
+
+            archivesList: [],
+            archivesForm: {
+                //个人档案
+                personalCareerId: '', //职业
+                schoolId: '', //院校
+                schoolName: '', //院校名称
+                professionalClassId: '', //专业类
+                professionalClassName: '', //专业类名称
+                disciplineId: '', //专业学科
+                disciplineName: '', //专业学科名称
+                professionalId: '', //专业
+                professionalName: '', //专业名称
+                userId: this.userId
+            },
+            email: '',
+            emailBtnText: '发送验证码',
+            emailCode: '',
+            emailDisabled: false,
+            emailTimer: null,
+            phone: '',
+            phoneBtnText: '发送验证码',
+            phoneCode: '',
+            phoneDisabled: false,
+            phoneTimer: null,
+            emailOpener: '',
+            phoneOpener: '',
+            originAccount: '',
+            accountReapeat: false
+        };
+    },
+    computed: {
+        ...mapState('user', [
+            'userId','avatar'
+        ]),
+    },
+    mounted() {
+        this.getdata();
+        this.getProvince()
+        this.getSchoolData()
+        this.getSubject()
+
+    },
+    methods: {
+        ...mapActions('user', [
+            'setAvatar','setUserName'
+        ]),
+        getProvince(){
+            this.$get(this.api.queryProvince).then(res => {
+                this.provinceList = res.message
+            }).catch(res => {});
+        },
+        // 获取城市
+        getCity(id,type,index){
+            if(type == 1){
+                if(this.personalInformation.provinceId){
+                    this.personalInformation.cityId = 1
+                    this.getCityData(type,index)
+                }
+            }else{
+                if(this.archivesList[index].provinceId){
+                    this.archivesList[index].provinceName = this.provinceList[id-1].provinceName
+                    this.archivesList[index].cityId = 1
+                    this.getCityData(type,index)
+                }
+            }
+        },
+        getCityData(type,index){
+            let provinceId = type == 1 ? this.personalInformation.provinceId : this.archivesList[index].provinceId
+            this.$get(this.api.queryCity,{provinceId}).then(res => {
+                if(type == 1){
+                    this.cityList = res.message
+                }else{
+                    this.archivesList[index].cityList = res.message
+                }
+            }).catch(res => {});
+        },
+        getCityName(id,index){
+            this.archivesList[index].cityName = this.archivesList[index].cityList[id-1].cityName
+        },
+        getSchoolName(id,index){
+            this.archivesList[index].schoolName = this.schoolList[id-1].schoolName
+        },
+        // 获取学校名称
+        getSchoolData(){
+            this.$get(this.api.querySchoolData,{schoolName: '',provinceId: '',cityId: ''}).then(res => {
+                this.schoolList = res.message
+            }).catch(res => {});
+        },
+        //取得头像地址
+        getRes(res) {
+            this.setAvatar(res.message)
+        },
+        uploadHeadImg: function() {
+            this.$el.querySelector('.hiddenInput').click();
+        },
+        async accountChange(){
+            if(this.originAccount != this.personalInformation.account){
+                let res = await this.$get(this.api.queryAccountIsExist, { 
+                    account: this.personalInformation.account,
+                    schoolId: this.personalInformation.schoolId
+                });
+                if(res.message.user.length){
+                    util.warningMsg('该账号已存在');
+                    this.accountReapeat = true
+                }else{
+                    this.accountReapeat = false
+                }
+            }else{
+                this.accountReapeat = false
+            }
+        },
+        getdata() {
+            this.$get(`${this.api.userinfo}/${this.userId}`)
+                .then(res => {
+                    this.personalInformation = Object.assign(this.personalInformation,res.data.userInfo[0])
+                    this.personalInformation.idNumber = this.personalInformation.IDNumber
+                    this.originAccount = this.personalInformation.account
+                    this.archivesList = res.data.userPersonalFile
+                    this.$nextTick(() => {
+                        if(this.personalInformation.provinceId){
+                            this.getCityData(1)
+                        }
+                        if(this.archivesList.length != 0){
+                            this.archivesList.forEach((e,k) =>{
+                                this.$set(e, 'subjectList', this.subjectList);
+                                this.$set(e, 'disciplineId', e.disciplineId ? e.disciplineId : '');
+                                this.$set(e, 'disciplineName', e.disciplineName ? e.disciplineName : '');
+                                this.$set(e, 'professionalClassId', e.professionalClassId ? e.professionalClassId : '');
+                                this.$set(e, 'professionalClassName', e.professionalClassName ? e.professionalClassName : '');
+                                this.$set(e, 'professionalId', e.professionalId ? e.professionalId : '');
+                                this.$set(e, 'professionalName', e.professionalName ? e.professionalName : '');
+                                this.$set(e, 'schoolId', e.schoolId ? e.schoolId : '');
+                                this.$set(e, 'schoolName', e.schoolName ? e.schoolName : '');
+
+                                if(e.disciplineId){
+                                    this.$get(this.api.queryCourseProfessionalClass,{ disciplineId: e.disciplineId }).then(res => {
+                                        this.$set(e, 'ProfessionalClassList', res.message);
+                                    }).catch(res => {});
+                                }else{
+                                    this.$set(e, 'ProfessionalClassList', []);
+                                }
+                                if(e.professionalClassId){
+                                    this.$get(this.api.queryCourseProfessional,{ professionalClassId: e.professionalClassId }).then(res => {
+                                        this.$set(e, 'ProfessionalList', res.message);
+                                    }).catch(res => {});
+                                }else{
+                                    this.$set(e, 'ProfessionalList', []);
+                                }
+                                // if(e.provinceId){
+                                //     this.$get(this.api.queryCity,{provinceId: e.provinceId}).then(res => {
+                                //         this.$set(e, 'cityList', res.message);
+                                //     }).catch(res => {});
+                                // }else{
+                                //     this.$set(e, 'cityList', []);
+                                // }
+                            })
+                        }else{
+                            this.concatArch(1)
+                        }
+                    })
+                })
+                .catch(err => {
+                    console.log(err);
+                });
+        },
+        concatArch(isLoadData) {
+            this.archivesList = this.archivesList.concat({
+                isNew: true,
+                personalCareerId: '', //职业
+                schoolId: '', //院校
+                schoolName: '', //院校名称
+                subjectList: this.subjectList, //专业学科
+                disciplineId: '', //专业学科
+                disciplineName: '', //专业学科名称
+                ProfessionalClassList: [], //专业类
+                professionalClassId: '', //专业类
+                professionalClassName: '', //专业类名称
+                ProfessionalList: [], //专业
+                professionalId: '', //专业
+                professionalName: '', //专业名称
+                userId: this.userId,
+                personalFileId: ''
+            })
+            if(!isLoadData){
+                this.$nextTick(() => {
+                    document.body.scrollTop = document.querySelector('.content-box').scrollHeight
+                    document.documentElement.scrollTop = document.querySelector('.content-box').scrollHeight
+                })
+            }
+        },
+        addArch() {
+            let isEmpty = false
+            this.archivesList.forEach((n,k) => {
+                if(!n.personalCareerId) isEmpty = true
+            })
+            if(isEmpty) return util.warningMsg('请选择职业');
+            this.showArch = true
+            this.concatArch()
+        },
+        bindEmail() {
+            this.email = this.personalInformation.email
+            this.emailVisible = true
+        },
+        bindPhone() {
+            this.phone = this.personalInformation.phone
+            this.phoneVisible = true
+        },
+        bindPassword() {
+            this.passwordVisible = true
+        },
+        editPassword() {
+            if(!this.passwordForm.password) return util.warningMsg('请输入原密码')
+            if(!this.passwordForm.newPassword) return util.warningMsg('请输入新密码')
+            if(!this.passwordForm.reNewPassword) return util.warningMsg('请确认新密码')
+            if(this.passwordForm.newPassword.length < 6 || this.passwordForm.reNewPassword.length < 6) return util.warningMsg('请输入6位数以上的密码')
+            if(this.passwordForm.newPassword !== this.passwordForm.reNewPassword) return util.warningMsg('输入的新密码不一致,请重新确认')
+            if(this.passwordForm.password === this.passwordForm.newPassword) return util.warningMsg('原密码跟新密码不能一致')
+
+            let data = this.passwordForm
+            data.userid = this.userId
+            this.$post(this.api.examinePassword,data)
+            .then(res => {
+                if(res.errmessage == 'success'){
+                    util.successMsg('更换成功')
+                    this.passwordVisible = false
+                }
+            })
+            .catch(err => {
+                console.log(err);
+            });
+        },
+        closePassword() {
+            this.passwordForm = {
+                password: '',
+                newPassword: '',
+                reNewPassword: ''
+            }
+        },
+        foldArch() {
+            this.showArch = !this.showArch
+            // this.$nextTick(() => {
+            //     document.body.scrollTop = document.querySelector('.content-box').scrollHeight
+            //     document.documentElement.scrollTop = document.querySelector('.content-box').scrollHeight
+            // })
+        },
+        // 获取学科类别
+        getSubject(){
+            this.$get(this.api.queryCourseDiscipline).then(res => {
+                this.subjectList = res.message
+            }).catch(res => {});
+        },
+        // 清除学科类别
+        clearClass(){
+            this.archivesForm.professionalClassId = '',
+            this.archivesForm.professionalId = ''
+        },
+        // 获取专业类
+        getProfessionalClass(val){
+            this.clearClass()
+            if(val){
+                let obj = {};
+                obj = this.subjectList.find((item)=>{
+                    return item.disciplineId === val;
+                });
+                this.archivesForm.disciplineName = obj.disciplineName
+                this.getProfessionalClassData(val)
+            }
+        },
+        clearItemClass(index){
+            this.archivesList[index].professionalClassId = ''
+            this.archivesList[index].professionalClassName = ''
+            this.archivesList[index].professionalId = ''
+            this.archivesList[index].professionalName = ''
+            // this.archivesList.map(e =>{
+            //     if(e.disciplineId == item){
+            //         e.professionalClassId = '',
+            //         e.professionalClassName = '',
+            //         e.professionalId = '',
+            //         e.professionalName = ''
+            //     }
+            // })
+        },
+        getItemProfessionalClass(item,index){
+            this.clearItemClass(index)
+            if(item){
+                let obj = {};
+                obj = this.subjectList.find(r =>{
+                    return r.disciplineId === item;
+                });
+                this.$get(this.api.queryCourseProfessionalClass,{ disciplineId: item }).then(res => {
+                    this.archivesList.map(e =>{
+                        if(e.disciplineId == item){
+                            e.ProfessionalClassList = res.message
+                            e.disciplineName = obj.disciplineName
+                        }
+                    })
+                }).catch(res => {});
+            }
+        },
+        getProfessionalClassData(value){
+            this.$get(this.api.queryCourseProfessionalClass,{ disciplineId: value }).then(res => {
+                this.ProfessionalClassList = res.message
+            }).catch(res => {});
+        },
+        // 清除专业类
+        clearProfess(){
+            this.archivesForm.professionalId = ''
+        },
+        // 获取专业
+        getProfessional(val){
+            this.clearProfess()
+            if(val){
+                let obj = {};
+                obj = this.ProfessionalClassList.find((item)=>{
+                    return item.professionalClassId === val;
+                });
+                this.archivesForm.professionalClassName = obj.professionalClassName
+                this.getProfessionalData(val)
+            }
+        },
+        clearItemProfess(index){
+            this.archivesList[index].professionalId = ''
+            this.archivesList[index].professionalName = ''
+            // this.archivesList.map(e =>{
+            //     if(e.professionalClassId == item){
+            //         e.professionalId = '',
+            //         e.professionalName = ''
+            //     }
+            // })
+        },
+        getItemProfessional(item,index){
+            this.clearItemProfess(index)
+            if(item){
+                this.$get(this.api.queryCourseProfessional,{ professionalClassId: item }).then(res => {
+                    this.archivesList.map(e =>{
+                        if(e.professionalClassId == item){
+                            let obj = {};
+                            obj = e.ProfessionalClassList.find(r =>{
+                                return r.professionalClassId === item;
+                            });
+                            e.ProfessionalList = res.message
+                            e.professionalClassName = obj.professionalClassName
+                        }
+                    })
+                }).catch(res => {});
+            }
+        },
+        getProfessionalData(value){
+            this.$get(this.api.queryCourseProfessional,{professionalClassId: value}).then(res => {
+                this.ProfessionalList = res.message
+            }).catch(res => {});
+        },
+        // 获取专业名称
+        getStuGrade(val){
+            if(val){
+                let obj = {};
+                obj = this.ProfessionalList.find(r =>{
+                    return r.professionalId === val;
+                });
+                this.archivesForm.professionalName = obj.professionalName
+            }
+        },
+        getItemStuGrade(item){
+            if(item){
+                this.archivesList.map(e =>{
+                    if(e.professionalId == item){
+                        let obj = {};
+                        obj = e.ProfessionalList.find(r =>{
+                            return r.professionalId === item;
+                        });
+                        e.professionalName = obj.professionalName
+                    }
+                })
+            }
+        },
+        save() {
+            let isEmpty = false
+            this.archivesList.forEach((n,k) => {
+                if(!n.personalCareerId) isEmpty = true
+                n.userId = this.userId
+            })
+            if(isEmpty) return util.warningMsg('请选择职业')
+            if(this.accountReapeat) return util.warningMsg('该账号已存在')
+            if(this.personalInformation.idNumber && !/(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)/.test(this.personalInformation.idNumber)) return util.warningMsg('请输入正确的证件号码')
+            let personalInformation = this.personalInformation
+            let userInfoEntity = {
+                idNumber: personalInformation.idNumber,
+                account: personalInformation.account,
+                cityId: personalInformation.cityId,
+                countries: personalInformation.countries,
+                dateBirth: personalInformation.dateBirth,
+                educationDegree: personalInformation.educationDegree,
+                email: personalInformation.email,
+                phone: personalInformation.phone,
+                provinceId: personalInformation.provinceId,
+                schoolId: personalInformation.schoolId,
+                sex: personalInformation.sex,
+                userId: this.userId,
+                userName: personalInformation.userName,
+                weChatID: personalInformation.weChatID,
+            }
+            let personalFileEntities = []
+            this.archivesList.forEach((n,k) => {
+                personalFileEntities.push({
+                    cityId: n.cityId,
+                    cityName: n.cityName,
+                    disciplineId: n.disciplineId,
+                    disciplineName: n.disciplineName,
+                    personalCareerId: n.personalCareerId,
+                    personalFileId: n.personalFileId,
+                    professionalClassId: n.professionalClassId,
+                    professionalClassName: n.professionalClassName,
+                    professionalId: n.professionalId,
+                    professionalName: n.professionalName,
+                    provinceId: n.provinceId,
+                    provinceName: n.provinceName,
+                    schoolId: n.schoolId,
+                    schoolName: n.schoolName,
+                    userId: this.userId
+                })
+            })
+            let data = {
+                userInfoEntity,
+                personalFileEntities
+            }
+            this.$put(this.api.userinfoUpdate,data).then(res => {
+                this.setUserName(personalInformation.userName)
+                // bus.$emit('updateAccount',personalInformation.userName)
+                util.successMsg('提交成功!')
+            }).catch(res => {});
+        },
+        emailCountdown(){
+            let count = 60
+            if(!this.emailTimer){
+                this.emailDisabled = true
+                this.emailTimer = setInterval(() => {
+                    console.log('倒计时中')
+                    if(count > 0){
+                        count--
+                        this.emailBtnText = `${count}秒后重试`
+                    }else{
+                        this.emailDisabled = false
+                        clearInterval(this.emailTimer)
+                        this.emailTimer = null
+                        this.emailBtnText = `发送验证码`
+                    }
+                },1000)
+            }
+        },
+        phoneCountdown(){
+            let count = 60
+            if(!this.phoneTimer){
+                this.phoneDisabled = true
+                this.phoneTimer = setInterval(() => {
+                    console.log('倒计时中')
+                    if(count > 0){
+                        count--
+                        this.phoneBtnText = `${count}秒后重试`
+                    }else{
+                        this.phoneDisabled = false
+                        clearInterval(this.phoneTimer)
+                        this.phoneTimer = null
+                        this.phoneBtnText = `发送验证码`
+                    }
+                },1000)
+            }
+        },
+        closeEmail(){
+            if(!this.emailDisabled){
+                this.emailCode = ''
+            }
+        },
+        sendEmailCode(){
+            if(!this.email) return util.warningMsg('请输入邮箱')
+            if(!/^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/.test(this.email)) return util.warningMsg('请输入正确的邮箱')
+            let data = {
+                userId: this.userId,
+                email: this.email,
+                types: 1
+            }
+            this.$post(this.api.sendEmailCode,data).then(res => {
+                if(res.errmessage == 'success'){
+                    this.emailCountdown()
+                    this.emailOpener = res.data
+                }
+            }).catch(res => {});
+        },
+        emailSubmit(){
+            if(!this.email) return util.warningMsg('请输入邮箱')
+            if(!/^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/.test(this.email)) return util.warningMsg('请输入正确的邮箱')
+            if(!this.emailCode) return util.warningMsg('请输入验证码')
+            let data = {
+                userId: this.userId,
+                email: this.email,
+                types: 1,
+                code: this.emailCode,
+                opener: this.emailOpener
+            }
+            this.$put(this.api.bingEmail,data).then(res => {
+                if(res.errmessage == 'success'){
+                    util.successMsg('绑定成功')
+                    this.personalInformation.email = this.email
+                    this.emailVisible = false
+                }
+            }).catch(res => {});
+        },
+        closePhone(){
+            if(!this.emailDisabled){
+                this.emailCode = ''
+            }
+        },
+        sendPhoneCode(){
+            if(!this.phone) return util.warningMsg('请输入手机号')
+            if(!/^1[3456789]\d{9}$/.test(this.phone)) return util.warningMsg('请输入正确的手机号')
+            let data = {
+                userId: this.userId,
+                phone: this.phone,
+                types: 2
+            }
+            this.$post(this.api.sendPhoneCode,data).then(res => {
+                if(res.errmessage == 'success'){
+                    this.phoneCountdown()
+                    this.phoneOpener = res.data
+                }
+            }).catch(res => {});
+        },
+        phoneSubmit(){
+            if(!this.phone) return util.warningMsg('请输入手机号')
+            if(!/^1[3456789]\d{9}$/.test(this.phone)) return util.warningMsg('请输入正确的手机号')
+            if(!this.phoneCode) return util.warningMsg('请输入验证码')
+            let data = {
+                userId: this.userId,
+                phone: this.phone,
+                types: 2,
+                code: this.phoneCode,
+                opener: this.phoneOpener
+            }
+            this.$put(this.api.bindPhone,data).then(res => {
+                if(res.errmessage == 'success'){
+                    util.successMsg('绑定成功')
+                    this.personalInformation.phone = this.phone
+                    this.phoneVisible = false
+                }
+            }).catch(res => {});
+        },
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+.arrowTransform{
+    transition: 0.5s;
+    transform-origin: center;
+    transform: rotateZ(180deg);
+}
+.arrowTransformReturn{
+    transition: 0.5s;
+    transform-origin: center;
+    transform: rotateZ(0deg);
+}
+.wrap{
+    display:flex;
+    align-items: center;
+    flex-direction:column;
+    background: #f6f6f6 url(../../../assets/img/person/bg.png) 0 0/100% 500px no-repeat;
+}
+.header{
+    z-index: 2;
+    padding-top: 170px;
+    background-color: transparent;
+}
+.header /deep/.el-upload-list__item-name {
+    display: none;
+}
+
+.header /deep/.el-icon-upload-success{
+    display: none;
+}
+
+.header /deep/.el-upload-list__item-status-label{
+    display: none;
+}
+.header /deep/ .el-upload-list{
+    display: none;
+}
+
+/deep/.el-input__inner{
+    height: 32px !important;
+}
+/deep/.el-select .el-input .el-select__caret{
+    line-height: 32px;
+}
+input:focus {
+    outline: 0;
+}
+.openfile {
+    cursor: pointer;
+}
+.Headtop {
+    margin-top: 10px;
+
+    .head {
+        width: 34px;
+        height: 34px;
+        background: rgba(255, 255, 255, 1);
+        border-radius: 50%;
+        display: flex;
+        align-items: center;
+        flex-direction: column;
+        justify-content: center;
+        position: relative;
+        .eee {
+            height: 10px;
+            width: 16px;
+            background-color: rgba(255, 255, 255, 1);
+            margin-bottom: -10px;
+            position: absolute;
+            top: 8px;
+            z-index: 2;
+        }
+        .Semicircle {
+            width: 12px;
+            height: 12px;
+            border: 2px solid #9278ff;
+            border-radius: 50px;
+            margin-bottom: 10px;
+            position: absolute;
+        }
+    }
+    .body {
+        color: #9278ff;
+        width: 30px;
+        height: 20px;
+        border: 3px solid #f5f5f5;
+        border-radius: 100%;
+        margin-top: 5px;
+        margin-bottom: -10px;
+    }
+    .body::after {
+        content: '';
+        width: 40px;
+        height: 30px;
+        display: inline-block;
+        background-color: #9278ff;
+        margin-top: 8px;
+        margin-left: -6px;
+    }
+}
+
+.card {
+    width: 1000px;
+    margin-top: 10px;
+    padding: 60px 100px;
+    background: rgba(255, 255, 255, 1);
+    box-shadow: 0px 0px 21px 0px rgba(48, 115, 248, 0.1);
+    border-radius: 4px;
+    position: relative;
+    box-sizing: border-box;
+    .block-title{
+        span{
+            display: inline-flex;
+            align-items: center;
+            color: #444;
+            font-size: 18px;
+            img{
+                width: 20px;
+                margin-right: 5px;
+            }
+        }
+        
+    }
+    .meta-title{
+        padding-left: 6px;
+        margin: 20px 0 10px 0;
+        line-height: 1;
+        border-left: 4px solid #9278ff;
+        span{
+            font-size: 16px;
+            color: #9278ff;
+        }
+        /deep/ .el-button{
+            padding: 0 0;
+            font-size: 16px;
+            color: #9278ff;
+        }
+    }
+    .el-icon-document {
+        color: #9278ff;
+        font-size: 30px;
+    }
+    .el-icon-collection {
+        color: #9278ff;
+        position: absolute;
+        left: 31px;
+        top: 31px;
+        font-size: 30px;
+    }
+    span {
+        color: #333333;
+        font-size: 20px;
+    }
+    .plus{
+        display: flex;
+        justify-content: space-between;
+        i{
+            font-size: 22px;
+            color: #21d749;
+            cursor: pointer;
+        }
+    }
+    .information {
+        .archives{
+            padding: 15px;
+            margin-bottom: 20px;
+            border: 1px dashed #c9c9c9;
+            border-radius: 8px;
+        }
+        .line {
+            position: relative;
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+            .item{
+                display: inline-flex;
+                align-items: center;
+                margin-bottom: 20px;
+                span{
+                    width: 90px;
+                    margin-right: 15px;
+                    text-align: right;
+                    font-size: 15px;
+                    color: #656565;
+                    white-space: nowrap;
+                }
+                .username {
+                    background:url('~@/assets/img/edit.png') no-repeat 10px center;  
+                    background-size: 16px 15px;
+                    background-position: 98% 50%;
+                    box-sizing: border-box;
+                }
+                .idnumber {
+                    background:url('~@/assets/img/idcard.png') no-repeat 10px center;  
+                    background-size: 20px 16px;
+                    background-position: 98% 50%;
+                    box-sizing: border-box;
+                }
+                .school {
+                    background: url('~@/assets/img/school.png') no-repeat;
+                    background-size: 22px 17px;
+                    background-position: 98% 50%;
+                    box-sizing: border-box;
+                }
+                .weChat{
+                    background: url('~@/assets/img/bind.png') no-repeat;
+                    background-size: 19px 18px;
+                    background-position: 98% 50%;
+                    box-sizing: border-box;
+                }
+                input {
+                    height: 36px;
+                    width: 260px;
+                    color: #727272;
+                    border: 0;
+                    border-bottom: 1px solid #b5b5b5;
+                    outline: none;
+                    padding-left: 15px;
+                }
+                .read{
+                    width: 260px;
+                    color: #727272;
+                }
+                .el-select,.btns{
+                    width: 260px;
+                }
+                .btns{
+                    display: inline-flex;
+                    align-items: center;
+                    border-bottom: 1px solid #b5b5b5;
+                    padding: 5px 0;
+                }
+                .flex-end-content{
+                    justify-content: flex-end;
+                }
+                .selects{
+                    display: inline-flex;
+                    align-items: center;
+                    width: 260px;
+                    .el-select{
+                        width: 100px;
+                        font-size: 12px;
+                        &:first-child{
+                            width: 82px;
+                        }
+                    }
+                }
+            }
+            /deep/.el-date-editor{
+                width: 260px;
+            }
+            /deep/.el-date-editor .el-input__prefix{
+                line-height: 32px;
+            }
+            /deep/.el-input__prefix,/deep/.el-input__suffix{
+                left: auto;
+                right: 0;
+            }
+            /deep/.el-input__inner {
+                color: #656565;
+                font-size: 14px;
+                border-radius: 0 !important;
+                border: 0px;
+                border-bottom: 1px solid #b5b5b5;
+            }
+            /deep/.el-input--prefix .el-input__inner{
+                padding-left: 15px;
+            }
+            /deep/.el-input__icon {
+                color: #9278ff;
+                &.el-icon-date{
+                    font-size: 14px;
+                    &:before{
+                        content: "";
+                        background: url('~@/assets/img/date.png') center center no-repeat;
+                        position: absolute;
+                        width: 20px;
+                        height: 18px;
+                        top: 50%;
+                        left: 50%;
+                        transform: translate(-50%, -50%);
+                    }
+                }
+            }
+            /deep/.el-icon-arrow-up:before {
+                content: "";
+                background: url('~@/assets/img/select.png') center center no-repeat;
+                position: absolute;
+                width: 12px;
+                height: 7px;
+                top: 50%;
+                left: 50%;
+                transform: translate(-50%, -50%);
+            }
+        }
+    }
+    .fold{
+        margin-top: 20px;
+        text-align: center;
+        i{
+            font-size: 22px;
+            color: #8e8e8e;
+            cursor: pointer;
+            &:hover{
+                opacity: .8;
+            }
+        }
+    }
+    .sexRadio /deep/ .el-radio__input.is-checked .el-radio__inner{
+        border-color: #9278ff;
+        background: #9278ff;
+    }
+    .sexRadio /deep/ .el-radio__input.is-checked + .el-radio__label{
+        color: #9278ff;
+    }
+    .sexRadio /deep/ .el-radio__inner:hover{
+        border-color: #9278ff;
+    }
+    /deep/ input::-webkit-input-placeholder {
+        font-size: 14px;
+        color: #c0c0c0;
+    }
+    /deep/ input::-moz-input-placeholder {
+        font-size: 14px;
+        color: #c0c0c0;
+    }
+    /deep/ input::-ms-input-placeholder {
+        font-size: 14px;
+        color: #c0c0c0;
+    }
+}
+</style>
\ No newline at end of file
diff --git a/src/pages/station/list/index.vue b/src/pages/station/list/index.vue
new file mode 100644
index 0000000..db39587
--- /dev/null
+++ b/src/pages/station/list/index.vue
@@ -0,0 +1,269 @@
+<template>
+    <div class="box">
+        <div class="search">
+            <input type="text" placeholder="请输入关键词" v-model="keyword">
+            <button>搜索</button>
+        </div>
+        <div class="wrap" :class="isHh ? 'isHh' : (isBeta ? '' : 'isOccu')">
+            <template v-for="(item,index) in systemList">
+                <a class="item" @click="goSubSystem(item)" :key="index" v-if="!keyword || item.name.includes(keyword)">
+                    <img :src="item.imgSrc" alt="">
+                    <p class="text" v-html="item.name"></p>
+                </a>
+            </template>
+        </div>
+    </div>
+</template>
+
+<script>
+import { mapState, mapActions } from 'vuex'
+import util from '@/libs/util'
+import Setting from '@/setting'
+export default {
+    name: 'backstage',
+    data() {
+        return {
+            host: Setting.host,
+            isHh: Setting.isHh,
+            isBeta: Setting.isBeta,
+            keyword: '',
+            searchTimer: null,
+            systemList: Setting.isHh ? [{
+                id: 1,
+                imgSrc: require('@/assets/img/station1.png'),
+                name: 'Python程序设计<br>教学系统'
+            },{
+                id: 4,
+                imgSrc: require('@/assets/img/station2.png'),
+                name: '经济金融建模<br>实验教学系统'
+            },
+            {
+                id: 6,
+                imgSrc: require('@/assets/img/station8.png'),
+                name: '金融随机过程<br>实验教学系统'
+            },{
+                id: 7,
+                imgSrc: require('@/assets/img/station9.png'),
+                name: '量化投资策略建模<br>实验教学系统'
+            },{
+                id: 8,
+                imgSrc: require('@/assets/img/station10.png'),
+                name: '大数据分析<br>实验教学系统'
+            }] : (Setting.isBeta ? [{
+                id: 1,
+                imgSrc: require('@/assets/img/station1.png'),
+                name: 'Python程序设计<br>教学系统'
+            },{
+                id: 4,
+                imgSrc: require('@/assets/img/station2.png'),
+                name: '经济金融建模<br>实验教学系统'
+            },{
+                id: 5,
+                imgSrc: require('@/assets/img/station3.png'),
+                name: 'Python可视化<br>实验教学系统'
+            },{
+                id: 6,
+                imgSrc: require('@/assets/img/station8.png'),
+                name: '金融随机过程<br>实验教学系统'
+            },{
+                id: 7,
+                imgSrc: require('@/assets/img/station9.png'),
+                name: '量化投资策略建模<br>实验教学系统'
+            },{
+                id: 8,
+                imgSrc: require('@/assets/img/station10.png'),
+                name: '大数据分析<br>实验教学系统'
+            },{
+                id: 9,
+                imgSrc: require('@/assets/img/station11.png'),
+                name: 'Python数据清洗<br>教学实验系统'
+            },{
+                id: 10,
+                imgSrc: require('@/assets/img/station12.png'),
+                name: 'Python数据采集(爬虫)<br>教学实验系统'
+            },{
+                id: 21,
+                imgSrc: require('@/assets/img/station4.png'),
+                name: '数字货币交易'
+            },
+            {
+                id: 22,
+                imgSrc: require('@/assets/img/station6.png'),
+                name: '担保实训教学系统'
+            },
+
+
+            // {
+            //     imgSrc: require('@/assets/img/station5.png'),
+            //     name: '小额贷款业务实训系统'
+            // },
+            // {
+            //     imgSrc: require('@/assets/img/station7.png'),
+            //     name: '投资银行实验教学系统'
+            // },
+            ] : [{
+                id: 1,
+                imgSrc: require('@/assets/img/station1.png'),
+                name: 'Python程序设计<br>教学系统'
+            },{
+                id: 4,
+                imgSrc: require('@/assets/img/station2.png'),
+                name: '经济金融建模<br>实验教学系统'
+            },{
+                id: 5,
+                imgSrc: require('@/assets/img/station3.png'),
+                name: 'Python可视化<br>实验教学系统'
+            },{
+                id: 6,
+                imgSrc: require('@/assets/img/station8.png'),
+                name: '金融随机过程<br>实验教学系统'
+            },{
+                id: 7,
+                imgSrc: require('@/assets/img/station9.png'),
+                name: '量化投资策略建模<br>实验教学系统'
+            },{
+                id: 8,
+                imgSrc: require('@/assets/img/station10.png'),
+                name: '大数据分析<br>实验教学系统'
+            },{
+                id: 9,
+                imgSrc: require('@/assets/img/station11.png'),
+                name: 'Python数据清洗<br>教学实验系统'
+            },{
+                id: 10,
+                imgSrc: require('@/assets/img/station12.png'),
+                name: 'Python数据采集(爬虫)<br>教学实验系统'
+            }])
+        };
+    },
+    computed: {
+        ...mapState('user', [
+            'userId','schoolId','studentId','roleId','userName'
+        ]),
+    },
+    mounted() {
+        util.getToken()
+    },
+    methods: {
+        goSubSystem(item){
+            let host = this.host
+            let href = ''
+            let roleId = this.roleId == 4 ? 0 : 1
+            let userName = window.btoa(encodeURIComponent(this.userName))
+            let type = item.id
+            if(type == 1){
+                href = `${host}pyTrials/#/`
+                if(process.env.NODE_ENV === 'development') href = 'http://192.168.31.154:8080/'
+            }else if(type == 4){
+                href = `${host}pyFinance/#/`
+            }else if(type == 5){
+                href = `${host}pyProjects/#/`
+            }else if(type == 6){
+                href = `${host}pyRandom/#/`
+            }else if(type == 7){
+                href = `${host}pyQuantification/#/`
+            }else if(type == 8){
+                href = `${host}pyAnalysis/#/`
+            }else if(type == 9){
+                href = `${host}pyDataclean/#/`
+            }else if(type == 10){
+                href = `${host}pyAcquisition/#/`
+            }else if(type == 21){
+                window.open(`http://121.37.29.24:80/yyyflogin?userId=${this.userId}&userName=${userName}&userType=${roleId}&reqType=1&reqId=3989a0ad671849b99dcbdcc208782333&caseId=9681f86902314b10bc752909121f9ab9&authorization=87DIVy348Oxzj3ha&classId=1876&courserId=7ff5d4715b114b7398b6f26c20fac460`)
+            }else if(type == 22){
+                window.open(`https://danbao.czcyedu.com/#/loginFromYyyf?userId=${this.userId}&userName=${userName}&userType=${roleId}&reqType=1&reqId=eb7d8355119d449184c548b07dc01ed9&caseId=1198241070647873538&authorization=87DIVy348Oxzj3ha&classId=1876&courserId=faaedd82adb9444285a5785e4a3dd4f9`)
+            }
+
+            if(type != 21 && type != 22){
+                util.cookies.set("userId",this.userId)
+                util.cookies.set("studentId",this.studentId)
+                util.cookies.set("schoolId",this.schoolId)
+                util.cookies.set("assessmentId",'',-1)
+                util.cookies.set("projectId",'',-1)
+                util.cookies.set("startTime",'',-1)
+                util.cookies.set("stopTime",'',-1)
+                location.href = href
+            }
+        },
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+    .box{
+        padding: 20px;
+        background-color: #fff;
+    }
+    /deep/.el-card{
+        margin-bottom: 0;
+    }
+    .search{
+        position: relative;
+        width: 30%;
+        margin: 100px auto 150px;
+        border-radius: 30px;
+        border: 1px solid #9076FF;
+        border-right: 0;
+        overflow: hidden;
+        input{
+            width: 100%;
+            height: 44px;
+            line-height: 44px;
+            padding: 0 20px;
+            font-size: 14px;
+            color: #333;
+            border: 0;
+            outline: none !important;
+            box-sizing: border-box;
+        }
+        button{
+            position: absolute;
+            top: 0;
+            right: 0;
+            padding: 0 20px;
+            line-height: 46px;
+            color: #fff;
+            background-color: #9076FF;
+            border: 0;
+            outline: none !important;
+        }
+    }
+    .wrap{
+        display: flex;
+        flex-wrap: wrap;
+        width: 70%;
+        margin: 0 auto;
+        min-height: calc(100vh - 520px);
+        box-sizing: border-box;
+
+        .item{
+            width: 16%;
+            margin: 20px;
+            text-align: center;
+            cursor: pointer;
+            &:hover{
+                opacity: .9;
+            }
+            img{
+                width: 100px;
+                height: 100px;
+                margin: 0 auto 6px;
+            }
+            .text{
+                font-size: 14px;
+                text-align: center;
+                color: #333;
+            }
+        }
+        &.isHh{
+            .item{
+                width: 16%;
+            }
+        }
+        &.isOccu{
+            .item{
+                width: 21%;
+            }
+        }
+    }
+</style>
\ No newline at end of file
diff --git a/src/plugins/aliplayer/aliplayer-min.css b/src/plugins/aliplayer/aliplayer-min.css
new file mode 100644
index 0000000..c3fac55
--- /dev/null
+++ b/src/plugins/aliplayer/aliplayer-min.css
@@ -0,0 +1 @@
+.prism-player .prism-big-play-btn{background:url(./img/bigplay.png) no-repeat;background-size:contain;width:64px;height:64px}.prism-player .prism-big-play-btn .outter{border:7px solid rgba(255,255,255,.51);width:64px;height:64px;border-radius:100%;position:absolute;box-sizing:border-box;top:0;left:0}.prism-player .prism-big-play-btn:hover{cursor:pointer}.prism-player .prism-play-btn{width:24px;height:24px;background:url(./img/smallplay.png) no-repeat;background-size:contain}.prism-player .prism-play-btn:hover{cursor:pointer}.prism-player .prism-live-display{font-size:12px;color:#ebecec;line-height:44px;text-align:center;margin:0}.prism-player .live-shift-display:hover{cursor:pointer;font-size:14px}.prism-player .prism-play-btn.playing{background:url(./img/smallpause.png) no-repeat;background-size:contain}.prism-player .prism-play-btn.playing:hover{cursor:pointer}.prism-player .prism-fullscreen-btn{width:24px;height:24px;background:url(./img/fullscreen.png) no-repeat;background-size:contain}.prism-player .prism-fullscreen-btn:hover{cursor:pointer}.prism-player .prism-fullscreen-btn.fullscreen{background:url(./img/smallscreen.png) no-repeat;background-size:contain}.prism-player .prism-fullscreen-btn.fullscreen:hover{animation:hoverAnimationScale 1s 1;-moz-animation:hoverAnimationScale 1s 1;-webkit-animation:hoverAnimationScale 1s 1;-o-animation:hoverAnimationScale 1s 1;cursor:pointer}.prism-player .prism-volume{position:relative}.prism-player .prism-volume .volume-icon{width:28px;height:28px;background:url(./img/volume.png);background-size:contain}.prism-player .prism-volume .volume-icon .long-horizontal{width:3px;background:#ebecec;height:18px;position:absolute;right:5px;top:50%;-ms-transform:translateY(-50%);transform:translateY(-50%)}.prism-player .prism-volume .volume-icon .short-horizontal{width:3px;background:#ebecec;height:8px;position:absolute;right:10px;top:50%;-ms-transform:translateY(-50%);transform:translateY(-50%)}.prism-player .prism-volume .volume-icon:hover{-ms-transform-origin:0 50%;transform-origin:0 50%;background-size:contain;cursor:pointer}.prism-player .prism-volume .mute .long-horizontal{-ms-transform:rotate(-45deg);transform:rotate(-45deg);height:12px;top:10px;left:22px}.prism-player .prism-volume .mute .short-horizontal{-ms-transform:rotate(45deg);transform:rotate(45deg);height:12px;top:10px;left:22px}.prism-player .prism-volume-control{position:absolute;bottom:44px;display:none;background:rgba(60,60,60,.95);box-shadow:0 0 6px 0 rgba(0,0,0,.1);width:32px;height:130px;z-index:10000}.prism-player .prism-volume-control .volume-control-icon{width:32px;height:32px;background:url(./img/unmutevolume.png) no-repeat;background-size:contain}.prism-player .prism-volume-control .volume-control-icon:hover{cursor:pointer;background:url(./img/volumehover.png) no-repeat;background-size:contain}.prism-player .prism-volume-control .volume-control-icon.mute{background:url(./img/volumemute.png) no-repeat;background-size:contain}.prism-player .prism-volume-control .volume-control-icon.mute:hover{background:url(./img/volumemutehover.png) no-repeat;background-size:contain;cursor:pointer}.prism-player .prism-volume-control:hover{cursor:pointer}.prism-player .prism-volume-control .volume-control-icon{position:absolute;bottom:6px;left:8px;width:26px;height:26px}.prism-player .prism-volume-control .volume-range{position:absolute;left:14px;bottom:10px;border-radius:1px;background:#6c6262;box-shadow:inset 1px 1px 1px 0 rgba(0,0,0,.06);width:4px;height:100px}.prism-player .prism-volume-control .volume-value{width:100%;height:0%;background:#30adf2;position:absolute;border-radius:1px;bottom:0}.prism-player .prism-volume-control .volume-cursor{position:absolute;bottom:0;background:#fff;width:15px;height:15px;border-radius:15px;left:-6px}.prism-player .prism-volume-control .volume-cursor:hover{background:#00c1de}.prism-player .prism-animation{width:64px;height:64px;border-radius:64px;opacity:0;position:absolute;left:50%;top:50%;-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.prism-player .prism-play-animation{background:url(./img/playanimation.png) no-repeat;background-size:contain}.prism-player .prism-pause-animation{background:url(./img/pauseanimation.png) no-repeat;background-size:contain}.prism-player .play-apply-animation{animation:prismplayanimation 1s 1;-moz-animation:prismplayanimation 1s 1;-webkit-animation:prismplayanimation 1s 1;-o-animation:prismplayanimation 1s 1;animation-fill-mode:both}@keyframes prismplayanimation{0%{width:32px;height:32px;border-radius:32px;opacity:0}50%{width:32px;height:32px;border-radius:32px;opacity:1}99%{width:76px;height:76px;border-radius:76px;opacity:0}100%{width:0;height:0}}@keyframes spinoffPulse{0%{transform:rotate(0);-webkit-transform:rotate(0);-moz-transform:rotate(0)}100%{transform:rotate(360deg);-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg)}}@keyframes hoverAnimationRotate{0%{transform:rotate(0);-webkit-transform:rotate(0);-moz-transform:rotate(0)}50%{transform:rotate(45deg);-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg)}100%{transform:rotate(0);-webkit-transform:rotate(0);-moz-transform:rotate(0)}}@keyframes hoverAnimationScale{0%{transform:scale(1);-webkit-transform:scale(1);-moz-transform:scale(1)}50%{transform:scale(1.2);-webkit-transform:scale(1.2);-moz-transform:scale(1.2)}100%{transform:scale(1);-webkit-transform:scale(1);-moz-transform:scale(1)}}@keyframes hoverAnimationScaleX{0%{transform:scaleX(1);-webkit-transform:scaleX(1);-moz-transform:scaleX(1)}50%{transform:scaleX(1.2);-webkit-transform:scaleX(1.2);-moz-transform:scaleX(1.2)}100%{transform:scaleX(1);-webkit-transform:scaleX(1);-moz-transform:scaleX(1)}}@keyframes hoverVolumeAnimation{0%{opacity:1}50%{opacity:0}100%{opacity:1}}.volume-hover-animation{animation:hoverVolumeAnimation .3s 1;-moz-animation:hoverVolumeAnimation .3s 1;-webkit-animation:hoverVolumeAnimation .3s 1;-o-animation:hoverVolumeAnimation .3s 1}@keyframes hoverPlayButtonAnimation{0%{width:63px;height:63px;border:7px solid #fff}60%{width:90px;height:90px;border:7px solid rgba(255,255,255,.51)}100%{width:97px;height:97px;border:14px solid rgba(255,255,255,0)}}@keyframes warn{0%{transform:scale(1);opacity:0}25%{transform:scale(1);opacity:.1}50%{transform:scale(1.1);opacity:.3}75%{transform:scale(1.5);opacity:.5}100%{transform:scale(2);opacity:0}}.big-playbtn-hover-animation{animation:warn 1s ease-out;-moz-animation:warn 1s ease-out;-webkit-animation:warn 1s ease-out;-o-animation:warn 1s ease-out}.big-playbtn-hover-animation1{animation:hoverPlayButtonAnimation 1s 1;-moz-animation:hoverPlayButtonAnimation 1s 1;-webkit-animation:hoverPlayButtonAnimation 1s 1;-o-animation:hoverPlayButtonAnimation 1s 1}.prism-player{background-color:#000;position:relative}.prism-player a{text-decoration:none}.prism-player video{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-moz-transform:translate(-50%,-50%);-webkit-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);-ms-transform-origin:center;-moz-transform-origin:center;-webkit-transform-origin:center;-o-transform-origin:center}.prism-player .x5-full-screen{object-fit:fill;object-position:50% 50%}.prism-player .x5-top-left{object-fit:contain;object-position:0 0}.prism-player .prism-cover{width:100%;height:100%;background-repeat:no-repeat;background-position:center;background-size:cover;position:absolute;top:0;left:0;z-index:11}.prism-player .prism-ErrorMessage{width:100%;height:100%;background-color:#000;background-repeat:no-repeat;background-position:center;background-size:contain;position:absolute;z-index:99;top:0;left:0;overflow:hidden;display:none}.prism-player .prism-ErrorMessage .prism-error-content{margin-top:20px;padding:0 5px}.prism-player .prism-ErrorMessage .prism-error-content p{text-align:center;font-size:12px;color:#fff}.prism-player .prism-ErrorMessage .prism-error-operation{margin-top:10px;margin-bottom:10px;padding-bottom:5px;border-bottom:1.5px;border-bottom-color:rgba(255,255,255,.15);border-bottom-style:dotted;text-align:center}.prism-player .prism-ErrorMessage .prism-error-operation a{width:80px;height:32px;line-height:32px;vertical-align:top;display:inline-block;margin-left:10px}.prism-player .prism-ErrorMessage .prism-error-operation a.prism-button-refresh{color:#21c5e0;border:solid 1px #21c5e0}.prism-player .prism-ErrorMessage .prism-error-operation a.prism-button-refresh:hover{color:#05d3f5;border-color:#05d3f5;cursor:pointer}.prism-player .prism-ErrorMessage .prism-error-operation a.prism-button-refresh:active{color:#026a7b;border-color:#026a7b}.prism-player .prism-ErrorMessage .prism-error-operation .prism-button-orange:visited{color:#05d3f5}.prism-player .prism-ErrorMessage .prism-detect-info{color:#fff;font-size:10px}.prism-player .prism-ErrorMessage .prism-detect-info p{padding:0 5px;word-break:break-all;margin:0 0 4px}.prism-player .prism-ErrorMessage .prism-detect-info span.info-label{display:inline-block;font-weight:700}.prism-player .prism-ErrorMessage .prism-detect-info span.info-content{color:gray}.prism-player .prism-big-play-btn{display:none;z-index:1000}.prism-player .prism-controlbar{width:100%;height:44px;position:relative;z-index:10;font-size:14px}.prism-player .prism-controlbar .prism-controlbar-bg{background:rgba(75,75,75,.15);width:100%;height:40px;position:absolute;bottom:0;left:0;z-index:-1}.prism-player .prism-time-display{height:40px;line-height:40px;color:#a4aab3;font-size:12px}.prism-player .prism-time-display .current-time{color:#fff}.prism-player .prism-live-time-display{height:44px;line-height:44px;color:#a4aab3;font-size:12px}.prism-player .prism-live-time-display span{display:inline}.prism-player .prism-live-time-display .live-text{margin-left:5px;font-size:12px;color:#ebecec}.prism-player .prism-live-time-display .current-time{color:#fff}.prism-player .prism-fullscreen-btn:hover{animation:hoverAnimationScale 1s 1;-moz-animation:hoverAnimationScale 1s 1;-webkit-animation:hoverAnimationScale 1s 1;-o-animation:hoverAnimationScale 1s 1}.prism-player .prism-liveshift-progress,.prism-player .prism-progress{bottom:40px!important;width:100%;height:4px;background:rgba(195,197,198,.5);box-shadow:inset 1px 1px 1px 0 rgba(0,0,0,.06);position:relative;cursor:pointer}.prism-player .prism-liveshift-progress .prism-progress-time,.prism-player .prism-progress .prism-progress-time{position:absolute;top:-25px;background:rgba(0,0,0,.8);box-shadow:0 0 5px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 0 5px 0 rgba(0,0,0,.1);color:#fff;font-size:14px;border-radius:7.5px;padding:0 6px 0 6px;text-align:center;white-space:nowrap}.prism-player .prism-liveshift-progress .prism-progress-loaded,.prism-player .prism-progress .prism-progress-loaded{position:absolute;top:0;left:0;width:0;height:100%;background:#c3c5c6}.prism-player .prism-liveshift-progress .prism-progress-played,.prism-player .prism-progress .prism-progress-played{position:absolute;top:0;left:0;width:0;height:100%;background-color:#00c1de}.prism-player .prism-liveshift-progress .prism-progress-cursor,.prism-player .prism-progress .prism-progress-cursor{position:absolute;border-radius:8px;top:-5px;width:16px;height:16px;overflow:hidden;box-sizing:content-box;background:url(./img/dragcursorhover.png) center;display:none}.prism-player .prism-liveshift-progress .prism-progress-cursor img,.prism-player .prism-progress .prism-progress-cursor img{width:14px;height:14px;position:absolute;top:50%;left:50%;-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.prism-player .prism-liveshift-progress .cursor-hover,.prism-player .prism-progress .cursor-hover{border-radius:9px;width:18px;height:18px;top:-5px!important}.prism-player .prism-liveshift-progress .cursor-hover img,.prism-player .prism-progress .cursor-hover img{width:16px;height:16px}.prism-player .prism-liveshift-progress .prism-progress-marker,.prism-player .prism-progress .prism-progress-marker{width:100%;height:100%;position:absolute}.prism-player .prism-liveshift-progress .prism-progress-marker .prism-marker-dot,.prism-player .prism-progress .prism-progress-marker .prism-marker-dot{position:absolute;background:#d9edf7;width:5px;height:100%;border-radius:20%}.prism-player .prism-progress-hover{cursor:pointer;height:6px;transition:height .1s}.prism-player .prism-progress-hover .prism-marker-dot{width:10px;height:80%;top:8%;border-radius:30%}.prism-player .prism-progress-hover .prism-progress-cursor{top:-4px}.prism-player .prism-liveshift-progress{background:0 0}.prism-player .prism-liveshift-progress .prism-enable-liveshift{cursor:pointer;position:absolute;background:#fff;height:4px}.prism-player .prism-liveshift-progress .prism-enable-liveshift:hover{height:6px;transition:height .1s}.prism-player .prism-liveshift-progress .prism-liveshift-seperator{height:15px;position:absolute;right:0;top:-8px;color:#fff;margin-right:5px;margin-left:5px;right:-65px}.prism-player .prism-marker-text{padding:5px;background:rgba(0,0,0,.8);position:absolute;max-width:180px;max-height:100px;bottom:50px;color:#fff;border-radius:3px;z-index:9999;display:none;overflow:auto}.prism-player .prism-marker-text p{text-align:center;word-break:break-all;margin:0;font-size:12px}.prism-player .prism-loading{width:55px;height:55px;z-index:10}.prism-player .prism-loading .circle{background-color:rgba(0,0,0,0);border:5px solid;border-color:rgba(0,193,222,.2) rgba(0,193,222,.5) rgba(0,193,222,.7) rgba(0,193,222,.1);opacity:.9;border-radius:50px;width:45px;height:45px;margin:0 auto;-moz-animation:spinoffPulse .9s infinite linear;-webkit-animation:spinoffPulse .9s infinite linear}.prism-player .prism-hide{display:none}.prism-player .prism-snapshot-btn{width:32px;height:32px;background:url(./img/snapshot.png) no-repeat;background-size:contain}.prism-player .prism-snapshot-btn:hover{animation:hoverAnimationScale 1s 1;-moz-animation:hoverAnimationScale 1s 1;-webkit-animation:hoverAnimationScale 1s 1;-o-animation:hoverAnimationScale 1s 1;cursor:pointer}.prism-player .prism-snapshot-btn:active{displa:block}.prism-player .prism-info-display{width:100%;color:#fff;font-size:18px;text-align:center;top:50%;position:absolute;z-index:900;height:44px;line-height:28px;font-size:16px;padding:10px 12px 10px 12px}.prism-player .prism-info-display span{color:#00c1de}.prism-player .prism-info-left-bottom{width:auto!important;top:auto!important;bottom:70px;left:20px!important;text-align:left}.prism-player .prism-info-top-center{width:auto!important;top:20px!important;left:50%!important;text-align:left!important;-ms-transform:translateX(-50%)!important;transform:translateX(-50%)!important;color:red!important}.prism-player .prism-info-black{color:#000!important}.prism-player .prism-auto-stream-selector{position:absolute;bottom:50%;width:100%;margin:auto;color:#efeff4;display:none}.prism-player .prism-auto-stream-selector p.tip-text{text-align:center}.prism-player .prism-auto-stream-selector .operators{width:100px;margin:auto}.prism-player .prism-button-cancel{font-size:16px;border:1px #ffffffa8 solid;padding:2px 5px 2px 5px;color:#ffffffa8;margin-left:5px;background:#503f3f3d}.prism-player .prism-button-ok{font-size:16px;border:1px #fff solid;padding:2px 5px 2px 5px;color:#fff;background:#503f3f63}.prism-player .prism-button-cancel:hover,.prism-player .prism-button-ok:hover{color:#f5f5f5}.prism-player .prism-cc-btn{height:24px;width:24px;background:url(./img/cc.png) center no-repeat;background-size:contain}.prism-player .prism-cc-btn:hover{cursor:pointer;animation:hoverAnimationScale 1s 1;-moz-animation:hoverAnimationScale 1s 1;-webkit-animation:hoverAnimationScale 1s 1;-o-animation:hoverAnimationScale 1s 1}.prism-player .prism-setting-btn{height:24px;width:24px;background:url(./img/setting.png) center no-repeat;background-size:contain}.prism-player .prism-setting-btn:hover{cursor:pointer;animation:hoverAnimationRotate 1s 1;-moz-animation:hoverAnimationRotate 1s 1;-webkit-animation:hoverAnimationRotate 1s 1;-o-animation:hoverAnimationRotate 1s 1}.prism-player .prism-setting-list{background:rgba(60,60,60,.95);width:220px;position:absolute;right:14px;bottom:45px;display:none;z-index:10000;text-align:left}.prism-player .prism-setting-list .prism-setting-item{font-size:14px;color:#ebecec;height:30px}.prism-player .prism-setting-list .prism-setting-item .setting-content{width:100%}.prism-player .prism-setting-list .prism-setting-item .setting-content:hover{background:rgba(216,216,216,.1);cursor:pointer}.prism-player .prism-setting-list .prism-setting-item .setting-content span{line-height:30px}.prism-player .prism-setting-list .prism-setting-item .setting-content .setting-title{margin-left:15px}.prism-player .prism-setting-list .prism-setting-item .setting-content .current-setting{float:right}.prism-player .prism-setting-list .prism-setting-item .array{display:inline-block;border-right:2px solid;border-bottom:2px solid;border-color:#fff;width:8px;height:8px;-ms-transform:rotate(-45deg);transform:rotate(-45deg);margin-right:10px;margin-top:10px;margin-left:10px;float:right}.prism-player .prism-setting-selector{right:40px;position:absolute;bottom:45px;width:150px;background:rgba(60,60,60,.95);font-size:14px;color:#ebecec;display:none;z-index:10000;text-align:left}.prism-player .prism-setting-selector .header{background:#242424;width:150px;height:30px}.prism-player .prism-setting-selector .header:hover{cursor:pointer}.prism-player .prism-setting-selector .header .left-array{display:inline-block;border-left:2px solid;border-bottom:2px solid;border-color:#fff;width:8px;height:8px;-ms-transform:rotate(45deg);transform:rotate(45deg);margin-right:6px;margin-top:12px;margin-left:16px;float:left}.prism-player .prism-setting-selector .header span{line-height:30px}.prism-player .prism-setting-selector ul{list-style-type:none;padding-left:0;max-height:150px;overflow-y:auto;padding-left:16px;margin-top:5px}.prism-player .prism-setting-selector ul li{height:28px;padding-left:10px}.prism-player .prism-setting-selector ul li.current{color:#30adf2;padding-left:0}.prism-player .prism-setting-selector ul li.current:before{content:"";display:inline-block;line-height:0;border:5px solid transparent;border-left-color:#30adf2;border-right-width:0;margin-top:5px;padding-right:5px}.prism-player .prism-setting-selector ul li:hover{background:rgba(216,216,216,.1);cursor:pointer}.prism-player .prism-setting-selector ul span{line-height:28px}.prism-player .prism-thumbnail{border:1px solid rgba(0,0,0,.8);width:174px;height:98px;position:absolute;bottom:50px;display:none}.prism-player .prism-thumbnail .none{border:none}.prism-player .prism-thumbnail span{font-size:12px;color:#fff;line-height:20px;background:rgba(0,0,0,.8);text-align:center;text-shadow:1px 1px 4px #373d41;padding-left:5px;padding-right:5px;display:inline-block;position:absolute;bottom:0;left:33%}.prism-player .prism-tooltip{background:#3c3c3c;box-shadow:0 0 5px 0 rgba(0,0,0,.1);height:28px;margin:0;padding-left:5px;padding-right:5px;padding-top:0;padding-bottom:0;position:absolute;bottom:50px;color:#fff;line-height:28px;font-size:10px;white-space:nowrap;display:none}:-webkit-full-screen{width:100%!important;height:100%!important}:-moz-full-screen{width:100%!important;height:100%!important}:-ms-full-screen{width:100%!important;height:100%!important}:-ms-fullscreen{width:100%!important;height:100%!important}:-webkit-full-screen{width:100%!important;height:100%!important}:fullscreen{width:100%!important;height:100%!important}body.prism-full-window{padding:0;margin:0;height:100%;overflow-y:auto}.prism-fullscreen{position:fixed;overflow:hidden;z-index:99999;left:0!important;top:0!important;bottom:0!important;right:0!important;width:100%!important;height:100%!important;position:absolute}.prism-button{cursor:pointer;text-align:center;text-shadow:0 1px 1px rgba(0,0,0,.3);border-radius:.5em;box-shadow:0 1px 2px rgba(0,0,0,.2)}.prism-button-orange{color:#a56117;border:solid 1px #a56117}.prism-button-retry{color:#f2dede;border:solid 1px #f2dede}.prism-button-orange:hover{color:#d67400;border-color:#d67400}.prism-button-orange:active{color:#d67400;border-color:#d67400}.prism-button-orange:visited{color:#d67400}.prism-button-retry:hover{color:#fcf8e3;border-color:#fcf8e3}.prism-button-retry:active{color:#fcf8e3;border-color:#fcf8e3}.prism-button-retry:visited{color:#fcf8e3}.prism-center{position:absolute;left:50%;-ms-transform:translateX(-50%);transform:translateX(-50%)}.prism-width90{width:90%}.prism-stream-selector{font-size:16px;position:relative;line-height:32px}.prism-stream-selector .current-stream-selector{text-align:center;width:70px;display:none;color:#efeff4}.prism-stream-selector .current-stream-selector:hover{cursor:pointer;color:#00c1de}.prism-stream-selector .stream-selector-tip{color:#fff;text-align:center;padding:2px 5px 2px 5px;display:none;position:absolute;bottom:61.5px;white-space:nowrap;left:43%;font-size:18px}.prism-stream-selector .stream-selector-list{position:absolute;bottom:32px;background:rgba(0,0,0,.5);color:#efeff4;padding:5px 5px 0 5px;width:70px;margin:0;display:none}.prism-stream-selector .stream-selector-list li{list-style-type:none;text-align:center;white-space:nowrap;padding:0 2px 0 2px;line-height:24px}.prism-stream-selector .stream-selector-list li:last-child{margin-bottom:10px}.prism-stream-selector .stream-selector-list li.current{color:#00c1de}.prism-stream-selector .stream-selector-list li span.current{color:#00c1de}.prism-stream-selector .stream-selector-list li:hover{cursor:pointer;color:#00c1de}.prism-speed-selector{font-size:16px;position:relative;line-height:32px}.prism-speed-selector .current-speed-selector{color:#efeff4;text-align:center;width:60px}.prism-speed-selector .current-speed-selector:hover{cursor:pointer;color:#00c1de}.prism-speed-selector .speed-selector-list{position:absolute;bottom:32px;background:rgba(0,0,0,.5);color:#efeff4;padding:5px 5px 0 5px;display:none;margin:0}.prism-speed-selector .speed-selector-list li{list-style-type:none;text-align:center;white-space:nowrap;padding:0 2px 0 2px;line-height:24px}.prism-speed-selector .speed-selector-list li:last-child{margin-bottom:10px}.prism-speed-selector .speed-selector-list li.current{color:#00c1de}.prism-speed-selector .speed-selector-list li span.current{color:#00c1de}.prism-speed-selector .speed-selector-list li:hover{cursor:pointer;color:#00c1de}.prism-ai-container{position:absolute;overflow:hidden}.prism-ai-container .prism-ai-marking{font-size:12px;position:absolute}.prism-ai-container .prism-ai-marking[vh=large]{font-size:18px}.prism-ai-container .prism-ai-marking[vh=middle]{font-size:16px}.prism-ai-container .prism-ai-marking .prism-ai-rect-region{position:relative;display:inline-block}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-title{height:0;-ms-transform:translateY(-40px);transform:translateY(-40px)}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-title p{background:#ff1d00;text-align:center;width:100%;color:#fff;word-break:keep-all;margin:10px 0 0 0}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-title .top-left-anchor{width:5px;height:5px;border-top-color:red;border-top-style:solid;border-left-color:red;border-left-style:solid;border-width:1px;-ms-transform:translate(-5px,10px);transform:translate(-5px,10px)}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-title .top-right-anchor{width:5px;height:5px;border-top-color:red;border-top-style:solid;border-right-color:red;border-right-style:solid;border-width:1px;-ms-transform:translate(5px,5px);transform:translate(5px,5px);float:right}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-rect{border-style:solid;border-color:#ff1d00;border-width:1px;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;color:rgba(255,29,0,.3);background:rgba(255,29,0,.1)}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-rect .prism-ai-slash-container{overflow:hidden;width:100%;height:100%;position:absolute}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-rect .prism-ai-slash{content:"";display:block;box-sizing:border-box;border-top-width:1px;border-top-style:solid;height:10px;margin-top:15px;border-bottom-width:1px;border-bottom-style:solid;transform:rotateZ(-45deg) scaleX(2);-ms-transform-origin:bottom center;transform-origin:bottom center}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .prism-ai-rect .prism-ai-top-slash{margin-top:-10px!important}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .anchor-plug{position:absolute}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .top-left{top:-7px;left:-2px}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .top-right{top:-7px;right:-2px}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .bottom-left{bottom:-8px;left:-2px}.prism-ai-container .prism-ai-marking .prism-ai-rect-region .bottom-right{bottom:-8px;right:-2px}.prism-ai-container .prism-ai-marking .prism-ai-labels{color:#fff;float:right;background:rgba(0,0,0,.4);padding-top:5px;padding-bottom:5px}.prism-ai-container .prism-ai-marking .prism-ai-labels p{text-align:left;padding-left:5px;padding-right:5px;margin:0}.prism-ai-container .prism-ai-marking .prism-ai-labels a{padding-left:5px;padding-right:5px}.prism-ai-container .prism-ai-marking .prism-ai-labels p[vh=large]{padding-left:25px;padding-right:25px}.prism-ai-container .prism-ai-marking .prism-ai-labels p[vh=middle]{padding-left:15px;padding-right:15px}video::-webkit-media-text-track-container{overflow:visible!important}video::cue{line-height:1.7}.disabled{pointer-events:none;color:gray}.center{position:absolute;top:50%;left:50%;-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}
\ No newline at end of file
diff --git a/src/plugins/aliplayer/aliplayer-min.js b/src/plugins/aliplayer/aliplayer-min.js
new file mode 100644
index 0000000..d06872e
--- /dev/null
+++ b/src/plugins/aliplayer/aliplayer-min.js
@@ -0,0 +1,2 @@
+/*! Aliplayer - v2.8.2 - 2019-05-09 16.34.41 */
+!function n(a,s,l){function u(t,e){if(!s[t]){if(!a[t]){var i="function"==typeof require&&require;if(!e&&i)return i(t,!0);if(c)return c(t,!0);var r=new Error("Cannot find module '"+t+"'");throw r.code="MODULE_NOT_FOUND",r}var o=s[t]={exports:{}};a[t][0].call(o.exports,function(e){return u(a[t][1][e]||e)},o,o.exports,n,a,s,l)}return s[t].exports}for(var c="function"==typeof require&&require,e=0;e<l.length;e++)u(l[e]);return u}({1:[function(e,t,i){!function(){"use strict";function l(o,e){var t;if(e=e||{},this.trackingClick=!1,this.trackingClickStart=0,this.targetElement=null,this.touchStartX=0,this.touchStartY=0,this.lastTouchIdentifier=0,this.touchBoundary=e.touchBoundary||10,this.layer=o,this.tapDelay=e.tapDelay||200,this.tapTimeout=e.tapTimeout||700,!l.notNeeded(o)){for(var i=["onMouse","onClick","onTouchStart","onTouchMove","onTouchEnd","onTouchCancel"],r=this,n=0,a=i.length;n<a;n++)r[i[n]]=s(r[i[n]],r);u&&(o.addEventListener("mouseover",this.onMouse,!0),o.addEventListener("mousedown",this.onMouse,!0),o.addEventListener("mouseup",this.onMouse,!0)),o.addEventListener("click",this.onClick,!0),o.addEventListener("touchstart",this.onTouchStart,!1),o.addEventListener("touchmove",this.onTouchMove,!1),o.addEventListener("touchend",this.onTouchEnd,!1),o.addEventListener("touchcancel",this.onTouchCancel,!1),Event.prototype.stopImmediatePropagation||(o.removeEventListener=function(e,t,i){var r=Node.prototype.removeEventListener;"click"===e?r.call(o,e,t.hijacked||t,i):r.call(o,e,t,i)},o.addEventListener=function(e,t,i){var r=Node.prototype.addEventListener;"click"===e?r.call(o,e,t.hijacked||(t.hijacked=function(e){e.propagationStopped||t(e)}),i):r.call(o,e,t,i)}),"function"==typeof o.onclick&&(t=o.onclick,o.addEventListener("click",function(e){t(e)},!1),o.onclick=null)}function s(e,t){return function(){return e.apply(t,arguments)}}}var e=0<=navigator.userAgent.indexOf("Windows Phone"),u=0<navigator.userAgent.indexOf("Android")&&!e,s=/iP(ad|hone|od)/.test(navigator.userAgent)&&!e,c=s&&/OS 4_\d(_\d)?/.test(navigator.userAgent),d=s&&/OS [6-7]_\d/.test(navigator.userAgent),o=0<navigator.userAgent.indexOf("BB10");l.prototype.needsClick=function(e){switch(e.nodeName.toLowerCase()){case"button":case"select":case"textarea":if(e.disabled)return!0;break;case"input":if(s&&"file"===e.type||e.disabled)return!0;break;case"label":case"iframe":case"video":return!0}return/\bneedsclick\b/.test(e.className)},l.prototype.needsFocus=function(e){switch(e.nodeName.toLowerCase()){case"textarea":return!0;case"select":return!u;case"input":switch(e.type){case"button":case"checkbox":case"file":case"image":case"radio":case"submit":return!1}return!e.disabled&&!e.readOnly;default:return/\bneedsfocus\b/.test(e.className)}},l.prototype.sendClick=function(e,t){var i,r;document.activeElement&&document.activeElement!==e&&document.activeElement.blur(),r=t.changedTouches[0],(i=document.createEvent("MouseEvents")).initMouseEvent(this.determineEventType(e),!0,!0,window,1,r.screenX,r.screenY,r.clientX,r.clientY,!1,!1,!1,!1,0,null),i.forwardedTouchEvent=!0,e.dispatchEvent(i)},l.prototype.determineEventType=function(e){return u&&"select"===e.tagName.toLowerCase()?"mousedown":"click"},l.prototype.focus=function(e){var t;s&&e.setSelectionRange&&0!==e.type.indexOf("date")&&"time"!==e.type&&"month"!==e.type?(t=e.value.length,e.setSelectionRange(t,t)):e.focus()},l.prototype.updateScrollParent=function(e){var t,i;if(!(t=e.fastClickScrollParent)||!t.contains(e)){i=e;do{if(i.scrollHeight>i.offsetHeight){t=i,e.fastClickScrollParent=i;break}i=i.parentElement}while(i)}t&&(t.fastClickLastScrollTop=t.scrollTop)},l.prototype.getTargetElementFromEventTarget=function(e){return e.nodeType===Node.TEXT_NODE?e.parentNode:e},l.prototype.onTouchStart=function(e){var t,i,r;if(1<e.targetTouches.length)return!0;if(t=this.getTargetElementFromEventTarget(e.target),i=e.targetTouches[0],s){if((r=window.getSelection()).rangeCount&&!r.isCollapsed)return!0;if(!c){if(i.identifier&&i.identifier===this.lastTouchIdentifier)return e.preventDefault(),!1;this.lastTouchIdentifier=i.identifier,this.updateScrollParent(t)}}return this.trackingClick=!0,this.trackingClickStart=e.timeStamp,this.targetElement=t,this.touchStartX=i.pageX,this.touchStartY=i.pageY,e.timeStamp-this.lastClickTime<this.tapDelay&&e.preventDefault(),!0},l.prototype.touchHasMoved=function(e){var t=e.changedTouches[0],i=this.touchBoundary;return Math.abs(t.pageX-this.touchStartX)>i||Math.abs(t.pageY-this.touchStartY)>i},l.prototype.onTouchMove=function(e){return this.trackingClick&&(this.targetElement!==this.getTargetElementFromEventTarget(e.target)||this.touchHasMoved(e))&&(this.trackingClick=!1,this.targetElement=null),!0},l.prototype.findControl=function(e){return void 0!==e.control?e.control:e.htmlFor?document.getElementById(e.htmlFor):e.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")},l.prototype.onTouchEnd=function(e){var t,i,r,o,n,a=this.targetElement;if(!this.trackingClick)return!0;if(e.timeStamp-this.lastClickTime<this.tapDelay)return this.cancelNextClick=!0;if(e.timeStamp-this.trackingClickStart>this.tapTimeout)return!0;if(this.cancelNextClick=!1,this.lastClickTime=e.timeStamp,i=this.trackingClickStart,this.trackingClick=!1,this.trackingClickStart=0,d&&(n=e.changedTouches[0],(a=document.elementFromPoint(n.pageX-window.pageXOffset,n.pageY-window.pageYOffset)||a).fastClickScrollParent=this.targetElement.fastClickScrollParent),"label"===(r=a.tagName.toLowerCase())){if(t=this.findControl(a)){if(this.focus(a),u)return!1;a=t}}else if(this.needsFocus(a))return 100<e.timeStamp-i||s&&window.top!==window&&"input"===r?this.targetElement=null:(this.focus(a),this.sendClick(a,e),s&&"select"===r||(this.targetElement=null,e.preventDefault())),!1;return!(!s||c||!(o=a.fastClickScrollParent)||o.fastClickLastScrollTop===o.scrollTop)||(this.needsClick(a)||(e.preventDefault(),this.sendClick(a,e)),!1)},l.prototype.onTouchCancel=function(){this.trackingClick=!1,this.targetElement=null},l.prototype.onMouse=function(e){return!this.targetElement||(!!e.forwardedTouchEvent||(!e.cancelable||(!(!this.needsClick(this.targetElement)||this.cancelNextClick)||(e.stopImmediatePropagation?e.stopImmediatePropagation():e.propagationStopped=!0,e.stopPropagation(),e.preventDefault(),!1))))},l.prototype.onClick=function(e){var t;return this.trackingClick?(this.targetElement=null,!(this.trackingClick=!1)):"submit"===e.target.type&&0===e.detail||((t=this.onMouse(e))||(this.targetElement=null),t)},l.prototype.destroy=function(){var e=this.layer;u&&(e.removeEventListener("mouseover",this.onMouse,!0),e.removeEventListener("mousedown",this.onMouse,!0),e.removeEventListener("mouseup",this.onMouse,!0)),e.removeEventListener("click",this.onClick,!0),e.removeEventListener("touchstart",this.onTouchStart,!1),e.removeEventListener("touchmove",this.onTouchMove,!1),e.removeEventListener("touchend",this.onTouchEnd,!1),e.removeEventListener("touchcancel",this.onTouchCancel,!1)},l.notNeeded=function(e){var t,i,r;if(void 0===window.ontouchstart)return!0;if(i=+(/Chrome\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1]){if(!u)return!0;if(t=document.querySelector("meta[name=viewport]")){if(-1!==t.content.indexOf("user-scalable=no"))return!0;if(31<i&&document.documentElement.scrollWidth<=window.outerWidth)return!0}}if(o&&10<=(r=navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/))[1]&&3<=r[2]&&(t=document.querySelector("meta[name=viewport]"))){if(-1!==t.content.indexOf("user-scalable=no"))return!0;if(document.documentElement.scrollWidth<=window.outerWidth)return!0}return"none"===e.style.msTouchAction||"manipulation"===e.style.touchAction||(!!(27<=+(/Firefox\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1]&&(t=document.querySelector("meta[name=viewport]"))&&(-1!==t.content.indexOf("user-scalable=no")||document.documentElement.scrollWidth<=window.outerWidth))||("none"===e.style.touchAction||"manipulation"===e.style.touchAction))},l.attach=function(e,t){return new l(e,t)},"function"==typeof define&&"object"==typeof define.amd&&define.amd?define(function(){return l}):void 0!==t&&t.exports?(t.exports=l.attach,t.exports.FastClick=l):window.FastClick=l}()},{}],2:[function(e,t,i){var r=e("../ui/component"),o=(e("../lib/util"),e("../lib/dom")),n=e("../lib/event"),a=(e("../lib/ua"),e("../lang/index")),s=e("../player/base/event/eventtype"),l=r.extend({init:function(e,t){r.call(this,e,t),this.className=t.className?t.className:"prism-auto-stream-selector",this.addClass(this.className)},createEl:function(){var e=r.prototype.createEl.call(this,"div");return e.innerHTML="<div><p class='tip-text'></p></div><div class='operators'><a class='prism-button prism-button-ok' type='button'>"+a.get("OK_Text")+"</a><a class='prism-button prism-button-cancel'  target='_blank'>"+a.get("Cancel_Text")+"</a></div>",e},bindEvent:function(){var r=this;r._player.on(s.Private.AutoStreamShow,function(e){var t=document.querySelector("#"+r.getId()+" .tip-text");if(r._player._getLowerQualityLevel){var i=r._player._getLowerQualityLevel();i&&(r._switchUrl=i,t.innerText=a.get("Auto_Stream_Tip_Text").replace("$$",i.item.desc),o.css(r.el(),"display","block"))}}),r._player.on(s.Private.AutoStreamHide,function(e){document.querySelector("#"+r.getId()+" .tip-text");o.css(r.el(),"display","none")});var e=document.querySelector("#"+r.getId()+" .prism-button-ok");n.on(e,"click",function(){r._player._changeStream&&r._switchUrl&&r._player._changeStream(r._switchUrl.index,a.get("Quality_Change_Text")),o.css(r.el(),"display","none")});var t=document.querySelector("#"+r.getId()+" .prism-button-cancel");n.on(t,"click",function(){o.css(r.el(),"display","none")})}});t.exports=l},{"../lang/index":11,"../lib/dom":18,"../lib/event":19,"../lib/ua":31,"../lib/util":33,"../player/base/event/eventtype":43,"../ui/component":94}],3:[function(e,t,i){var r=e("../ui/component"),s=e("../lib/dom"),o=e("../lib/event"),n=e("../lib/ua"),a=e("../lib/function"),l=(e("../lang/index"),e("../lib/util")),u=e("../config"),c=e("../lib/playerutil"),d=e("../player/base/event/eventtype"),p=r.extend({init:function(e,t){r.call(this,e,t),this.className=t.className?t.className:"prism-liveshift-progress",this.addClass(this.className),this._liveshiftService=e._liveshiftService},createEl:function(){var e=r.prototype.createEl.call(this);return e.innerHTML='<div class="prism-enable-liveshift"><div class="prism-progress-loaded"></div><div class="prism-progress-played"></div><div class="prism-progress-cursor"><img></img></div><p class="prism-progress-time"></p><div class="prism-liveshift-seperator">00:00:00</div></div><div class="prism-disable-liveshift"></div>',e},bindEvent:function(){var i=this;this.loadedNode=document.querySelector("#"+this.id()+" .prism-progress-loaded"),this.playedNode=document.querySelector("#"+this.id()+" .prism-progress-played"),this.cursorNode=document.querySelector("#"+this.id()+" .prism-progress-cursor"),this.timeNode=document.querySelector("#"+this.id()+" .prism-progress-time"),this.controlNode=document.querySelector("#"+this._player._options.id+" .prism-controlbar"),this.seperatorNode=document.querySelector("#"+this.id()+" .prism-liveshift-seperator"),this.progressNode=document.querySelector("#"+this.id()+" .prism-enable-liveshift");var e=document.querySelector("#"+this.id()+" .prism-progress-cursor img"),t="//"+u.domain+"/de/prismplayer/"+u.h5Version+"/skins/default/img/dragcursor.png";u.domain?-1<u.domain.indexOf("localhost")&&(t="//"+u.domain+"/build/skins/default/img/dragcursor.png"):t="de/prismplayer/"+u.h5Version+"/skins/default/img/dragcursor.png",e.src=t,o.on(this.cursorNode,"mousedown",function(e){i._onMouseDown(e)}),o.on(this.cursorNode,"touchstart",function(e){i._onMouseDown(e)}),o.on(this.progressNode,"mousemove",function(e){i._progressMove(e)}),o.on(this.progressNode,"touchmove",function(e){i._progressMove(e)}),o.on(this._el,"click",function(e){i._onMouseClick(e)}),this._player.on(d.Private.HideProgress,function(e){i._hideProgress(e)}),this._player.on(d.Private.CancelHideProgress,function(e){i._cancelHideProgress(e)}),this._player.on(d.Private.ShowBar,function(){i._updateLayout()}),o.on(this.progressNode,d.Private.MouseOver,function(e){i._onMouseOver(e)}),o.on(this.progressNode,d.Private.MouseOut,function(e){i._onMouseOut(e)}),this.bindTimeupdate=a.bind(this,this._onTimeupdate),this._player.on(d.Player.TimeUpdate,this.bindTimeupdate),c.isLiveShift(this._player._options)&&this._player.on(d.Player.Play,function(){i._liveshiftService.start(6e4,function(e){var t={mediaId:i._player._options.vid?i._player._options.vid:"",error_code:e.Code,error_msg:e.Message};i._player.logError(t),i._player.trigger(d.Player.Error,t)})}),this._player.on(d.Private.LiveShiftQueryCompleted,function(){i._updateSeperator(),i._updateLayout()}),this._player.on(d.Player.Pause,function(){i._liveshiftService.stop()}),n.IS_IPAD?this.interval=setInterval(function(){i._onProgress()},500):this._player.on(d.Video.Progress,function(){i._onProgress()})},_updateSeperator:function(){this._liveshiftService.currentTimeDisplay&&(this.seperatorNode.innerText=this._liveshiftService.currentTimeDisplay)},_updateLayout:function(){var e=this.seperatorNode.offsetWidth,t=this.el().offsetWidth,i=t-e;0!=e&&0!=i&&(s.css(this.progressNode,"width",100*(i-10)/t+"%"),s.css(this.seperatorNode,"right",-1*(e+10)+"px"))},_progressMove:function(e){var t=this._getSeconds(e),i=this._liveshiftService.availableLiveShiftTime;this.timeNode.innerText="-"+l.formatTime(i-t);var r=i?t/i:0,o=1-this.timeNode.clientWidth/this.el().clientWidth;o<r&&(r=o),this.timeNode&&s.css(this.timeNode,"left",100*r+"%")},_hideProgress:function(e){o.off(this.cursorNode,"mousedown"),o.off(this.cursorNode,"touchstart")},_cancelHideProgress:function(e){var t=this;o.on(this.cursorNode,"mousedown",function(e){t._onMouseDown(e)}),o.on(this.cursorNode,"touchstart",function(e){t._onMouseDown(e)})},_canSeekable:function(e){var t=!0;return"function"==typeof this._player.canSeekable&&(t=this._player.canSeekable(e)),t},_onMouseOver:function(e){this._updateCursorPosition(this._getCurrentTime()),s.css(this.timeNode,"display","block")},_onMouseOut:function(e){s.css(this.timeNode,"display","none")},_getSeconds:function(e){for(var t=this.el().offsetLeft,i=this.el();i=i.offsetParent;){var r=s.getTranslateX(i);t+=i.offsetLeft+r}var o=(e.touches?e.touches[0].pageX:e.pageX)-t,n=this.progressNode.offsetWidth,a=this._liveshiftService.availableLiveShiftTime;return sec=a?o/n*a:0,sec<0&&(sec=0),sec>a&&(sec=a),sec},_onMouseClick:function(e){var t=this,i=this._getSeconds(e),r=this._liveshiftService.availableLiveShiftTime-i;this._player.trigger(d.Private.SeekStart,{fromTime:this._getCurrentTime()});var o=this._liveshiftService.getSourceUrl(r),n=t._player._options.source,a=c.isHls(t._player._options.source);a&&o==n?t._player.seek(i):t._player._loadByUrlInner(o,i,!0),t._player.trigger(d.Private.Play_Btn_Hide),t._liveshiftService.seekTime=i,t._player.trigger(d.Private.EndStart,{toTime:i}),t._updateCursorPosition(i),a&&setTimeout(function(){t._player.play()})},_onMouseDown:function(e){var t=this;e.preventDefault(),this._player.trigger(d.Private.SeekStart,{fromTime:this._getCurrentTime()}),o.on(this.controlNode,"mousemove",function(e){t._onMouseMove(e)}),o.on(this.controlNode,"touchmove",function(e){t._onMouseMove(e)}),o.on(this._player.tag,"mouseup",function(e){t._onMouseUp(e)}),o.on(this._player.tag,"touchend",function(e){t._onMouseUp(e)}),o.on(this.controlNode,"mouseup",function(e){t._onMouseUp(e)}),o.on(this.controlNode,"touchend",function(e){t._onMouseUp(e)})},_onMouseUp:function(e){e.preventDefault(),o.off(this.controlNode,"mousemove"),o.off(this.controlNode,"touchmove"),o.off(this._player.tag,"mouseup"),o.off(this._player.tag,"touchend"),o.off(this.controlNode,"mouseup"),o.off(this.controlNode,"touchend");var t=this._liveshiftService.availableLiveShiftTime,i=this.playedNode.offsetWidth/this.el().offsetWidth*t;this._player.seek(i),this._player.trigger(d.Private.Play_Btn_Hide),this._liveshiftService.seekTime=i,this._player.trigger(d.Private.EndStart,{toTime:i})},_onMouseMove:function(e){e.preventDefault();var t=this._getSeconds(e);this._updateProgressBar(this.playedNode,t),this._updateCursorPosition(t)},_onTimeupdate:function(e){this._updateProgressBar(this.playedNode,this._getCurrentTime()),this._updateCursorPosition(this._getCurrentTime()),this._player.trigger(d.Private.UpdateProgressBar,{time:this._getCurrentTime()})},_getCurrentTime:function(){var e=this._liveshiftService.seekTime;return-1==e&&(e=0),this._player.getCurrentTime()+e},_onProgress:function(e){this._player.getDuration()&&1<=this._player.getBuffered().length&&this._updateProgressBar(this.loadedNode,this._player.getBuffered().end(this._player.getBuffered().length-1))},_updateProgressBar:function(e,t){if(1!=this._player._switchSourcing){var i=0;if(-1==this._liveshiftService.seekTime)i=1;else{var r=this._liveshiftService.availableLiveShiftTime;1<(i=r?t/r:0)&&(i=1,this._liveshiftService.seekTime=-1)}this.liveShiftStartDisplay;e&&s.css(e,"width",100*i+"%")}},_updateCursorPosition:function(e){if(this._player.el()&&1!=this._player._switchSourcing&&(0!=e||0!=this._player.tag.readyState)){var t=0,i=1,r=this._player.el().clientWidth;if(-1==this._liveshiftService.seekTime)t=1;else{var o=this._liveshiftService.availableLiveShiftTime;1<(t=o?e/o:0)&&(this._liveshiftService.seekTime=-1)}if(0!=r){var n=18/r;i=1-n,t-=n}this.cursorNode&&(i<t?(s.css(this.cursorNode,"right","0px"),s.css(this.cursorNode,"left","auto")):(s.css(this.cursorNode,"right","auto"),s.css(this.cursorNode,"left",100*t+"%")))}}});t.exports=p},{"../config":5,"../lang/index":11,"../lib/dom":18,"../lib/event":19,"../lib/function":20,"../lib/playerutil":29,"../lib/ua":31,"../lib/util":33,"../player/base/event/eventtype":43,"../ui/component":94}],4:[function(e,t,i){var r=e("../ui/component"),n=e("../lib/util"),a=e("../player/base/event/eventtype"),o=r.extend({init:function(e,t){r.call(this,e,t),this.className=t.className?t.className:"prism-live-time-display",this.addClass(this.className),this._liveshiftService=e._liveshiftService},createEl:function(){var e=r.prototype.createEl.call(this,"div");return e.innerHTML='<span class="current-time">00:00</span> <span class="time-bound">/</span> <span class="end-time">00:00</span><span class="live-text">Live: </span><span class="live-time"></span>',e},bindEvent:function(){var o=this;this._player.on(a.Video.TimeUpdate,function(){var e=o._liveshiftService,t=document.querySelector("#"+o.id()+" .current-time");if(e.liveShiftStartDisplay&&e.availableLiveShiftTime>e.seekTime&&-1!=e.seekTime){var i=o._liveshiftService.getBaseTime(),r=n.formatTime(i+o._player.getCurrentTime());t.innerText=r}else e.currentTimeDisplay&&(t.innerText=e.currentTimeDisplay)}),this._player.on(a.Private.LiveShiftQueryCompleted,function(){o.updateTime()})},updateTime:function(){document.querySelector("#"+this.id()+" .end-time").innerText=this._liveshiftService.liveTimeRange.endDisplay,document.querySelector("#"+this.id()+" .live-time").innerText=this._liveshiftService.currentTimeDisplay}});t.exports=o},{"../lib/util":33,"../player/base/event/eventtype":43,"../ui/component":94}],5:[function(e,t,i){t.exports={domain:"g.alicdn.com",flashVersion:"2.8.2",h5Version:"2.8.2",cityBrain:!0,logDuration:10,logCount:100,logReportTo:"https://videocloud.cn-hangzhou.log.aliyuncs.com/logstores/newplayer/track"}},{}],6:[function(e,t,i){e("./lang/index").load();var r=e("./player/adaptivePlayer"),o=e("./lib/componentutil"),n=e("./config"),a=function(e,t){return r.create(e,t)};a.getVersion=function(){return n.h5Version},o.register(a);var s=window.Aliplayer=a;a.players={},"function"==typeof define&&define.amd?define([],function(){return s}):"object"==typeof i&&"object"==typeof t&&(t.exports=s),"undefined"!=typeof Uint8Array&&(Uint8Array.prototype.slice||Object.defineProperty(Uint8Array.prototype,"slice",{value:Array.prototype.slice}))},{"./config":5,"./lang/index":11,"./lib/componentutil":14,"./player/adaptivePlayer":40}],7:[function(e,t,i){var r=e("../lib/oo"),o=e("../lang/index"),n=r.extend({init:function(e,t){this._player=e,this._options=e.options()}});n.prototype.handle=function(e){if(this._options.autoPlayDelay){var t=this._options.autoPlayDelayDisplayText;t||(t=o.get("AutoPlayDelayDisplayText").replace("$$",this._options.autoPlayDelay)),this._player.trigger("info_show",t),this._player.trigger("h5_loading_hide"),this._player.trigger("play_btn_hide");var i=this;this._timeHandler=setTimeout(function(){i._player.trigger("info_hide"),i._options.autoPlayDelay=0,e&&e()},1e3*this._options.autoPlayDelay),this._player.on("play",function(){a(i)}),this._player.on("pause",function(){a(i)})}},n.prototype.dispose=function(){a(this),this._player=null};var a=function(e){e._timeHandler&&(clearTimeout(e._timeHandler),e._timeHandler=null)};t.exports=n},{"../lang/index":11,"../lib/oo":27}],8:[function(e,t,i){t.exports=t.exports={OD:"OD",FD:"360p",LD:"540p",SD:"720p",HD:"1080p","2K":"2K","4K":"4K",FHD:"FHD",XLD:"XLD",SQ:"SQ",HQ:"HQ",Speed:"Speed",Speed_05X_Text:"0.5X",Speed_1X_Text:"Normal",Speed_125X_Text:"1.25X",Speed_15X_Text:"1.5X",Speed_2X_Text:"2X",Refresh_Text:"Refresh",Cancel:"Cancel",Mute:"Mute",Snapshot:"Snapshot",Detection_Text:"Diagnosis",Play_DateTime:"Time",Quality_Change_Fail_Switch_Text:"Cannot play, switch to ",Quality_Change_Text:"Switch to ",Quality_The_Url:"The url",AutoPlayDelayDisplayText:"Play in $$ seconds",Error_Load_Abort_Text:"Data abort erro",Error_Network_Text:"Loading failed due to network error",Error_Decode_Text:"Decode error",Error_Server_Network_NotSupport_Text:"Network error or \xa0the format of video is unsupported",Error_Offline_Text:"The network is unreachable, please click Refresh",Error_Play_Text:"Error occured while playing",Error_Retry_Text:" Please close or refresh",Error_AuthKey_Text:"Authentication expired or the domain is not in white list",Error_H5_Not_Support_Text:"The format of video is not supported by\xa0h5 player\uff0cplease use flash player",Error_Not_Support_M3U8_Text:"The format of m3u8 is not supported by this explorer",Error_Not_Support_MP4_Text:"The format of mp4\xa0is not supported by this explorer",Error_Not_Support_encrypt_Text:"Play the encrypted video,please set encryptType to 1",Error_Vod_URL_Is_Empty_Text:"The url is empty",Error_Vod_Fetch_Urls_Text:"Error occured when fetch urls\uff0cplease close or refresh",Fetch_Playauth_Error:"Error occured when fetch playauth close or refresh",Error_Playauth_Decode_Text:"PlayAuth parse failed",Error_Vid_Not_Same_Text:"Cannot renew url due to vid changed",Error_Playauth_Expired_Text:"Playauth expired, please close or refresh",Error_MTS_Fetch_Urls_Text:"Error occurred while requesting mst server",Error_Load_M3U8_Failed_Text:"The\xa0m3u8 file loaded failed",Error_Load_M3U8_Timeout_Text:"Timeout error occored\xa0when the\xa0m3u8 file loaded",Error_M3U8_Decode_Text:"The m3u8 file decoded failed",Error_TX_Decode_Text:"Video decoded failed",Error_Waiting_Timeout_Text:"Buffering timeout,\xa0please close or refresh",Error_Invalidate_Source:"Video shoud be mp4\u3001mp3\u3001m3u8\u3001mpd or flv",Error_Empty_Source:"Video URL shouldn't be empty",Error_Vid_Empty_Source:"vid's video URL hasn't been fetched",Error_Fetch_NotStream:"The vid has no stream to play",Error_Not_Found:"Url is not found",Live_End:"Live has finished",Play_Before_Fullscreen:"Please play before fullscreen",Can_Not_Seekable:"Can not seek to this position",Cancel_Text:"Cancel",OK_Text:"OK",Auto_Stream_Tip_Text:"Internet is slow, does switch to $$",Request_Block_Text:"This request is blocked, the video Url should be over https",Open_Html_By_File:"Html page should be on the server",Maybe_Cors_Error:"please make sure enable cors,<a href='https://help.aliyun.com/document_detail/62950.html?spm=a2c4g.11186623.2.21.Y3n2oi' target='_blank'>refer to document</a>",Speed_Switch_To:"Speed switch to ",Curent_Volume:"Current volume:",Volume_Mute:"set to mute",Volume_UnMute:"set to unmute",ShiftLiveTime_Error:"Live start time should not be greater than over time",Error_Not_Support_Format_On_Mobile:"flv\u3001rmtp can't be supported on mobile\uff0cplease use m3u8",SessionId_Ticket_Invalid:"please assign value for sessionId and ticket properties",Http_Error:" An HTTP network request failed with an error, but not from the server.",Http_Timeout:"A network request timed out",DRM_License_Expired:"DRM license is expired, please refresh",Not_Support_DRM:"Browser doesn't support DRM",CC_Switch_To:"Subtitle switch to ",AudioTrack_Switch_To:"Audio tracks switch to ",Subtitle:"Subtitle/CC",AudioTrack:"Audio Track",Quality:"Quality",Auto:"Auto",Quality_Switch_To:"Quality switch to ",Fullscreen:"Full Screen",Setting:"Settings",Volume:"Volume",Play:"Play",Pause:"Pause",CloseSubtitle:"Close CC",OpenSubtitle:"Open CC",ExistFullScreen:"Exit Full Screen",Muted:"Muted",Retry:"Retry",SwitchToLive:"Return to live",iOSNotSupportVodEncription:"iOS desn't suport Vod's encription video",UseChromeForVodEncription:"This browser desn't suport Vod's encription video, please use latest Chrome"}},{}],9:[function(e,t,i){t.exports=t.exports={OD:"OD",LD:"360p",FD:"540p",SD:"720p",HD:"1080p","2K":"2K","4K":"4K",FHD:"FHD",XLD:"XLD",SQ:"SQ",HQ:"HQ",Forbidden_Text:"Internal information is strictly forbidden to outsider",Refresh:"Refresh",Diagnosis:"Diagnosis",Live_Finished:"Live has finished, thanks for watching",Play:"Play",Pause:"Pause",Snapshot:"Snapshot",Replay:"Replay",Live:"Live",Encrypt:"Encrypt",Sound:"Sound",Fullscreen:"Full Screen",Exist_Fullscreen:"Exit Full-screen",Resolution:"Resolution",Next:"Next Video",Brightness:"Brightness",Default:"Default",Contrast:"Contrast",Titles_Credits:"Titles\xa0and\xa0Credits",Skip_Titles:"Skip Titles",Skip_Credits:"Skip Credits",Not_Support_Out_Site:"The video is not supported for outside website, please watch it by TaoTV",Watch_Now:"Watch now",Network_Error:"Network is unreachable, please try to refresh",Video_Error:"Playing a video error,\xa0please try to refresh",Decode_Error:"Data decoding\xa0error",Live_Not_Start:"Live has not started, to be expected",Live_Loading:"Live information is loading,\xa0please try to refresh",Fetch_Playauth_Error:"Error occured when fetch playauth close or refresh",Live_End:"Live has finished",Live_Abrot:"Signal aborted,\xa0please try to refresh",Corss_Domain_Error:"Please ensure your domain has obtained IPC license and combined CNAME, \r\n or to set\xa0\xa0cross-domain accessing available",Url_Timeout_Error:"The video url is timeout,\xa0please try to refresh",Connetction_Error:"Sorry\uff0cthe video cannot play because of connection error, please try to watch other videos",Fetch_MTS_Error:"Fetching video list failed, please ensure",Token_Expired_Error:"Requesting open api failed, please ensure token expired or not",Video_Lists_Empty_Error:"The video list is empty, please check the format of video",Encrypted_Failed_Error:"Fetching encrypted file failed, please check the permission of player",Fetch_Failed_Permission_Error:"Fetching video list failed, please check the permission of player",Invalidate_Param_Error:"No video url, please check the parameters",AutoPlayDelayDisplayText:"Play in $$ seconds",Fetch_MTS_NOT_NotStream_Error:"The vid has no stream to play",Cancel_Text:"Cancel",OK_Text:"OK",Auto_Stream_Tip_Text:"Internet is slow, does switch to $$",Open_Html_By_File:"Html page should be on the server",Cant_Use_Flash_On_Mobile:"Mobile doesn't support flash player\uff0cplease use h5 player",Flash_Not_Ready:"Flash Player plugin hasn't been installed <a href='https://www.flash.cn/' target='_blank'>install plugin</a>, or check if disable Flash plugin"}},{}],10:[function(e,t,i){t.exports=t.exports={OD:"\u539f\u753b",FD:"\u6d41\u7545",LD:"\u6807\u6e05",SD:"\u9ad8\u6e05",HD:"\u8d85\u6e05","2K":"2K","4K":"4K",FHD:"\u5168\u9ad8\u6e05",XLD:"\u6781\u901f",SQ:"\u666e\u901a\u97f3\u8d28",HQ:"\u9ad8\u97f3\u8d28",Forbidden_Text:"\u5185\u90e8\u4fe1\u606f\uff0c\u4e25\u7981\u5916\u4f20",Refresh:"\u5237\u65b0",Diagnosis:"\u8bca\u65ad",Live_Finished:"\u76f4\u64ad\u5df2\u7ed3\u675f,\u8c22\u8c22\u89c2\u770b",Play:"\u64ad\u653e",Pause:"\u6682\u505c",Snapshot:"\u622a\u56fe",Replay:"\u91cd\u64ad",Live:"\u76f4\u64ad",Encrypt:"\u52a0\u5bc6",Sound:"\u58f0\u97f3",Fullscreen:"\u5168\u5c4f",Exist_Fullscreen:"\u9000\u51fa\u5168\u5c4f",Resolution:"\u6e05\u6670\u5ea6",Next:"\u4e0b\u4e00\u96c6",Brightness:"\u4eae\u5ea6",Default:"\u9ed8\u8ba4",Contrast:"\u5bf9\u6bd4\u5ea6",Titles_Credits:"\u7247\u5934\u7247\u5c3e",Skip_Titles:"\u8df3\u8fc7\u7247\u5934",Skip_Credits:"\u8df3\u8fc7\u7247\u5c3e",Not_Support_Out_Site:"\u8be5\u89c6\u9891\u6682\u4e0d\u652f\u6301\u7ad9\u5916\u64ad\u653e\uff0c\u8bf7\u5230\u6dd8TV\u89c2\u770b",Watch_Now:"\u7acb\u5373\u89c2\u770b",Network_Error:"\u7f51\u7edc\u65e0\u6cd5\u8fde\u63a5\uff0c\u8bf7\u5c1d\u8bd5\u68c0\u67e5\u7f51\u7edc\u540e\u5237\u65b0\u8bd5\u8bd5",Video_Error:"\u89c6\u9891\u64ad\u653e\u5f02\u5e38\uff0c\u8bf7\u5237\u65b0\u8bd5\u8bd5",Decode_Error:"\u64ad\u653e\u6570\u636e\u89e3\u7801\u9519\u8bef",Live_Not_Start:"\u4eb2\uff0c\u76f4\u64ad\u8fd8\u672a\u5f00\u59cb\u54e6\uff0c\u656c\u8bf7\u671f\u5f85",Live_Loading:"\u76f4\u64ad\u4fe1\u606f\u52a0\u8f7d\u4e2d\uff0c\u8bf7\u5237\u65b0\u8bd5\u8bd5",Live_End:"\u4eb2\uff0c\u76f4\u64ad\u5df2\u7ed3\u675f",Live_Abrot:"\u5f53\u524d\u76f4\u64ad\u4fe1\u53f7\u4e2d\u65ad\uff0c\u8bf7\u5237\u65b0\u540e\u91cd\u8bd5",Corss_Domain_Error:"\u8bf7\u786e\u8ba4\u60a8\u7684\u57df\u540d\u5df2\u5b8c\u6210\u5907\u6848\u548cCNAME\u7ed1\u5b9a\uff0c\r\n\u5e76\u5904\u4e8e\u542f\u7528\u72b6\u6001\uff0c\u6216\u8d44\u6e90\u5141\u8bb8\u8de8\u8d8a\u8bbf\u95ee",Url_Timeout_Error:"\u60a8\u6240\u89c2\u770b\u7684\u89c6\u9891\u5730\u5740\u8fde\u63a5\u8d85\u65f6\uff0c\u8bf7\u5237\u65b0\u540e\u91cd\u8bd5",Connetction_Error:"\u62b1\u6b49,\u8be5\u89c6\u9891\u7531\u4e8e\u8fde\u63a5\u9519\u8bef\u6682\u65f6\u4e0d\u80fd\u64ad\u653e,\u8bf7\u89c2\u770b\u5176\u5b83\u89c6\u9891",Fetch_MTS_Error:"\u83b7\u53d6\u89c6\u9891\u5217\u8868\u5931\u8d25\uff0c\u8bf7\u786e\u8ba4",Token_Expired_Error:"\u8bf7\u6c42\u63a5\u53e3\u5931\u8d25\uff0c\u8bf7\u786e\u8ba4Token\u662f\u5426\u8fc7\u671f",Video_Lists_Empty_Error:"\u83b7\u53d6\u89c6\u9891\u5217\u8868\u4e3a\u7a7a\uff0c\u8bf7\u786e\u8ba4\u64ad\u653e\u6570\u636e\u4e0e\u683c\u5f0f",Encrypted_Failed_Error:"\u83b7\u53d6\u89c6\u9891\u52a0\u5bc6\u79d8\u94a5\u9519\u8bef\uff0c\u8bf7\u786e\u8ba4\u64ad\u653e\u6743\u9650",Fetch_Failed_Permission_Error:"\u83b7\u53d6\u89c6\u9891\u5217\u8868\u5931\u8d25\uff0c\u8bf7\u786e\u8ba4\u64ad\u653e\u6743\u9650",Invalidate_Param_Error:"\u65e0\u8f93\u5165\u89c6\u9891\uff0c\u8bf7\u786e\u8ba4\u8f93\u5165\u53c2\u6570",AutoPlayDelayDisplayText:"$$\u79d2\u4ee5\u540e\u5f00\u59cb\u64ad\u653e",Fetch_MTS_NOT_NotStream_Error:"\u6b64vid\u6ca1\u6709\u53ef\u64ad\u653e\u89c6\u9891",Cancel_Text:"\u53d6\u6d88",OK_Text:"\u786e\u8ba4",Auto_Stream_Tip_Text:"\u7f51\u7edc\u4e0d\u7ed9\u529b\uff0c\u662f\u5426\u5207\u6362\u5230$$",Fetch_Playauth_Error:"\u83b7\u53d6\u64ad\u653e\u51ed\u8bc1\u51fa\u9519\u5566\uff0c\u8bf7\u5c1d\u8bd5\u9000\u51fa\u91cd\u8bd5\u6216\u5237\u65b0",Open_Html_By_File:"\u4e0d\u80fd\u76f4\u63a5\u5728\u6d4f\u89c8\u5668\u6253\u5f00html\u6587\u4ef6\uff0c\u8bf7\u90e8\u7f72\u5230\u670d\u52a1\u7aef",Cant_Use_Flash_On_Mobile:"\u79fb\u52a8\u7aef\u4e0d\u652f\u6301Flash\u64ad\u653e\u5668\uff0c\u8bf7\u4f7f\u7528h5\u64ad\u653e\u5668",Flash_Not_Ready:"Flash Player\u63d2\u4ef6\u672a\u5b89\u88c5<a href='https://www.flash.cn/' target='_blank'>\u5b89\u88c5\u63d2\u4ef6</a>\uff0c\u5982\u679c\u5df2\u7ecf\u5b89\u88c5\u8bf7\u68c0\u67e5\u662f\u5426\u88ab\u7981\u7528"}},{}],11:[function(n,e,t){var i=n("../config"),a=n("../lib/storage"),o=(n("../lib/io"),"aliplayer_lang"),s=function(){if(void 0===window[o]||!window[o]){var e=(navigator.language||navigator.browserLanguage).toLowerCase();e=e&&-1<e.indexOf("zh")?"zh-cn":"en-us",window[o]=e}return window[o]},l=function(e,t){var i=d(e),r="",o=c();r="flash"==e?"en-us"==o?n("./flash/en-us"):"zh-cn"==o?n("./flash/zh-cn"):t[o]:"en-us"==o?n("./en-us"):"zh-cn"==o?n("./zh-cn"):t[o],a.set(i,JSON.stringify(r)),u(e,r)},u=function(e,t){var i=d(e);window[i]=t},c=function(){return s()},d=function(e){var t=c();return e||(e="h5"),"aliplayer_lang_data_"+e+"_"+i.h5Version.replace(/\./g,"_")+"_"+t};e.exports.setCurrentLanguage=function(e,t,i){var r=window[o];if(void 0!==e&&e||(e=s()),"en-us"!=e&&"zh-cn"!=e&&(!i||i&&!i[e]))throw new Error("There is not language resource for "+e+", please specify the language resource by languageTexts property");window[o]=e,l(t,i),e!=r&&n("../lib/constants").updateByLanguage()},e.exports.getCurrentLanguage=s,e.exports.getLanguageData=function(e,t){var i=d(e);return window[i]},e.exports.load=l,e.exports.get=function(e,t){t||(t="h5");var i=d(t),r=window[i];if(r)return r[e]}},{"../config":5,"../lib/constants":15,"../lib/io":24,"../lib/storage":30,"./en-us":8,"./flash/en-us":9,"./flash/zh-cn":10,"./zh-cn":12}],12:[function(e,t,i){t.exports=t.exports={OD:"\u539f\u753b",FD:"\u6d41\u7545",LD:"\u6807\u6e05",SD:"\u9ad8\u6e05",HD:"\u8d85\u6e05","2K":"2K","4K":"4K",FHD:"\u5168\u9ad8\u6e05",XLD:"\u6781\u901f",SQ:"\u666e\u901a\u97f3\u8d28",HQ:"\u9ad8\u97f3\u8d28",Speed:"\u500d\u901f",Speed_05X_Text:"0.5X",Speed_1X_Text:"\u6b63\u5e38",Speed_125X_Text:"1.25X",Speed_15X_Text:"1.5X",Speed_2X_Text:"2X",Quality_Change_Fail_Switch_Text:"\u4e0d\u80fd\u64ad\u653e\uff0c\u5207\u6362\u4e3a",Quality_Change_Text:"\u6b63\u5728\u4e3a\u60a8\u5207\u6362\u5230 ",Quality_The_Url:"\u6b64\u5730\u5740",Refresh_Text:"\u5237\u65b0",Detection_Text:"\u8bca\u65ad",Cancel:"\u53d6\u6d88",Mute:"\u9759\u97f3",Snapshot:"\u622a\u56fe",Play_DateTime:"\u64ad\u653e\u65f6\u95f4",AutoPlayDelayDisplayText:"$$\u79d2\u4ee5\u540e\u5f00\u59cb\u64ad\u653e",Error_Load_Abort_Text:"\u83b7\u53d6\u6570\u636e\u8fc7\u7a0b\u88ab\u4e2d\u6b62",Error_Network_Text:"\u7f51\u7edc\u9519\u8bef\u52a0\u8f7d\u6570\u636e\u5931\u8d25",Error_Decode_Text:"\u89e3\u7801\u9519\u8bef",Error_Server_Network_NotSupport_Text:"\u670d\u52a1\u5668\u3001\u7f51\u7edc\u9519\u8bef\u6216\u683c\u5f0f\u4e0d\u652f\u6301",Error_Offline_Text:"\u7f51\u7edc\u4e0d\u53ef\u7528\uff0c\u8bf7\u786e\u5b9a",Error_Play_Text:"\u64ad\u653e\u51fa\u9519\u5566",Error_Retry_Text:"\u8bf7\u5c1d\u8bd5\u9000\u51fa\u91cd\u8bd5\u6216\u5237\u65b0",Error_AuthKey_Text:"\u53ef\u80fd\u9274\u6743\u8fc7\u671f\u3001\u57df\u540d\u4e0d\u5728\u767d\u540d\u5355\u6216\u8bf7\u6c42\u88ab\u62e6\u622a",Error_H5_Not_Support_Text:"h5\u4e0d\u652f\u6301\u6b64\u683c\u5f0f\uff0c\u8bf7\u4f7f\u7528flash\u64ad\u653e\u5668",Error_Not_Support_M3U8_Text:"\u6d4f\u89c8\u5668\u4e0d\u652f\u6301m3u8\u89c6\u9891\u64ad\u653e",Error_Not_Support_MP4_Text:"\u6d4f\u89c8\u5668\u4e0d\u652f\u6301mp4\u89c6\u9891\u64ad\u653e",Error_Not_Support_encrypt_Text:"\u64ad\u653e\u52a0\u5bc6\u89c6\u9891\uff0c\u8bf7\u8bbe\u7f6e\u5c5e\u6027encryptType to 1",Error_Vod_URL_Is_Empty_Text:"\u83b7\u53d6\u64ad\u653e\u5730\u5740\u4e3a\u7a7a",Error_Vod_Fetch_Urls_Text:"\u83b7\u53d6\u5730\u5740\u51fa\u9519\u5566\uff0c\u8bf7\u5c1d\u8bd5\u9000\u51fa\u91cd\u8bd5\u6216\u5237\u65b0",Fetch_Playauth_Error:"\u83b7\u53d6\u64ad\u653e\u51ed\u8bc1\u51fa\u9519\u5566\uff0c\u8bf7\u5c1d\u8bd5\u9000\u51fa\u91cd\u8bd5\u6216\u5237\u65b0",Error_Playauth_Decode_Text:"playauth\u89e3\u6790\u9519\u8bef",Error_Vid_Not_Same_Text:"\u4e0d\u80fd\u66f4\u65b0\u5730\u5740\uff0cvid\u548c\u64ad\u653e\u4e2d\u7684\u4e0d\u4e00\u81f4",Error_Playauth_Expired_Text:"\u51ed\u8bc1\u5df2\u8fc7\u671f\uff0c\u8bf7\u5c1d\u8bd5\u9000\u51fa\u91cd\u8bd5\u6216\u5237\u65b0",Error_MTS_Fetch_Urls_Text:"MTS\u83b7\u53d6\u53d6\u6570\u5931\u8d25",Error_Load_M3U8_Failed_Text:"\u83b7\u53d6m3u8\u6587\u4ef6\u5931\u8d25",Error_Load_M3U8_Timeout_Text:"\u83b7\u53d6m3u8\u6587\u4ef6\u8d85\u65f6",Error_M3U8_Decode_Text:"\u83b7\u53d6m3u8\u6587\u4ef6\u89e3\u6790\u5931\u8d25",Error_TX_Decode_Text:"\u89e3\u6790\u6570\u636e\u51fa\u9519",Error_Waiting_Timeout_Text:"\u7f13\u51b2\u6570\u636e\u8d85\u65f6\uff0c\u8bf7\u5c1d\u8bd5\u9000\u51fa\u91cd\u8bd5\u6216\u5237\u65b0",Error_Invalidate_Source:"\u64ad\u653e\u5730\u5740\u683c\u5f0f\u9700\u8981\u4e3amp4\u3001mp3\u3001m3u8\u3001mpd\u6216flv",Error_Empty_Source:"\u64ad\u653e\u5730\u5740\u4e0d\u80fd\u4e3a\u7a7a",Error_Vid_Empty_Source:"vid\u5bf9\u5e94\u7684\u89c6\u9891\u5730\u5740\u8fd8\u672a\u83b7\u53d6\u5230",Error_Fetch_NotStream:"\u6b64vid\u6ca1\u6709\u53ef\u64ad\u653e\u89c6\u9891",Error_Not_Found:"\u64ad\u653e\u5730\u5740\u4e0d\u5b58\u5728",Live_End:"\u4eb2\uff0c\u76f4\u64ad\u5df2\u7ed3\u675f",Play_Before_Fullscreen:"\u64ad\u653e\u540e\u518d\u5168\u5c4f",Can_Not_Seekable:"\u4e0d\u80fdseek\u5230\u8fd9\u91cc",Cancel_Text:"\u53d6\u6d88",OK_Text:"\u786e\u8ba4",Auto_Stream_Tip_Text:"\u7f51\u7edc\u4e0d\u7ed9\u529b\uff0c\u662f\u5426\u5207\u6362\u5230$$",Request_Block_Text:"\u6d4f\u89c8\u5668\u5b89\u5168\u7b56\u7565\u89c6\u9891\u5730\u5740\u4e0d\u80fd\u4e3ahttp\u534f\u8bae\uff0c\u4e0e\u7f51\u7ad9https\u534f\u8bae\u4e0d\u4e00\u81f4",Open_Html_By_File:"\u4e0d\u80fd\u76f4\u63a5\u5728\u6d4f\u89c8\u5668\u6253\u5f00html\u6587\u4ef6\uff0c\u8bf7\u90e8\u7f72\u5230\u670d\u52a1\u7aef",Maybe_Cors_Error:"\u8bf7\u786e\u8ba4\u662f\u5426\u5f00\u542f\u4e86\u5141\u8bb8\u8de8\u57df\u8bbf\u95ee<a href='https://help.aliyun.com/document_detail/62950.html' target='_blank'>\u53c2\u8003\u6587\u6863</a>",Speed_Switch_To:"\u500d\u901f\u5207\u6362\u5230 ",Curent_Volume:"\u5f53\u524d\u97f3\u91cf\uff1a",Volume_Mute:"\u8bbe\u7f6e\u4e3a\u9759\u97f3",Volume_UnMute:"\u8bbe\u7f6e\u4e3a\u975e\u9759\u97f3",ShiftLiveTime_Error:"\u76f4\u64ad\u5f00\u59cb\u65f6\u95f4\u4e0d\u80fd\u5927\u4e8e\u76f4\u64ad\u7ed3\u675f\u65f6\u95f4",Error_Not_Support_Format_On_Mobile:"\u79fb\u52a8\u7aef\u4e0d\u652f\u6301flv\u3001rmtp\u89c6\u9891\uff0c\u8bf7\u4f7f\u7528m3u8",SessionId_Ticket_Invalid:"DRM\u89c6\u9891\u64ad\u653e\uff0csessionId\u548cticket\u5c5e\u6027\u4e0d\u80fd\u4e3a\u7a7a",Http_Error:"Http\u7f51\u7edc\u8bf7\u6c42\u5931\u8d25",Http_Timeout:"http\u8bf7\u6c42\u8d85\u65f6",DRM_License_Expired:"DRM license\u8d85\u65f6\uff0c\u8bf7\u5237\u65b0",Not_Support_DRM:"\u6d4f\u89c8\u5668\u4e0d\u652f\u6301DRM\u89c6\u9891\u7684\u64ad\u653e",CC_Switch_To:"\u5b57\u5e55\u5207\u6362\u5230 ",AudioTrack_Switch_To:"\u97f3\u8f68\u5207\u6362\u5230 ",Subtitle:"\u5b57\u5e55",AudioTrack:"\u97f3\u8f68",Quality:"\u6e05\u6670\u5ea6",Auto:"\u81ea\u52a8",Quality_Switch_To:"\u6e05\u6670\u5ea6\u5207\u6362\u5230 ",Fullscreen:"\u5168\u5c4f",Setting:"\u8bbe\u7f6e",Volume:"\u97f3\u91cf",Play:"\u64ad\u653e",Pause:"\u6682\u505c",CloseSubtitle:"\u5173\u95ed\u5b57\u5e55",OpenSubtitle:"\u6253\u5f00\u5b57\u5e55",ExistFullScreen:"\u9000\u51fa\u5168\u5c4f",Muted:"\u9759\u97f3",Retry:"\u91cd\u8bd5",SwitchToLive:"\u8fd4\u56de\u76f4\u64ad",iOSNotSupportVodEncription:"iOS\u4e0d\u652f\u6301\u70b9\u64ad\u52a0\u5bc6\u64ad\u653e",UseChromeForVodEncription:"\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u70b9\u64ad\u52a0\u5bc6\u64ad\u653e\uff0c\u8bf7\u4f7f\u7528\u6700\u65b0Chrome\u6d4f\u89c8\u5668"}},{}],13:[function(e,t,i){var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";if(window.Uint8Array)for(var d=new Uint8Array(256),r=0;r<n.length;r++)d[n.charCodeAt(r)]=r;var u=function(e){for(var t="",i=0;i<e.length;i+=16e3){var r=e.subarray(i,i+16e3);t+=String.fromCharCode.apply(null,r)}return t};unpackPlayReady=function(e){var t=function(e,t,i){if(!e)return"";var r;if(i||e.byteLength%2==0||console.log("Data has an incorrect length, must be even."),e instanceof ArrayBuffer)r=e;else{var o=new Uint8Array(e.byteLength);o.set(new Uint8Array(e)),r=o.buffer}for(var n=Math.floor(e.byteLength/2),a=new Uint16Array(n),s=new DataView(r),l=0;l<n;l++)a[l]=s.getUint16(2*l,t);return u(a)}(e,!0,!0);if(-1!=t.indexOf("PlayReadyKeyMessage")){for(var i=(new DOMParser).parseFromString(t,"application/xml"),r=i.getElementsByTagName("HttpHeader"),o={},n=0;n<r.length;++n){var a=r[n].querySelector("name"),s=r[n].querySelector("value");o[a.textContent]=s.textContent}return{header:o,changange:i.querySelector("Challenge").textContent}}console.log("PlayReady request is already unwrapped.")},t.exports={decode:function(e){var t,i,r,o,n,a=.75*e.length,s=e.length,l=0;"="===e[e.length-1]&&(a--,"="===e[e.length-2]&&a--);var u=new ArrayBuffer(a),c=new Uint8Array(u);for(t=0;t<s;t+=4)i=d[e.charCodeAt(t)],r=d[e.charCodeAt(t+1)],o=d[e.charCodeAt(t+2)],n=d[e.charCodeAt(t+3)],c[l++]=i<<2|r>>4,c[l++]=(15&r)<<4|o>>2,c[l++]=(3&o)<<6|63&n;return u},encode:function(e){var t,i=new Uint8Array(e),r=i.length,o="";for(t=0;t<r;t+=3)o+=n[i[t]>>2],o+=n[(3&i[t])<<4|i[t+1]>>4],o+=n[(15&i[t+1])<<2|i[t+2]>>6],o+=n[63&i[t+2]];return r%3==2?o=o.substring(0,o.length-1)+"=":r%3==1&&(o=o.substring(0,o.length-2)+"=="),o},unpackPlayReady:unpackPlayReady}},{}],14:[function(e,t,i){var r=e("./oo"),o=e("../player/base/event/eventtype");t.exports.stopPropagation=function(e){window.event?window.event.cancelBubble=!0:e.stopPropagation()},t.exports.register=function(e){e.util={stopPropagation:t.exports.stopPropagation},e.Component=r.extend,e.EventType=o.Player}},{"../player/base/event/eventtype":43,"./oo":27}],15:[function(e,t,i){var r=e("../lang/index");t.exports.LOAD_START="loadstart",t.exports.LOADED_METADATA="loadedmetadata",t.exports.LOADED_DATA="loadeddata",t.exports.PROGRESS="progress",t.exports.CAN_PLAY="canplay",t.exports.CAN_PLYA_THROUGH="canplaythrough",t.exports.PLAY="play",t.exports.PAUSE="pause",t.exports.ENDED="ended",t.exports.PLAYING="playing",t.exports.WAITING="waiting",t.exports.ERROR="error",t.exports.SUSPEND="suspend",t.exports.STALLED="stalled",t.exports.AuthKeyExpiredEvent="authkeyexpired",t.exports.DRMKeySystem={4:"com.microsoft.playready",5:"com.widevine.alpha"},t.exports.EncryptionType={Private:1,Standard:2,ChinaDRM:3,PlayReady:4,Widevine:5},t.exports.VodEncryptionType={AliyunVoDEncryption:1,HLSEncryption:2},t.exports.DRMType={Widevine:"Widevine",PlayReady:"PlayReady"},t.exports.ErrorCode={InvalidParameter:4001,AuthKeyExpired:4002,InvalidSourceURL:4003,NotFoundSourceURL:4004,StartLoadData:4005,LoadedMetadata:4006,PlayingError:4007,LoadingTimeout:4008,RequestDataError:4009,EncrptyVideoNotSupport:4010,FormatNotSupport:4011,PlayauthDecode:4012,PlayDataDecode:4013,NetworkUnavaiable:4014,UserAbort:4015,NetworkError:4016,URLsIsEmpty:4017,CrossDomain:4027,OtherError:4400,ServerAPIError:4500,FlashNotInstalled:4600},t.exports.AuthKeyExpired=7200,t.exports.AuthKeyRefreshExpired=7e3,t.exports.AuthInfoExpired=100,t.exports.VideoErrorCode={1:4015,2:4016,3:4013,4:4400},t.exports.IconType={FontClass:"fontclass",Symbol:"symbol",Sprite:"Sprite"},t.exports.SelectedStreamLevel="selectedStreamLevel",t.exports.SelectedCC="selectedCC",t.exports.WidthMapToLevel={0:"OD",640:"FD",960:"LD",1280:"SD",1920:"HD",2580:"2K",3840:"4K"};var o=function(){t.exports.VideoErrorCodeText={1:r.get("Error_Load_Abort_Text"),2:r.get("Error_Network_Text"),3:r.get("Error_Decode_Text"),4:r.get("Error_Server_Network_NotSupport_Text")},t.exports.VideoLevels={0:r.get("OD"),640:r.get("FD"),960:r.get("LD"),1280:r.get("SD"),1920:r.get("HD"),2580:r.get("2K"),3840:r.get("4K")},t.exports.QualityLevels={OD:r.get("OD"),LD:r.get("LD"),FD:r.get("FD"),SD:r.get("SD"),HD:r.get("HD"),"2K":r.get("2K"),"4K":r.get("4K"),XLD:r.get("XLD"),FHD:r.get("FHD"),SQ:r.get("SQ"),HQ:r.get("HQ")},t.exports.SpeedLevels=[{key:.5,text:r.get("Speed_05X_Text")},{key:1,text:r.get("Speed_1X_Text")},{key:1.25,text:r.get("Speed_125X_Text")},{key:1.5,text:r.get("Speed_15X_Text")},{key:2,text:r.get("Speed_2X_Text")}]};o(),t.exports.updateByLanguage=o},{"../lang/index":11}],16:[function(e,t,i){t.exports.get=function(e){for(var t=e+"",i=document.cookie.split(";"),r=0;r<i.length;r++){var o=i[r].trim();if(0==o.indexOf(t))return unescape(o.substring(t.length+1,o.length))}return""},t.exports.set=function(e,t,i){var r=new Date;r.setTime(r.getTime()+24*i*60*60*1e3);var o="expires="+r.toGMTString();document.cookie=e+"="+escape(t)+"; "+o}},{}],17:[function(e,i,t){var r=e("./object");i.exports.cache={},i.exports.guid=function(e,t){var i,r,o="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),n=[];if(t=t||o.length,e)for(i=0;i<e;i++)n[i]=o[0|Math.random()*t];else for(n[8]=n[13]=n[18]=n[23]="-",n[14]="4",i=0;i<36;i++)n[i]||(r=0|16*Math.random(),n[i]=o[19==i?3&r|8:r]);return n.join("")},i.exports.expando="vdata"+(new Date).getTime(),i.exports.getData=function(e){var t=e[i.exports.expando];return t||(t=e[i.exports.expando]=i.exports.guid(),i.exports.cache[t]={}),i.exports.cache[t]},i.exports.hasData=function(e){var t="";return e&&(t=e[i.exports.expando]),!(!t||r.isEmpty(i.exports.cache[t]))},i.exports.removeData=function(t){var e="";if(t&&(e=t[i.exports.expando]),e){delete i.exports.cache[e];try{delete t[i.exports.expando]}catch(e){t.removeAttribute?t.removeAttribute(i.exports.expando):t[i.exports.expando]=null}}}},{"./object":26}],18:[function(e,c,t){var r=e("./object");c.exports.el=function(e){return document.getElementById(e)},c.exports.createEl=function(e,t){var i;return e=e||"div",t=t||{},i=document.createElement(e),r.each(t,function(e,t){-1!==e.indexOf("aria-")||"role"==e?i.setAttribute(e,t):i[e]=t}),i},c.exports.addClass=function(e,t){-1==(" "+e.className+" ").indexOf(" "+t+" ")&&(e.className=""===e.className?t:e.className+" "+t)},c.exports.removeClass=function(e,t){var i,r;if(-1!=e.className.indexOf(t)){for(r=(i=e.className.split(" ")).length-1;0<=r;r--)i[r]===t&&i.splice(r,1);e.className=i.join(" ")}},c.exports.hasClass=function(e,t){return-1!=e.className.indexOf(t)},c.exports.getClasses=function(e){return e.className?e.className.split(" "):[]},c.exports.getElementAttributes=function(e){var t,i,r,o,n;if(t={},i=",autoplay,controls,loop,muted,default,",e&&e.attributes&&0<e.attributes.length)for(var a=(r=e.attributes).length-1;0<=a;a--)o=r[a].name,n=r[a].value,"boolean"!=typeof e[o]&&-1===i.indexOf(","+o+",")||(n=null!==n),t[o]=n;return t},c.exports.insertFirst=function(e,t){t.firstChild?t.insertBefore(e,t.firstChild):t.appendChild(e)},c.exports.blockTextSelection=function(){document.body.focus(),document.onselectstart=function(){return!1}},c.exports.unblockTextSelection=function(){document.onselectstart=function(){return!0}},c.exports.css=function(i,e,t){return!(!i||!i.style)&&(e&&t?(i.style[e]=t,!0):t||"string"!=typeof e?!t&&"object"==typeof e&&(r.each(e,function(e,t){i.style[e]=t}),!0):i.style[e])},c.exports.getTransformName=function(e){var t,i,r=["transform","WebkitTransform","MozTransform","msTransform","OTransform"],o=r[0];for(t=0,i=r.length;t<i;t++)if(void 0!==e.style[r[t]]){o=r[t];break}return o},c.exports.getTransformEventName=function(e,t){var i,r,o=["","Webkit","Moz","ms","O"],n=t.toLowerCase(),a=["transform","WebkitTransform","MozTransform","msTransform","OTransform"];for(i=0,r=a.length;i<r;i++)if(void 0!==e.style[a[i]]){0!=i&&(n=o[i]+t);break}return n},c.exports.addCssByStyle=function(e){var t=document,i=t.createElement("style");if(i.setAttribute("type","text/css"),i.styleSheet)i.styleSheet.cssText=e;else{var r=t.createTextNode(e);i.appendChild(r)}var o=t.getElementsByTagName("head");o.length?o[0].appendChild(i):t.documentElement.appendChild(i)},c.exports.getTranslateX=function(e){var t=0;if(e)try{var i=window.getComputedStyle(e),r=c.exports.getTransformName(e);t=new WebKitCSSMatrix(i[r]).m41}catch(e){console.log(e)}return t},c.exports.getPointerPosition=function(e,t){var i={},r=c.exports.findPosition(e),o=e.offsetWidth,n=e.offsetHeight,a=r.top,s=r.left,l=t.pageY,u=t.pageX;return t.changedTouches&&(u=t.changedTouches[0].pageX,l=t.changedTouches[0].pageY),i.y=Math.max(0,Math.min(1,(a-l+n)/n)),i.x=Math.max(0,Math.min(1,(u-s)/o)),i},c.exports.findPosition=function(e){var t;if(e.getBoundingClientRect&&e.parentNode&&(t=e.getBoundingClientRect()),!t)return{left:0,top:0};var i=document.documentElement,r=document.body,o=i.clientLeft||r.clientLeft||0,n=window.pageXOffset||r.scrollLeft,a=t.left+n-o,s=i.clientTop||r.clientTop||0,l=window.pageYOffset||r.scrollTop,u=t.top+l-s;return{left:Math.round(a),top:Math.round(u)}}},{"./object":26}],19:[function(e,l,t){var u=e("./object"),c=e("./data"),i=e("./ua"),r=e("fastclick");function d(t,i,e,r){u.each(e,function(e){t(i,e,r)})}l.exports.on=function(n,e,t){if(n){if(u.isArray(e))return d(l.exports.on,n,e,t);i.IS_MOBILE&&"click"==e&&r(n);var a=c.getData(n);a.handlers||(a.handlers={}),a.handlers[e]||(a.handlers[e]=[]),t.guid||(t.guid=c.guid()),a.handlers[e].push(t),a.dispatcher||(a.disabled=!1,a.dispatcher=function(e){if(!a.disabled){e=l.exports.fixEvent(e);var t=a.handlers[e.type];if(t)for(var i=t.slice(0),r=0,o=i.length;r<o&&!e.isImmediatePropagationStopped();r++)i[r].call(n,e)}}),1==a.handlers[e].length&&(n.addEventListener?n.addEventListener(e,a.dispatcher,!1):n.attachEvent&&n.attachEvent("on"+e,a.dispatcher))}},l.exports.off=function(t,e,i){if(t&&c.hasData(t)){var r=c.getData(t);if(r.handlers){if(u.isArray(e))return d(l.exports.off,t,e,i);var o=function(e){r.handlers[e]=[],l.exports.cleanUpEvents(t,e)};if(e){var n=r.handlers[e];if(n)if(i){if(i.guid)for(var a=0;a<n.length;a++)n[a].guid===i.guid&&n.splice(a--,1);l.exports.cleanUpEvents(t,e)}else o(e)}else for(var s in r.handlers)o(s)}}},l.exports.cleanUpEvents=function(e,t){var i=c.getData(e);0===i.handlers[t].length&&(delete i.handlers[t],e.removeEventListener?e.removeEventListener(t,i.dispatcher,!1):e.detachEvent&&e.detachEvent("on"+t,i.dispatcher)),u.isEmpty(i.handlers)&&(delete i.handlers,delete i.dispatcher,delete i.disabled),u.isEmpty(i)&&c.removeData(e)},l.exports.fixEvent=function(e){function t(){return!0}function i(){return!1}if(!e||!e.isPropagationStopped){var r=e||window.event;for(var o in e={},r)"layerX"!==o&&"layerY"!==o&&"keyboardEvent.keyLocation"!==o&&("returnValue"==o&&r.preventDefault||(e[o]=r[o]));if(e.target||(e.target=e.srcElement||document),e.relatedTarget=e.fromElement===e.target?e.toElement:e.fromElement,e.preventDefault=function(){r.preventDefault&&r.preventDefault(),e.returnValue=!1,e.isDefaultPrevented=t,e.defaultPrevented=!0},e.isDefaultPrevented=i,e.defaultPrevented=!1,e.stopPropagation=function(){r.stopPropagation&&r.stopPropagation(),e.cancelBubble=!0,e.isPropagationStopped=t},e.isPropagationStopped=i,e.stopImmediatePropagation=function(){r.stopImmediatePropagation&&r.stopImmediatePropagation(),e.isImmediatePropagationStopped=t,e.stopPropagation()},e.isImmediatePropagationStopped=i,null!=e.clientX){var n=document.documentElement,a=document.body;e.pageX=e.clientX+(n&&n.scrollLeft||a&&a.scrollLeft||0)-(n&&n.clientLeft||a&&a.clientLeft||0),e.pageY=e.clientY+(n&&n.scrollTop||a&&a.scrollTop||0)-(n&&n.clientTop||a&&a.clientTop||0)}e.which=e.charCode||e.keyCode,null!=e.button&&(e.button=1&e.button?0:4&e.button?1:2&e.button?2:0)}return e},l.exports.trigger=function(e,t){if(e){var i=c.hasData(e)?c.getData(e):{},r=e.parentNode||e.ownerDocument;if("string"==typeof t){var o=null;(e.paramData||0==e.paramData)&&(o=e.paramData,e.paramData=null,e.removeAttribute(o)),t={type:t,target:e,paramData:o}}if(t=l.exports.fixEvent(t),i.dispatcher&&i.dispatcher.call(e,t),r&&!t.isPropagationStopped()&&!1!==t.bubbles)l.exports.trigger(r,t);else if(!r&&!t.defaultPrevented){var n=c.getData(t.target);t.target[t.type]&&(n.disabled=!0,"function"==typeof t.target[t.type]&&t.target[t.type](),n.disabled=!1)}return!t.defaultPrevented}},l.exports.one=function(e,t,i){if(e){if(u.isArray(t))return d(l.exports.one,e,t,i);var r=function(){l.exports.off(e,t,r),i.apply(this,arguments)};r.guid=i.guid=i.guid||c.guid(),l.exports.on(e,t,r)}}},{"./data":17,"./object":26,"./ua":31,fastclick:1}],20:[function(e,t,i){var o=e("./data");t.exports.bind=function(e,t,i){t.guid||(t.guid=o.guid());var r=function(){return t.apply(e,arguments)};return r.guid=i?i+"_"+t.guid:t.guid,r}},{"./data":17}],21:[function(e,t,i){var r=/^((?:[a-zA-Z0-9+\-.]+:)?)(\/\/[^\/\;?#]*)?(.*?)??(;.*?)?(\?.*?)?(#.*?)?$/,c=/^([^\/;?#]*)(.*)$/,o=/(?:\/|^)\.(?=\/)/g,n=/(?:\/|^)\.\.\/(?!\.\.\/).*?(?=\/)/g,d={buildAbsoluteURL:function(e,t,i){if(i=i||{},e=e.trim(),!(t=t.trim())){if(!i.alwaysNormalize)return e;var r=d.parseURL(e);if(!r)throw new Error("Error trying to parse base URL.");return r.path=d.normalizePath(r.path),d.buildURLFromParts(r)}var o=d.parseURL(t);if(!o)throw new Error("Error trying to parse relative URL.");if(o.scheme)return i.alwaysNormalize?(o.path=d.normalizePath(o.path),d.buildURLFromParts(o)):t;var n=d.parseURL(e);if(!n)throw new Error("Error trying to parse base URL.");if(!n.netLoc&&n.path&&"/"!==n.path[0]){var a=c.exec(n.path);n.netLoc=a[1],n.path=a[2]}n.netLoc&&!n.path&&(n.path="/");var s={scheme:n.scheme,netLoc:o.netLoc,path:null,params:o.params,query:o.query,fragment:o.fragment};if(!o.netLoc&&(s.netLoc=n.netLoc,"/"!==o.path[0]))if(o.path){var l=n.path,u=l.substring(0,l.lastIndexOf("/")+1)+o.path;s.path=d.normalizePath(u)}else s.path=n.path,o.params||(s.params=n.params,o.query||(s.query=n.query));return null===s.path&&(s.path=i.alwaysNormalize?d.normalizePath(o.path):o.path),d.buildURLFromParts(s)},parseURL:function(e){var t=r.exec(e);return t?{scheme:t[1]||"",netLoc:t[2]||"",path:t[3]||"",params:t[4]||"",query:t[5]||"",fragment:t[6]||""}:null},normalizePath:function(e){for(e=e.split("").reverse().join("").replace(o,"");e.length!==(e=e.replace(n,"")).length;);return e.split("").reverse().join("")},buildURLFromParts:function(e){return e.scheme+e.netLoc+e.path+e.params+e.query+e.fragment}};t.exports=d},{}],22:[function(e,t,i){var r=/^(\d+)x(\d+)$/,o=/\s*(.+?)\s*=((?:\".*?\")|.*?)(?:,|$)/g,n=function(e){for(var t in"string"==typeof e&&(e=this.parseAttrList(e)),e)e.hasOwnProperty(t)&&(this[t]=e[t])};n.prototype={decimalInteger:function(e){var t=parseInt(this[e],10);return t>Number.MAX_SAFE_INTEGER?1/0:t},hexadecimalInteger:function(e){if(this[e]){var t=(this[e]||"0x").slice(2);t=(1&t.length?"0":"")+t;for(var i=new Uint8Array(t.length/2),r=0;r<t.length/2;r++)i[r]=parseInt(t.slice(2*r,2*r+2),16);return i}return null},hexadecimalIntegerAsNumber:function(e){var t=parseInt(this[e],16);return t>Number.MAX_SAFE_INTEGER?1/0:t},decimalFloatingPoint:function(e){return parseFloat(this[e])},enumeratedString:function(e){return this[e]},decimalResolution:function(e){var t=r.exec(this[e]);if(null!==t)return{width:parseInt(t[1],10),height:parseInt(t[2],10)}},parseAttrList:function(e){var t,i={};for(o.lastIndex=0;null!==(t=o.exec(e));){var r=t[2];0===r.indexOf('"')&&r.lastIndexOf('"')===r.length-1&&(r=r.slice(1,-1)),i[t[1]]=r}return i}},t.exports=n},{}],23:[function(e,t,i){var P=e("./attrlist"),r=e("../io"),o=e("./URLToolkit"),c=/#EXT-X-STREAM-INF:([^\n\r]*)[\r\n]+([^\r\n]+)/g,u=/#EXT-X-MEDIA:(.*)/g,w=new RegExp([/#EXTINF:(\d*(?:\.\d+)?)(?:,(.*)\s+)?/.source,/|(?!#)(\S+)/.source,/|#EXT-X-BYTERANGE:*(.+)/.source,/|#EXT-X-PROGRAM-DATE-TIME:(.+)/.source,/|#.*/.source].join(""),"g"),C=/(?:(?:#(EXTM3U))|(?:#EXT-X-(PLAYLIST-TYPE):(.+))|(?:#EXT-X-(MEDIA-SEQUENCE): *(\d+))|(?:#EXT-X-(TARGETDURATION): *(\d+))|(?:#EXT-X-(KEY):(.+))|(?:#EXT-X-(START):(.+))|(?:#EXT-X-(ENDLIST))|(?:#EXT-X-(DISCONTINUITY-SEQ)UENCE:(\d+))|(?:#EXT-X-(DIS)CONTINUITY))|(?:#EXT-X-(VERSION):(\d+))|(?:#EXT-X-(MAP):(.+))|(?:(#)(.*):(.*))|(?:(#)(.*))(?:.*)\r?\n?/,k=function(){this.method=null,this.key=null,this.iv=null,this._uri=null},I=function(){this._url=null,this._byteRange=null,this._decryptdata=null,this.tagList=[]};I.prototype.getUrl=function(){return!this._url&&this.relurl&&(this._url=o.buildAbsoluteURL(this.baseurl,this.relurl,{alwaysNormalize:!0})),this._url},I.prototype.Seturl=function(e){this._url=e},I.prototype.getProgramDateTime=function(){return!this._programDateTime&&this.rawProgramDateTime&&(this._programDateTime=new Date(Date.parse(this.rawProgramDateTime))),this._programDateTime},I.prototype.GetbyteRange=function(){if(!this._byteRange){var e=this._byteRange=[];if(this.rawByteRange){var t=this.rawByteRange.split("@",2);if(1===t.length){var i=this.lastByteRangeEndOffset;e[0]=i||0}else e[0]=parseInt(t[1]);e[1]=parseInt(t[0])+e[0]}}return this._byteRange},I.prototype.getByteRangeStartOffset=function(){return this.byteRange[0]},I.prototype.getByteRangeEndOffset=function(){return this.byteRange[1]};I.prototype.getDecryptdata=function(){return this._decryptdata||(this._decryptdata=this.fragmentDecryptdataFromLevelkey(this.levelkey,this.sn)),this._decryptdata};var n=function(){this.loaders={}};n.prototype={parseMasterPlaylist:function(e,t){var i,r=[];for(c.lastIndex=0;null!=(i=c.exec(e));){var o={},n=o.attrs=new P(i[1]);o.url=this.resolve(i[2],t);var a=n.decimalResolution("RESOLUTION");a&&(o.width=a.width,o.height=a.height),o.bitrate=n.decimalInteger("AVERAGE-BANDWIDTH")||n.decimalInteger("BANDWIDTH"),o.name=n.NAME;var s=n.CODECS;if(s){s=s.split(/[ ,]+/);for(var l=0;l<s.length;l++){var u=s[l];-1!==u.indexOf("avc1")?o.videoCodec=this.avc1toavcoti(u):-1!==u.indexOf("hvc1")?o.videoCodec=u:o.audioCodec=u}}r.push(o)}return r},parseMasterPlaylistMedia:function(e,t,i,r){var o,n=[],a=0;for(u.lastIndex=0;null!=(o=u.exec(e));){var s={},l=new P(o[1]);l.TYPE===i&&(s.groupId=l["GROUP-ID"],s.name=l.NAME,s.type=i,s["default"]="YES"===l.DEFAULT,s.autoselect="YES"===l.AUTOSELECT,s.forced="YES"===l.FORCED,l.URI&&(s.url=this.resolve(l.URI,t)),s.lang=l.LANGUAGE,s.name||(s.name=s.lang),r&&(s.audioCodec=r),s.id=a++,n.push(s))}return n},avc1toavcoti:function(e){var t,i=e.split(".");return 2<i.length?(t=i.shift()+".",t+=parseInt(i.shift()).toString(16),t+=("000"+parseInt(i.shift()).toString(16)).substr(-4)):t=e,t},parseLevelPlaylist:function(e,t,i,r){var o,n,a=0,s=0,l={type:null,version:null,url:t,fragments:[],live:!0,startSN:0},u=new k,c=0,d=null,p=new I;for(w.lastIndex=0;null!==(o=w.exec(e));){var h=o[1];if(h){p.duration=parseFloat(h);var f=(" "+o[2]).slice(1);p.title=f||null,p.tagList.push(f?["INF",h,f]:["INF",h])}else if(o[3]){if(!isNaN(p.duration)){var _=a++;p.type=r,p.start=s,p.levelkey=u,p.sn=_,p.level=i,p.cc=c,p.baseurl=t,p.relurl=(" "+o[3]).slice(1),l.fragments.push(p),s+=(d=p).duration,p=new I}}else if(o[4]){if(p.rawByteRange=(" "+o[4]).slice(1),d){var g=d.byteRangeEndOffset;g&&(p.lastByteRangeEndOffset=g)}}else if(o[5])p.rawProgramDateTime=(" "+o[5]).slice(1),p.tagList.push(["PROGRAM-DATE-TIME",p.rawProgramDateTime]),void 0===l.programDateTime&&(l.programDateTime=new Date(new Date(Date.parse(o[5]))-1e3*s));else{for(o=o[0].match(C),n=1;n<o.length&&void 0===o[n];n++);var y=(" "+o[n+1]).slice(1),v=(" "+o[n+2]).slice(1);switch(o[n]){case"#":p.tagList.push(v?[y,v]:[y]);break;case"PLAYLIST-TYPE":l.type=y.toUpperCase();break;case"MEDIA-SEQUENCE":a=l.startSN=parseInt(y);break;case"TARGETDURATION":l.targetduration=parseFloat(y);break;case"VERSION":l.version=parseInt(y);break;case"EXTM3U":break;case"ENDLIST":l.live=!1;break;case"DIS":c++,p.tagList.push(["DIS"]);break;case"DISCONTINUITY-SEQ":c=parseInt(y);break;case"KEY":var m=new P(y),S=m.enumeratedString("METHOD"),T=m.URI,b=m.hexadecimalInteger("IV");S&&(u=new k,T&&0<=["AES-128","SAMPLE-AES"].indexOf(S)&&(u.method=S,u.baseuri=t,u.reluri=T,u.key=null,u.iv=b));break;case"START":var x=new P(y).decimalFloatingPoint("TIME-OFFSET");isNaN(x)||(l.startTimeOffset=x);break;case"MAP":var E=new P(y);p.relurl=E.URI,p.rawByteRange=E.BYTERANGE,p.baseurl=t,p.level=i,p.type=r,p.sn="initSegment",l.initSegment=p,p=new I;break;default:console.log("line parsed but not handled: result")}}}return(p=d)&&!p.relurl&&(l.fragments.pop(),s-=p.duration),l.totalduration=s,l.averagetargetduration=s/l.fragments.length,l.endSN=a-1,l},load:function(n,a){var s=this;r.get(n,function(e){var t=s.parseMasterPlaylist(e,n);if(t.length){var i=s.parseMasterPlaylistMedia(e,n,"AUDIO",t[0].audioCodec),r=s.parseMasterPlaylistMedia(e,n,"SUBTITLES");if(i.length){var o=!1;i.forEach(function(e){e.url||(o=!0)}),!1===o&&t[0].audioCodec&&!t[0].attrs.AUDIO&&(console.log("audio codec signaled in quality level, but no embedded audio track signaled, create one"),i.unshift({type:"main",name:"main"}))}}a({levels:t,audioTracks:i,subtitles:r,url:n})},function(e){console.log(e)})},resolve:function(e,t){return o.buildAbsoluteURL(t,e,{alwaysNormalize:!0})},parseMasterPlaylist:function(e,t){var i,r=[];for(c.lastIndex=0;null!=(i=c.exec(e));){var o={},n=o.attrs=new P(i[1]);o.url=this.resolve(i[2],t);var a=n.decimalResolution("RESOLUTION");a&&(o.width=a.width,o.height=a.height),o.bitrate=n.decimalInteger("AVERAGE-BANDWIDTH")||n.decimalInteger("BANDWIDTH"),o.name=n.NAME;var s=n.CODECS;if(s){s=s.split(/[ ,]+/);for(var l=0;l<s.length;l++){var u=s[l];-1!==u.indexOf("avc1")?o.videoCodec=this.avc1toavcoti(u):-1!==u.indexOf("hvc1")?o.videoCodec=u:o.audioCodec=u}}r.push(o)}return r},parseMasterPlaylistMedia:function(e,t,i,r){var o,n=[],a=0;for(u.lastIndex=0;null!=(o=u.exec(e));){var s={},l=new P(o[1]);l.TYPE===i&&(s.groupId=l["GROUP-ID"],s.name=l.NAME,s.type=i,s["default"]="YES"===l.DEFAULT,s.autoselect="YES"===l.AUTOSELECT,s.forced="YES"===l.FORCED,l.URI&&(s.url=this.resolve(l.URI,t)),s.lang=l.LANGUAGE,s.name||(s.name=s.lang),r&&(s.audioCodec=r),s.id=a++,n.push(s))}return n},avc1toavcoti:function(e){var t,i=e.split(".");return 2<i.length?(t=i.shift()+".",t+=parseInt(i.shift()).toString(16),t+=("000"+parseInt(i.shift()).toString(16)).substr(-4)):t=e,t},parseLevelPlaylist:function(e,t,i,r){var o,n,a=0,s=0,l={type:null,version:null,url:t,fragments:[],live:!0,startSN:0},u=new k,c=0,d=null,p=new I;for(w.lastIndex=0;null!==(o=w.exec(e));){var h=o[1];if(h){p.duration=parseFloat(h);var f=(" "+o[2]).slice(1);p.title=f||null,p.tagList.push(f?["INF",h,f]:["INF",h])}else if(o[3]){if(!isNaN(p.duration)){var _=a++;p.type=r,p.start=s,p.levelkey=u,p.sn=_,p.level=i,p.cc=c,p.baseurl=t,p.relurl=(" "+o[3]).slice(1),l.fragments.push(p),s+=(d=p).duration,p=new I}}else if(o[4]){if(p.rawByteRange=(" "+o[4]).slice(1),d){var g=d.byteRangeEndOffset;g&&(p.lastByteRangeEndOffset=g)}}else if(o[5])p.rawProgramDateTime=(" "+o[5]).slice(1),p.tagList.push(["PROGRAM-DATE-TIME",p.rawProgramDateTime]),void 0===l.programDateTime&&(l.programDateTime=new Date(new Date(Date.parse(o[5]))-1e3*s));else{for(o=o[0].match(C),n=1;n<o.length&&void 0===o[n];n++);var y=(" "+o[n+1]).slice(1),v=(" "+o[n+2]).slice(1);switch(o[n]){case"#":p.tagList.push(v?[y,v]:[y]);break;case"PLAYLIST-TYPE":l.type=y.toUpperCase();break;case"MEDIA-SEQUENCE":a=l.startSN=parseInt(y);break;case"TARGETDURATION":l.targetduration=parseFloat(y);break;case"VERSION":l.version=parseInt(y);break;case"EXTM3U":break;case"ENDLIST":l.live=!1;break;case"DIS":c++,p.tagList.push(["DIS"]);break;case"DISCONTINUITY-SEQ":c=parseInt(y);break;case"KEY":var m=new P(y),S=m.enumeratedString("METHOD"),T=m.URI,b=m.hexadecimalInteger("IV");S&&(u=new k,T&&0<=["AES-128","SAMPLE-AES"].indexOf(S)&&(u.method=S,u.baseuri=t,u.reluri=T,u.key=null,u.iv=b));break;case"START":var x=new P(y).decimalFloatingPoint("TIME-OFFSET");isNaN(x)||(l.startTimeOffset=x);break;case"MAP":var E=new P(y);p.relurl=E.URI,p.rawByteRange=E.BYTERANGE,p.baseurl=t,p.level=i,p.type=r,p.sn="initSegment",l.initSegment=p,p=new I;break;default:console.log("line parsed but not handled: "+o)}}}return(p=d)&&!p.relurl&&(l.fragments.pop(),s-=p.duration),l.totalduration=s,l.averagetargetduration=s/l.fragments.length,l.endSN=a-1,l}},t.exports=n},{"../io":24,"./URLToolkit":21,"./attrlist":22}],24:[function(e,s,t){var h=e("./url");s.exports.get=function(e,t,i,r,o){s.exports.ajax("GET",e,{},t,i,r,o)},s.exports.post=function(e,t,i,r,o,n){var a={"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",Accept:"application/json"};s.exports.ajax("POST",e,t,i,r,o,n,a)},s.exports.postWithHeader=function(e,t,i,r,o){s.exports.ajax("POST",e,t,r,o,!0,!1,i)},s.exports.ajax=function(e,t,i,r,o,n,a,s){var l,u,c,d;o=o||function(){},"undefined"==typeof XMLHttpRequest&&(window.XMLHttpRequest=function(){try{return new window.ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(e){}try{return new window.ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(e){}try{return new window.ActiveXObject("Msxml2.XMLHTTP")}catch(e){}throw new Error("This browser does not support XMLHttpRequest.")}),u=new XMLHttpRequest,c=h.parseUrl(t),d=window.location,!(c.protocol+c.host!==d.protocol+d.host)||!window.XDomainRequest||"withCredentials"in u?(l="file:"==c.protocol||"file:"==d.protocol,u.onreadystatechange=function(){4===u.readyState&&(200===u.status||l&&0===u.status?r(u.responseText):o(u.responseText))}):((u=new window.XDomainRequest).onload=function(){r(u.responseText)},u.onerror=o,u.onprogress=function(){},u.ontimeout=o);try{if(void 0===n&&(n=!0),u.open(e,t,n),a&&(u.withCredentials=!0),s)for(var p in s)s.hasOwnProperty(p)&&u.setRequestHeader(p,s[p])}catch(e){return void o(e)}try{u.send(i)}catch(e){o(e)}},s.exports.jsonp=function(e,t,i){var r="jsonp_callback_"+Math.round(1e5*Math.random()),o=document.createElement("script");e&&(o.src=e+(0<=e.indexOf("?")?"&":"?")+"callback="+r+"&cb="+r,o.onerror=function(){delete window[r],document.body.removeChild(o),i()},o.onload=function(){setTimeout(function(){window[r]&&(delete window[r],document.body.removeChild(o))},0)},window[r]=function(e){delete window[r],document.body.removeChild(o),t(e)},document.body.appendChild(o))},s.exports.loadJS=function(e,t){var i=document.getElementsByTagName("HEAD").item(0),r=document.createElement("script");r.type="text/javascript",r.src=e,r.onload=function(){t&&t()},i.appendChild(r)}},{"./url":32}],25:[function(e,t,i){var s=e("./dom");t.exports.render=function(e,t){var i=t.align?t.align:"tl",r=t.x?t.x:0,o=t.y?t.y:0,n=r.indexOf&&0<r.indexOf("%")?"":"px",a=o.indexOf&&0<o.indexOf("%")?"":"px";"tl"===i?s.css(e,{"float":"left","margin-left":r+n,"margin-top":o+a}):"tr"===i?s.css(e,{"float":"right","margin-right":r+n,"margin-top":o+a}):"tlabs"===i?s.css(e,{position:"absolute",left:r+n,top:o+a}):"trabs"===i?s.css(e,{position:"absolute",right:r+n,top:o+a}):"blabs"===i?s.css(e,{position:"absolute",left:r+n,bottom:o+a}):"brabs"===i?s.css(e,{position:"absolute",right:r+n,bottom:o+a}):"cc"===i&&s.addClass(e,"center")}},{"./dom":18}],26:[function(e,a,t){var s=Object.prototype.hasOwnProperty;a.exports.create=Object.create||function(e){function t(){}return t.prototype=e,new t},a.exports.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(arg)},a.exports.isEmpty=function(e){for(var t in e)if(null!==e[t])return!1;return!0},a.exports.each=function(e,t,i){if(a.exports.isArray(e))for(var r=0,o=e.length;r<o&&!1!==t.call(i||this,e[r],r);++r);else for(var n in e)if(s.call(e,n)&&!1===t.call(i||this,n,e[n]))break;return e},a.exports.merge=function(e,t){if(!t)return e;for(var i in t)s.call(t,i)&&(e[i]=t[i]);return e},a.exports.deepMerge=function(e,t){var i,r,o;for(i in e=a.exports.copy(e),t)s.call(t,i)&&(r=e[i],o=t[i],a.exports.isPlain(r)&&a.exports.isPlain(o)?e[i]=a.exports.deepMerge(r,o):e[i]=t[i]);return e},a.exports.copy=function(e){return a.exports.merge({},e)},a.exports.isPlain=function(e){return!!e&&"object"==typeof e&&"[object Object]"===e.toString()&&e.constructor===Object},a.exports.isArray=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},a.exports.unescape=function(e){return e.replace(/&([^;]+);/g,function(e,t){return{amp:"&",lt:"<",gt:">",quot:'"',"#x27":"'","#x60":"`"}[t.toLowerCase()]||e})}},{}],27:[function(e,t,i){var o=e("./object"),n=function(){};(n=function(){}).extend=function(e){var t,i;for(var r in t=(e=e||{}).init||e.init||this.prototype.init||this.prototype.init||function(){},(((i=function(){t.apply(this,arguments)}).prototype=o.create(this.prototype)).constructor=i).extend=n.extend,i.create=n.create,e)e.hasOwnProperty(r)&&(i.prototype[r]=e[r]);return i},n.create=function(){var e=o.create(this.prototype);return this.apply(e,arguments),e},t.exports=n},{"./object":26}],28:[function(e,f,t){var _=e("./object"),i=e("../config"),r=e("./dom"),o=e("./cookie"),n=e("./constants"),a=e("../lang/index"),s=e("./ua"),g=e("../player/base/plugin/defaultemptycomponent"),y={preload:!0,autoplay:!0,useNativeControls:!1,width:"100%",height:"300px",cover:"",from:"",trackLog:!0,logBatched:!0,isLive:!1,playsinline:!0,showBarTime:5e3,rePlay:!1,liveRetry:5,liveRetryInterval:1,liveRetryStep:0,vodRetry:3,format:"",definition:"",defaultDefinition:"",loadDataTimeout:20,waitingTimeout:60,delayLoadingShow:1,controlBarForOver:!1,controlBarVisibility:"hover",enableSystemMenu:!1,qualitySort:"asc",x5_video_position:"normal",x5_type:"",x5_fullscreen:!1,x5_orientation:"landscape|portrait",x5LandscapeAsFullScreen:!0,autoPlayDelay:0,autoPlayDelayDisplayText:"",useHlsPluginForSafari:!1,enableMSEForAndroid:!0,encryptType:0,language:"zh-cn",languageTexts:{},mediaType:"video",outputType:"",playConfig:{},reAuthInfo:{},components:[],liveTimeShiftUrl:"",liveShiftSource:"",liveShiftTime:"",videoHeight:"100%",videoWidth:"100%",enableWorker:!0,authTimeout:"",enableMockFullscreen:!1,region:"cn-shanghai",debug:!1,progressMarkers:[],snapshotWatermark:{left:"500",top:"100",text:"",font:"16px \u5b8b\u4f53",fillColor:"#FFFFFF",strokeColor:"#FFFFFF"},liveStartTime:"",liveOverTime:"",enableStashBufferForFlv:!0,stashInitialSizeForFlv:32,flvOption:{},hlsOption:{stopLoadAsPaused:!1},hlsLoadingTimeOut:2e4,useHlsPlugOnMobile:!0,nudgeMaxRetry:5,tracks:[],recreatePlayer:function(){},diagnosisButtonVisible:!0,_native:!0,ai:{label:!1,meta:{url:"http://172.19.61.105:8085/meta/query",getMeta:""},boxes:"",host:"",app:"",streamName:"",startDateTime:0,waitMetaDataTime:2,displayAttrs:{header:"\u59d3\u540d","\u8bc1\u4ef6\u53f7\u7801":"text","\u6027\u522b":"text","\u5e74\u9f84":"text","\u53d1\u578b":"text","\u4eba\u8138\u5927\u56fe":function(e){},"\u4eba\u8138\u5c0f\u56fe":function(e){}},getClass:function(e,t){return""}},thumbnailUrl:"",skinRes:"//"+i.domain+"/de/prismplayer-flash/"+i.flashVersion+"/atlas/defaultSkin"};f.exports.defaultH5Layout=[{name:"bigPlayButton",align:"blabs",x:30,y:80},{name:"H5Loading",align:"cc"},{name:"errorDisplay",align:"tlabs",x:0,y:0},{name:"infoDisplay"},{name:"tooltip",align:"blabs",x:0,y:50},{name:"thumbnail"},{name:"controlBar",align:"blabs",x:0,y:0,children:[{name:"progress",align:"blabs",x:0,y:44},{name:"playButton",align:"tl",x:15,y:12},{name:"timeDisplay",align:"tl",x:10,y:5},{name:"fullScreenButton",align:"tr",x:10,y:12},{name:"subtitle",align:"tr",x:15,y:12},{name:"setting",align:"tr",x:15,y:12},{name:"volume",align:"tr",x:5,y:10}]}],f.exports.defaultAudioLayout=[{name:"controlBar",align:"blabs",x:0,y:0,children:[{name:"progress",align:"blabs",x:0,y:44},{name:"playButton",align:"tl",x:15,y:12},{name:"timeDisplay",align:"tl",x:10,y:5},{name:"volume",align:"tr",x:5,y:10}]}],f.exports.defaultFlashLayout=[{name:"bigPlayButton",align:"blabs",x:30,y:80},{name:"controlBar",align:"blabs",x:0,y:0,children:[{name:"progress",align:"tlabs",x:0,y:0},{name:"playButton",align:"tl",x:15,y:26},{name:"nextButton",align:"tl",x:10,y:26},{name:"timeDisplay",align:"tl",x:10,y:24},{name:"fullScreenButton",align:"tr",x:10,y:25},{name:"streamButton",align:"tr",x:10,y:23},{name:"volume",align:"tr",x:10,y:25}]},{name:"fullControlBar",align:"tlabs",x:0,y:0,children:[{name:"fullTitle",align:"tl",x:25,y:6},{name:"fullNormalScreenButton",align:"tr",x:24,y:13},{name:"fullTimeDisplay",align:"tr",x:10,y:12},{name:"fullZoom",align:"cc"}]}],f.exports.canPlayType=function(e){var t=document.createElement("video");return t.canPlayType?t.canPlayType(e):""},f.exports.canPlayHls=function(){return""!=f.exports.canPlayType("application/x-mpegURL")},f.exports.isUsedHlsPluginOnMobile=function(e){return!(!s.IS_MOBILE||!s.IS_CHROME&&!s.IS_FIREFOX)},f.exports.isSafariUsedHlsPlugin=function(e){return!!(s.os.pc&&s.browser.safari&&e)},f.exports.hasUIComponent=function(e,t){if(void 0===e||!e||0==e.length)return!1;for(var i=0,r=e.length;i<r;i++){var o=e[i].name;if(o==t)return!0;if("controlBar"==o)return f.exports.hasUIComponent(e[i].children,t)}return!1},f.exports.validateSource=function(e){return!0},f.exports.supportH5Video=function(){return void 0!==document.createElement("video").canPlayType},f.exports.createWrapper=function(e){var t,i=e.id;if(!(t="string"==typeof i?(0===i.indexOf("#")&&(i=i.slice(1)),r.el(i)):i)||!t.nodeName)throw new TypeError("\u6ca1\u6709\u4e3a\u64ad\u653e\u5668\u6307\u5b9a\u5bb9\u5668");return f.exports.adjustContainerLayout(t,e),t},f.exports.adjustContainerLayout=function(e,t){t.width&&!e.style.width&&(e.style.width=t.width),t.height&&!e.style.height&&(e.style.height=t.height)},f.exports.isSupportHls=function(){var e=window.MediaSource=window.MediaSource||window.WebKitMediaSource,t=window.SourceBuffer=window.SourceBuffer||window.WebKitSourceBuffer,i=e&&"function"==typeof e.isTypeSupported&&e.isTypeSupported('video/mp4; codecs="avc1.42E01E,mp4a.40.2"'),r=!t||t.prototype&&"function"==typeof t.prototype.appendBuffer&&"function"==typeof t.prototype.remove;return i&&r},f.exports.isSupportFlv=function(){return f.exports.isSupportHls()},f.exports.isSupportMSE=function(){return!!window.Promise&&!!window.Uint8Array&&!!Array.prototype.forEach&&f.exports.isSupportedMediaSource()},f.exports.isSupportedMediaSource=function(){return!!window.MediaSource&&!!MediaSource.isTypeSupported},f.exports.isSupportedDrm=function(){return!!(window.MediaKeys&&window.navigator&&window.navigator.requestMediaKeySystemAccess&&window.MediaKeySystemAccess&&window.MediaKeySystemAccess.prototype.getConfiguration)&&f.exports.isSupportMSE()},f.exports.isAudio=function(e){return e&&0<e.toLowerCase().indexOf(".mp3")},f.exports.isLiveShift=function(e){return e.isLive&&e.liveStartTime&&e.liveOverTime},f.exports.isHls=function(e){return e&&0<e.toLowerCase().indexOf(".m3u8")},f.exports.isDash=function(e){return e&&0<e.toLowerCase().indexOf(".mpd")},f.exports.isFlv=function(e){return e&&0<e.toLowerCase().indexOf(".flv")},f.exports.isRTMP=function(e){return e&&-1<e.toLowerCase().indexOf("rtmp:")},f.exports.checkSecuritSupport=function(){return f.exports.isSupportHls()?"":s.IS_IOS?a.get("iOSNotSupportVodEncription"):a.get("UseChromeForVodEncription")},f.exports.findSelectedStreamLevel=function(e,t){var i=t;if(!i&&!(i=o.get(n.SelectedStreamLevel)))return o.set(n.SelectedStreamLevel,e[0].definition,365),0;for(var r=0;r<e.length;r++)if(e[r].definition==i)return r;return 0},f.exports.handleOption=function(e,t){var i=_.merge(_.copy(y),e),r=[{name:"fullScreenButton",align:"tr",x:20,y:12},{name:"subtitle",align:"tr",x:15,y:12},{name:"setting",align:"tr",x:15,y:12},{name:"volume",align:"tr",x:5,y:10}],o=!1;if(e.useFlashPrism||f.exports.isRTMP(e.source))o=!0,r=[{name:"liveIco",align:"tlabs",x:15,y:25},{name:"fullScreenButton",align:"tr",x:10,y:25},{name:"volume",align:"tr",x:10,y:25}];else{var n=f.exports.isLiveShift(i);n?(r.push({name:"liveShiftProgress",align:"tlabs",x:0,y:0}),r.push({name:"playButton",align:"tl",x:15,y:12}),r.push({name:"liveDisplay",align:"tl",x:15,y:6})):r.push({name:"liveDisplay",align:"tlabs",x:15,y:6})}if(e.isLive)if(void 0===e.skinLayout)i.skinLayout=[{name:"errorDisplay",align:"tlabs",x:0,y:0},{name:"infoDisplay"},{name:"bigPlayButton",align:"blabs",x:30,y:80},{name:"tooltip",align:"blabs",x:0,y:56},{name:"H5Loading",align:"cc"},{name:"controlBar",align:"blabs",x:0,y:0,children:r}];else if(0!=e.skinLayout){for(var a=e.skinLayout.length,s=[],l=-1,u=0;u<a;u++)if("controlBar"==i.skinLayout[u].name){l=u;for(var c=i.skinLayout[u].children.length,d=0;d<c;d++){var p=i.skinLayout[u].children[d].name;if("liveDisplay"==p||"liveIco"==p||"fullScreenButton"==p||"volume"==p||"snapshot"==p||"setting"==p||"subtitle"==p||n&&("progress"==p||"playButton"==p||"timeDisplay"==p)){var h=i.skinLayout[u].children[d];"progress"==p?h.name="liveShiftProgress":"timeDisplay"==p?h.name="liveShiftTimeDisplay":o&&"liveDisplay"==p&&(h.name="liveIco"),s.push(h)}}break}-1!=l&&(i.skinLayout[l].children=s)}return(void 0===e.components||!e.components||_.isArray(e.components)&&0==e.components.length)&&"false"!=e.components&&(i.components=[g]),i}},{"../config":5,"../lang/index":11,"../player/base/plugin/defaultemptycomponent":63,"./constants":15,"./cookie":16,"./dom":18,"./object":26,"./ua":31}],29:[function(e,t,i){arguments[4][28][0].apply(i,arguments)},{"../config":5,"../lang/index":11,"../player/base/plugin/defaultemptycomponent":63,"./constants":15,"./cookie":16,"./dom":18,"./object":26,"./ua":31,dup:28}],30:[function(e,t,i){t.exports.set=function(t,i){try{window.localStorage&&localStorage.setItem(t,i)}catch(e){window[t+"_localStorage"]=i}},t.exports.get=function(t){try{if(window.localStorage)return localStorage.getItem(t)}catch(e){return window[t+"_localStorage"]}return""}},{}],31:[function(e,C,t){if(C.exports.USER_AGENT=navigator.userAgent,C.exports.IS_IPHONE=/iPhone/i.test(C.exports.USER_AGENT),C.exports.IS_IPAD=/iPad/i.test(C.exports.USER_AGENT),C.exports.IS_IPOD=/iPod/i.test(C.exports.USER_AGENT),C.exports.IS_MAC=/mac/i.test(C.exports.USER_AGENT),C.exports.IS_EDGE=/Edge/i.test(C.exports.USER_AGENT),C.exports.IS_IE11=/Trident\/7.0/i.test(C.exports.USER_AGENT),C.exports.IS_X5=/qqbrowser/i.test(C.exports.USER_AGENT.toLowerCase()),C.exports.IS_CHROME=/Chrome/i.test(C.exports.USER_AGENT)&&!C.exports.IS_EDGE&&!C.exports.IS_X5,C.exports.IS_SAFARI=/Safari/i.test(C.exports.USER_AGENT)&&!C.exports.IS_CHROME,C.exports.IS_FIREFOX=/Firefox/i.test(C.exports.USER_AGENT),document.all)try{var i=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");C.exports.HAS_FLASH=!!i}catch(e){C.exports.HAS_FLASH=!1}else if(navigator.plugins&&0<navigator.plugins.length){i=navigator.plugins["Shockwave Flash"];C.exports.HAS_FLASH=!!i}else C.exports.HAS_FLASH=!1;var r,o,n,a;C.exports.IS_MAC_SAFARI=C.exports.IS_MAC&&C.exports.IS_SAFARI&&!C.exports.IS_CHROME&&!C.exports.HAS_FLASH,C.exports.IS_IOS=C.exports.IS_IPHONE||C.exports.IS_IPAD||C.exports.IS_IPOD,C.exports.IOS_VERSION=function(){var e=C.exports.USER_AGENT.match(/OS (\d+)_/i);if(e&&e[1])return e[1]}(),C.exports.IS_ANDROID=/Android/i.test(C.exports.USER_AGENT),C.exports.ANDROID_VERSION=(n=C.exports.USER_AGENT.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i))?(r=n[1]&&parseFloat(n[1]),o=n[2]&&parseFloat(n[2]),r&&o?parseFloat(n[1]+"."+n[2]):r||null):null,C.exports.IS_OLD_ANDROID=C.exports.IS_ANDROID&&/webkit/i.test(C.exports.USER_AGENT)&&C.exports.ANDROID_VERSION<2.3,C.exports.TOUCH_ENABLED=!!("ontouchstart"in window||window.DocumentTouch&&document instanceof window.DocumentTouch),C.exports.IS_MOBILE=C.exports.IS_IOS||C.exports.IS_ANDROID,C.exports.IS_H5=C.exports.IS_MOBILE||!C.exports.HAS_FLASH,C.exports.IS_PC=!C.exports.IS_MOBILE,C.exports.is_X5=/micromessenger/i.test(C.exports.USER_AGENT)||/qqbrowser/i.test(C.exports.USER_AGENT),C.exports.getHost=function(e){var t="";if(void 0===e||null==e||""==e)return"";var i=e.indexOf("//"),r=e;-1<i&&(r=e.substring(i+2));t=r;var o=r.split("/");return o&&0<o.length&&(t=o[0]),(o=t.split(":"))&&0<o.length&&(t=o[0]),t},C.exports.dingTalk=function(){var e=C.exports.USER_AGENT.toLowerCase();return/dingtalk/i.test(e)},C.exports.wechat=function(){var e=C.exports.USER_AGENT.toLowerCase();return/micromessenger/i.test(e)},C.exports.inIFrame=function(){return self!=top},C.exports.getReferer=function(){var t=document.referrer;if(C.exports.inIFrame())try{t=top.document.referrer}catch(e){t=document.referrer}return t},C.exports.getHref=function(){location.href;if(C.exports.inIFrame())try{top.location.href}catch(e){location.href}return location.href},a=C.exports,function(e,t){var i=this.os={},r=this.browser={},o=e.match(/Web[kK]it[\/]{0,1}([\d.]+)/),n=e.match(/(Android);?[\s\/]+([\d.]+)?/),a=!!e.match(/\(Macintosh\; Intel /),s=e.match(/(iPad).*OS\s([\d_]+)/),l=e.match(/(iPod)(.*OS\s([\d_]+))?/),u=!s&&e.match(/(iPhone\sOS)\s([\d_]+)/),c=e.match(/(webOS|hpwOS)[\s\/]([\d.]+)/),d=/Win\d{2}|Windows/.test(t),p=e.match(/Windows Phone ([\d.]+)/),h=c&&e.match(/TouchPad/),f=e.match(/Kindle\/([\d.]+)/),_=e.match(/Silk\/([\d._]+)/),g=e.match(/(BlackBerry).*Version\/([\d.]+)/),y=e.match(/(BB10).*Version\/([\d.]+)/),v=e.match(/(RIM\sTablet\sOS)\s([\d.]+)/),m=e.match(/PlayBook/),S=e.match(/Chrome\/([\d.]+)/)||e.match(/CriOS\/([\d.]+)/),T=e.match(/Firefox\/([\d.]+)/),b=e.match(/\((?:Mobile|Tablet); rv:([\d.]+)\).*Firefox\/[\d.]+/),x=e.match(/MSIE\s([\d.]+)/)||e.match(/Trident\/[\d](?=[^\?]+).*rv:([0-9.].)/),E=!S&&e.match(/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/),P=E||e.match(/Version\/([\d.]+)([^S](Safari)|[^M]*(Mobile)[^S]*(Safari))/);if((r.webkit=!!o)&&(r.version=o[1]),n&&(i.android=!0,i.version=n[2]),u&&!l&&(i.ios=i.iphone=!0,i.version=u[2].replace(/_/g,".")),s&&(i.ios=i.ipad=!0,i.version=s[2].replace(/_/g,".")),l&&(i.ios=i.ipod=!0,i.version=l[3]?l[3].replace(/_/g,"."):null),p&&(i.wp=!0,i.version=p[1]),c&&(i.webos=!0,i.version=c[2]),h&&(i.touchpad=!0),g&&(i.blackberry=!0,i.version=g[2]),y&&(i.bb10=!0,i.version=y[2]),v&&(i.rimtabletos=!0,i.version=v[2]),m&&(r.playbook=!0),f&&(i.kindle=!0,i.version=f[1]),_&&(r.silk=!0,r.version=_[1]),!_&&i.android&&e.match(/Kindle Fire/)&&(r.silk=!0),S&&(r.chrome=!0,r.version=S[1]),T&&(r.firefox=!0,r.version=T[1]),b&&(i.firefoxos=!0,i.version=b[1]),x&&(r.ie=!0,r.version=x[1]),P&&(a||i.ios||d||n)&&(r.safari=!0,i.ios||(r.version=P[1])),E&&(r.webview=!0),a){var w=e.match(/[\d]*_[\d]*_[\d]*/);w&&0<w.length&&w[0]&&(i.version=w[0].replace(/_/g,"."))}i.tablet=!!(s||m||n&&!e.match(/Mobile/)||T&&e.match(/Tablet/)||x&&!e.match(/Phone/)&&e.match(/Touch/)),i.phone=!(i.tablet||i.ipod||!(n||u||c||g||y||S&&e.match(/Android/)||S&&e.match(/CriOS\/([\d.]+)/)||T&&e.match(/Mobile/)||x&&e.match(/Touch/))),i.pc=!i.tablet&&!i.phone,a?i.name="macOS":d?(i.name="windows",i.version=function(){var e=navigator.userAgent,t="";return(-1<e.indexOf("Windows NT 5.0")||-1<e.indexOf("Windows 2000"))&&(t="2000"),(-1<e.indexOf("Windows NT 5.1")||-1<e.indexOf("Windows XP"))&&(t="XP"),(-1<e.indexOf("Windows NT 5.2")||-1<e.indexOf("Windows 2003"))&&(t="2003"),(-1<e.indexOf("Windows NT 6.0")||-1<e.indexOf("Windows Vista"))&&(t="Vista"),(-1<e.indexOf("Windows NT 6.1")||-1<e.indexOf("Windows 7"))&&(t="7"),(-1<e.indexOf("Windows NT 6.2")||-1<e.indexOf("Windows 8"))&&(t="8"),(-1<e.indexOf("Windows NT 6.3")||-1<e.indexOf("Windows 8.1"))&&(t="8.1"),(-1<e.indexOf("Windows NT 10")||-1<e.indexOf("Windows 10"))&&(t="10"),t}()):i.name=function(){var e=navigator.userAgent,t="other",i=C.exports.os;if(i.ios)return"iOS";if(i.android)return"android";if(-1<e.indexOf("Baiduspider"))return"Baiduspider";if(-1<e.indexOf("PlayStation"))return"PS4";var r="Win32"==navigator.platform||"Windows"==navigator.platform||-1<e.indexOf("Windows"),o="Mac68K"==navigator.platform||"MacPPC"==navigator.platform||"Macintosh"==navigator.platform||"MacIntel"==navigator.platform;return o&&(t="macOS"),"X11"!=navigator.platform||r||o||(t="Unix"),-1<String(navigator.platform).indexOf("Linux")&&(t="Linux"),r?"windows":t}(),r.name=function(){var e=navigator.userAgent.toLowerCase(),t=C.exports.browser;return t.firefox?"Firefox":t.ie?/edge/.test(e)?"Edge":"IE":/micromessenger/.test(e)?"\u5fae\u4fe1\u5185\u7f6e\u6d4f\u89c8\u5668":/qqbrowser/.test(e)?"QQ\u6d4f\u89c8\u5668":t.webview?"webview":t.chrome?"Chrome":t.safari?"Safari":/baiduspider/.test(e)?"Baiduspider":/ucweb/.test(e)||/UCBrowser/.test(e)?"UC":/opera/.test(e)?"Opera":/ucweb/.test(e)?"UC":/360se/.test(e)?"360\u6d4f\u89c8\u5668":/bidubrowser/.test(e)?"\u767e\u5ea6\u6d4f\u89c8\u5668":/metasr/.test(e)?"\u641c\u72d7\u6d4f\u89c8\u5668":/lbbrowser/.test(e)?"\u730e\u8c79\u6d4f\u89c8\u5668":/playstation/.test(e)?"PS4\u6d4f\u89c8\u5668":void 0}()}.call(a,navigator.userAgent,navigator.platform)},{}],32:[function(e,t,i){var s=e("./dom");t.exports.getAbsoluteURL=function(e){return e.match(/^https?:\/\//)||(e=s.createEl("div",{innerHTML:'<a href="'+e+'">x</a>'}).firstChild.href),e},t.exports.parseUrl=function(e){var t,i,r,o,n;o=["protocol","hostname","port","pathname","search","hash","host"],(r=""===(i=s.createEl("a",{href:e})).host&&"file:"!==i.protocol)&&((t=s.createEl("div")).innerHTML='<a href="'+e+'"></a>',i=t.firstChild,t.setAttribute("style","display:none; position:absolute;"),document.body.appendChild(t)),n={};for(var a=0;a<o.length;a++)n[o[a]]=i[o[a]];return n.segments=i.pathname.replace(/^\//,"").split("/"),r&&document.body.removeChild(t),n}},{"./dom":18}],33:[function(e,r,t){var i=e("./dom"),o=e("./ua"),n=e("./playerutil");r.exports.formatTime=function(e){var t,i,r,o=Math.floor(e);return t=Math.floor(o/3600),o%=3600,i=Math.floor(o/60),r=o%60,!(t===1/0||isNaN(t)||i===1/0||isNaN(i)||r===1/0||isNaN(r))&&("00"===(t=10<=t?t:"0"+t)?"":t+":")+(i=10<=i?i:"0"+i)+":"+(r=10<=r?r:"0"+r)},r.exports.extractTime=function(e){if(e){var t=parseInt(e.getHours()),i=parseInt(e.getMinutes()),r=parseInt(e.getSeconds());return("00"===(t=10<=t?t:"0"+t)?"":t+":")+(i=10<=i?i:"0"+i)+":"+(r=10<=r?r:"0"+r)}return""},r.exports.convertToTimestamp=function(e,t){var i="";return e&&(t?i=e.gettime():(i=Date.parse(e),i/=1e3)),i},r.exports.convertToDate=function(e,t){var i="";if(e){t||1e3,(i=new Date).setTime(1e3*e)}return i},r.exports.parseTime=function(e){if(!e)return"00:00:00";var t=e.split(":"),i=0,r=0,o=0;return 3===t.length?(i=t[0],r=t[1],o=t[2]):2===t.length?(r=t[0],o=t[1]):1===t.length&&(o=t[0]),3600*(i=parseInt(i,10))+60*(r=parseInt(r,10))+(o=Math.ceil(parseFloat(o)))},r.exports.formatDate=function(e,t){var i={"M+":e.getMonth()+1,"d+":e.getDate(),"H+":e.getHours(),"m+":e.getMinutes(),"s+":e.getSeconds(),"q+":Math.floor((e.getMonth()+3)/3),S:e.getMilliseconds()};for(var r in/(y+)/.test(t)&&(t=t.replace(RegExp.$1,(e.getFullYear()+"").substr(4-RegExp.$1.length))),i)new RegExp("("+r+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?i[r]:("00"+i[r]).substr((""+i[r]).length)));return t},r.exports.sleep=function(e){for(var t=Date.now();Date.now()-t<=e;);},r.exports.htmlEncodeAll=function(e){return null==e?"":e.replace(/\</g,"&lt;").replace(/\>/g,"&gt;").replace(/\&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")},r.exports.toBinary=function(e){if(!window.atob)return"";for(var t=atob(e),i=t.length,r=new Uint8Array(i),o=0;o<i;o++)r[o]=t.charCodeAt(o);return r},r.exports.readyBinary=function(e){for(var t=new Uint8Array(e),i=t.length,r="",o=0;o<i;o++)r+=t[o];return r},r.exports.delayHide=function(e,t){e&&(void 0===t&&(t=1e3),e.delayHanlder&&clearTimeout(e.delayHanlder),e.delayHanlder=setTimeout(function(){i.css(e,"display","none")},t))},r.exports.openInFile=function(){return-1!=window.location.protocol.toLowerCase().indexOf("file")},r.exports.contentProtocolMixed=function(e){return!!(o.os.pc&&(n.isHls(e)&&!o.browser.safari||n.isFlv(e))&&"https:"==window.location.protocol.toLowerCase()&&e&&-1<e.toLowerCase().indexOf("http://"))},r.exports.queryString=function(e){var t,i,r,o,n;return 2!==(i=(e=decodeURIComponent(e)).split("?")).length?{}:(n=i[1],(t=n.split("&"))?(r={},o=0,$(t).each(function(){var e;2===(e=t[o].split("=")).length&&(r[e[0]]=e[1].replace(/\+/g," ")),o++}),r):{})},r.exports.log=function(e){var t=window.location.href,i=r.exports.queryString(t);i&&1==i.debug&&console.log(e)}},{"./dom":18,"./playerutil":29,"./ua":31}],34:[function(e,t,i){var s=e("./vttparse"),l=function(e){for(var t=5381,i=e.length;i;)t=33*t^e.charCodeAt(--i);return(t>>>0).toString()},r={parse:function(e,t,i){var r,o=e.trim().replace(/\r\n|\n\r|\n|\r/g,"\n").split("\n"),n=[],a=new s;a.oncue=function(e){e.id=l(e.startTime)+l(e.endTime)+l(e.text),e.text=decodeURIComponent(escape(e.text)),e.isBig=!1;var t=e.text.split("#xywh=");if(2==t.length){var i=t[1].split(",");e.x=i[0],e.y=i[1],e.w=i[2],e.h=i[3],e.isBig=!0}0<e.endTime&&n.push(e)},a.onparsingerror=function(e){r=e},a.onflush=function(){if(r&&i)return i(r),void console.log(r);t(n)},o.forEach(function(e){a.parse(e+"\n")}),a.flush()}};t.exports=r},{"./vttparse":36}],35:[function(e,t,i){t.exports=function(){if("undefined"!=typeof window&&window.VTTCue)return window.VTTCue;var S={"":!0,lr:!0,rl:!0},t={start:!0,middle:!0,end:!0,left:!0,right:!0};function T(e){return"string"==typeof e&&(!!t[e.toLowerCase()]&&e.toLowerCase())}function b(e){for(var t=1;t<arguments.length;t++){var i=arguments[t];for(var r in i)e[r]=i[r]}return e}function e(e,t,i){var r=this,o=function(){if("undefined"!=typeof navigator)return/MSIE\s8\.0/.test(navigator.userAgent)}(),n={};o?r=document.createElement("custom"):n.enumerable=!0,r.hasBeenReset=!1;var a="",s=!1,l=e,u=t,c=i,d=null,p="",h=!0,f="auto",_="start",g=50,y="middle",v=50,m="middle";if(Object.defineProperty(r,"id",b({},n,{get:function(){return a},set:function(e){a=""+e}})),Object.defineProperty(r,"pauseOnExit",b({},n,{get:function(){return s},set:function(e){s=!!e}})),Object.defineProperty(r,"startTime",b({},n,{get:function(){return l},set:function(e){if("number"!=typeof e)throw new TypeError("Start time must be set to a number.");l=e,this.hasBeenReset=!0}})),Object.defineProperty(r,"endTime",b({},n,{get:function(){return u},set:function(e){if("number"!=typeof e)throw new TypeError("End time must be set to a number.");u=e,this.hasBeenReset=!0}})),Object.defineProperty(r,"text",b({},n,{get:function(){return c},set:function(e){c=""+e,this.hasBeenReset=!0}})),Object.defineProperty(r,"region",b({},n,{get:function(){return d},set:function(e){d=e,this.hasBeenReset=!0}})),Object.defineProperty(r,"vertical",b({},n,{get:function(){return p},set:function(e){var t=function(e){return"string"==typeof e&&!!S[e.toLowerCase()]&&e.toLowerCase()}(e);if(!1===t)throw new SyntaxError("An invalid or illegal string was specified.");p=t,this.hasBeenReset=!0}})),Object.defineProperty(r,"snapToLines",b({},n,{get:function(){return h},set:function(e){h=!!e,this.hasBeenReset=!0}})),Object.defineProperty(r,"line",b({},n,{get:function(){return f},set:function(e){if("number"!=typeof e&&"auto"!==e)throw new SyntaxError("An invalid number or illegal string was specified.");f=e,this.hasBeenReset=!0}})),Object.defineProperty(r,"lineAlign",b({},n,{get:function(){return _},set:function(e){var t=T(e);if(!t)throw new SyntaxError("An invalid or illegal string was specified.");_=t,this.hasBeenReset=!0}})),Object.defineProperty(r,"position",b({},n,{get:function(){return g},set:function(e){if(e<0||100<e)throw new Error("Position must be between 0 and 100.");g=e,this.hasBeenReset=!0}})),Object.defineProperty(r,"positionAlign",b({},n,{get:function(){return y},set:function(e){var t=T(e);if(!t)throw new SyntaxError("An invalid or illegal string was specified.");y=t,this.hasBeenReset=!0}})),Object.defineProperty(r,"size",b({},n,{get:function(){return v},set:function(e){if(e<0||100<e)throw new Error("Size must be between 0 and 100.");v=e,this.hasBeenReset=!0}})),Object.defineProperty(r,"align",b({},n,{get:function(){return m},set:function(e){var t=T(e);if(!t)throw new SyntaxError("An invalid or illegal string was specified.");m=t,this.hasBeenReset=!0}})),r.displayState=void 0,o)return r}return e.prototype.getCueAsHTML=function(){return window.WebVTT.convertCueToDOMTree(window,this.text)},e}()},{}],36:[function(e,t,i){var s=e("./vttcue"),r=function(){return{decode:function(e){if(!e)return"";if("string"!=typeof e)throw new Error("Error - expected string data.");return decodeURIComponent(encodeURIComponent(e))}}};function o(){this.window=window,this.state="INITIAL",this.buffer="",this.decoder=new r,this.regionList=[]}function l(){this.values=Object.create(null)}function u(e,t,i,r){var o=r?e.split(r):[e];for(var n in o)if("string"==typeof o[n]){var a=o[n].split(i);if(2===a.length)t(a[0],a[1])}}l.prototype={set:function(e,t){this.get(e)||""===t||(this.values[e]=t)},get:function(e,t,i){return i?this.has(e)?this.values[e]:t[i]:this.has(e)?this.values[e]:t},has:function(e){return e in this.values},alt:function(e,t,i){for(var r=0;r<i.length;++r)if(t===i[r]){this.set(e,t);break}},integer:function(e,t){/^-?\d+$/.test(t)&&this.set(e,parseInt(t,10))},percent:function(e,t){return!!(t.match(/^([\d]{1,3})(\.[\d]*)?%$/)&&0<=(t=parseFloat(t))&&t<=100)&&(this.set(e,t),!0)}};var c=new s(0,0,0),d="middle"===c.align?"middle":"center";function p(t,e,a){var i=t;function r(){var e=function(e){function t(e,t,i,r){return 3600*(0|e)+60*(0|t)+(0|i)+(0|r)/1e3}var i=e.match(/^(\d+):(\d{2})(:\d{2})?(\.\d{3})?/);if(!i)return null;var r=i[4];return r&&(r=r.replace(".","")),i[3]?t(i[1],i[2],i[3].replace(":",""),r):59<i[1]?t(i[1],i[2],0,r):t(0,i[1],i[2],r)}(t);if(null===e)throw new Error("Malformed timestamp: "+i);return t=t.replace(/^[^\sa-zA-Z-]+/,""),e}function o(){t=t.replace(/^\s+/,"")}if(o(),e.startTime=r(),o(),"--\x3e"!==t.substr(0,3))throw new Error("Malformed time stamp (time stamps must be separated by '--\x3e'): "+i);t=t.substr(3),o(),e.endTime=r(),o(),function(e,t){var n=new l;u(e,function(e,t){switch(e){case"region":for(var i=a.length-1;0<=i;i--)if(a[i].id===t){n.set(e,a[i].region);break}break;case"vertical":n.alt(e,t,["rl","lr"]);break;case"line":var r=t.split(","),o=r[0];n.integer(e,o),n.percent(e,o)&&n.set("snapToLines",!1),n.alt(e,o,["auto"]),2===r.length&&n.alt("lineAlign",r[1],["start",d,"end"]);break;case"position":r=t.split(","),n.percent(e,r[0]),2===r.length&&n.alt("positionAlign",r[1],["start",d,"end","line-left","line-right","auto"]);break;case"size":n.percent(e,t);break;case"align":n.alt(e,t,["start",d,"end","left","right"])}},/:/,/\s/),t.region=n.get("region",null),t.vertical=n.get("vertical","");var i=n.get("line","auto");"auto"===i&&-1===c.line&&(i=-1),t.line=i,t.lineAlign=n.get("lineAlign","start"),t.snapToLines=n.get("snapToLines",!0),t.size=n.get("size",100),t.align=n.get("align",d);var r=n.get("position","auto");"auto"===r&&50===c.position&&(r="start"===t.align||"left"===t.align?0:"end"===t.align||"right"===t.align?100:50),t.position=r}(t,e)}o.prototype={parse:function(e){var r=this;function t(){var e=r.buffer,t=0;for(e=function(e){return e.replace(/<br(?: \/)?>/gi,"\n")}(e);t<e.length&&"\r"!==e[t]&&"\n"!==e[t];)++t;var i=e.substr(0,t);return"\r"===e[t]&&++t,"\n"===e[t]&&++t,r.buffer=e.substr(t),i}e&&(r.buffer+=r.decoder.decode(e,{stream:!0}));try{var i;if("INITIAL"===r.state){if(!/\r\n|\n/.test(r.buffer))return this;var o=(i=t()).match(/^WEBVTT([ \t].*)?$/);if(!o||!o[0])throw new Error("Malformed WebVTT signature.");r.state="HEADER"}for(var n=!1;r.buffer;){if(!/\r\n|\n/.test(r.buffer))return this;switch(n?n=!1:i=t(),r.state){case"HEADER":/:/.test(i)?u(i,function(e,t){switch(e){case"Region":console.log("parse region",t)}},/:/):i||(r.state="ID");continue;case"NOTE":i||(r.state="ID");continue;case"ID":if(/^NOTE($|[ \t])/.test(i)){r.state="NOTE";break}if(!i)continue;if(r.cue=new s(0,0,""),r.state="CUE",-1===i.indexOf("--\x3e")){r.cue.id=i;continue}case"CUE":try{p(i,r.cue,r.regionList)}catch(e){r.cue=null,r.state="BADCUE";continue}r.state="CUETEXT";continue;case"CUETEXT":var a=-1!==i.indexOf("--\x3e");if(!i||a&&(n=!0)){r.oncue&&r.oncue(r.cue),r.cue=null,r.state="ID";continue}r.cue.text&&(r.cue.text+="\n"),r.cue.text+=i;continue;case"BADCUE":i||(r.state="ID");continue}}}catch(e){"CUETEXT"===r.state&&r.cue&&r.oncue&&r.oncue(r.cue),r.cue=null,r.state="INITIAL"===r.state?"BADWEBVTT":"BADCUE"}return this},flush:function(){var e=this;try{if(e.buffer+=e.decoder.decode(),(e.cue||"HEADER"===e.state)&&(e.buffer+="\n\n",e.parse()),"INITIAL"===e.state)throw new Error("Malformed WebVTT signature.")}catch(e){throw e}return e.onflush&&e.onflush(),this}},t.exports=o},{"./vttcue":35}],37:[function(e,t,i){var o=e("../lib/io");e("../lib/storage");function r(e){this._uploadDuration=e.logDuration||5,this._uploadCount=e.logCount||10,this._logReportTo=e.logReportTo,this._logs=[],this._retry=0,this._disposed=!1,this._supportLocalStorage=!0;var t=this;window&&(window.onbeforeunload=function(e){if(0<t._logs.length)if(t._supportLocalStorage)localStorage.setItem("__aliplayer_log_data",JSON.stringify(t._logs));else{t._report();!function(e){for(var t=(new Date).getTime(),i=t;i<t+e;)i=(new Date).getTime()}(500)}});try{if(localStorage){var i=localStorage.getItem("__aliplayer_log_data");localStorage.removeItem("__aliplayer_log_data"),i&&(this._logs=JSON.parse(i))}else this._supportLocalStorage=!1}catch(e){this._supportLocalStorage=!1}this._start()}r.prototype.add=function(e){var t=this._logs.length;if(e.__time__=Math.round(new Date/1e3),0<t&&"4001"==e.e){var i=this._logs[t-1];if("4001"==i.e&&i.__time__-e.__time__<5)return}this._logs.push(e),(this._logs.length>this._uploadCount||"4001"==e.e||"2002"==e.e)&&this._report()},r.prototype.dispose=function(){this._report(),this._disposed=!0},r.prototype._start=function(){this._disposed=!1;this._retry=0,this._report()},r.prototype._report=function(t){if(this._tickHandler&&(clearTimeout(this._tickHandler),this._tickHandler=null),t||(t=this._logs.splice(0,this._uploadCount)),0<t.length){var e=JSON.stringify({__logs__:t,__source__:""}),i=this,r={"Content-Type":"application/json;charset=UTF-8","x-log-apiversion":"0.6.0","x-log-bodyrawsize":e.length};o.postWithHeader(this._logReportTo,e,r,function(e){i._tick()},function(e){0==i._retry?(i._retry=1,i._report(t)):i._tick()})}else this._tick()},r.prototype._tick=function(){if(!this._disposed){this._retry=0;var e=this;this._logs.length>this._uploadCount?e._report():this._tickHandler=setTimeout(function(){e._report()},1e3*this._uploadDuration)}},t.exports=r},{"../lib/io":24,"../lib/storage":30}],38:[function(e,t,i){var r=e("../lib/oo"),u=e("../lib/object"),v=e("../lib/data"),c=e("../lib/io"),m=e("../lib/ua"),S=e("../config"),o=e("../player/base/event/eventtype"),T=e("./util"),b=e("./log"),n=0,d={STARTFETCHDATA:1003,COMPLETEFETCHDATA:1004,PREPARE:1101,PREPAREEND:1102,STARTPLAY:2e3,PLAY:2001,STOP:2002,PAUSE:2003,SEEK:2004,FULLSREEM:2005,QUITFULLSCREEM:2006,RESOLUTION:2007,RESOLUTION_DONE:2008,RECOVER:2010,SEEK_END:2011,FETCHEDIP:2020,CDNDETECT:2021,DETECT:2022,UNDERLOAD:3002,LOADED:3001,HEARTBEAT:9001,ERROR:4001,ERRORRETRY:4002,SNAPSHOT:2027,ROTATE:2028,IMAGE:2029,THUMBNAILSTART:2031,THUMBNAILCOMPLETE:2032,CCSTART:2033,CCCOMPLETE:2034,AUDIOTRACKSTART:2033,AUDIOTRACKCOMPLETE:2034},a=r.extend({init:function(e,t,i){void 0===i&&(i=!0),this.trackLog=i,this.player=e,this.requestId="",this.sessionId=v.guid(),this.playId=0,this.firstPlay=!0,this.osName=m.os.name,this.osVersion=m.os.version||"",this.exName=m.browser.name,this.exVersion=m.browser.version||"",this._logService="",t.logBatched&&(this._logService=new b(S));var r=this.player.getOptions(),o=t.from?t.from:"",n=(r.isLive,r.isLive?"live":"vod"),a="pc";m.IS_IPAD?a="pad":m.os.phone&&(a="phone");var s=this.encodeURL(m.getReferer()),l=m.getHref(),u=this.encodeURL(l),c="";l&&(c=m.getHost(l));var d=S.h5Version,p=T.getUuid(),h=r.source?this.encodeURL(r.source):"",f=m.getHost(r.source),_=r.userId?r.userId+"":"0",g=this.sessionId,y=(new Date).getTime();this._userNetInfo={cdnIp:"",localIp:""};this.opt={APIVersion:"0.6.0",t:y,ll:"info",lv:"1.0",pd:"player",md:"saas_player",ui:"saas_player",sm:"play",os:this.osName,ov:this.osVersion,et:this.exName,ev:this.exVersion,uat:m.USER_AGENT,hn:"0.0.0.0",bi:o,ri:g,e:"0",args:"0",vt:n,tt:a,dm:"h5",av:d,uuid:p,vu:h,vd:f,ua:_,dn:"custom",cdn_ip:"0.0.0.0",app_n:c,r:s,pu:u},this.bindEvent()},updateVideoInfo:function(e){var t=e.from?e.from:"";this.opt.bi=t+"",this.updateSourceInfo()},updateSourceInfo:function(){var e=this.player.getOptions();if(e){var t=e.source?this.encodeURL(e.source):"",i=m.getHost(e.source);this.opt.vu=t,this.opt.vd=i}},replay:function(){this.reset(),this.player.trigger(o.Video.LoadStart),this.player.trigger(o.Video.LoadedMetadata),this.player.trigger(o.Video.LoadedData)},bindEvent:function(){var t=this;this.player.on(o.Player.Init,function(){t._onPlayerInit()}),this.player.on(o.Video.LoadStart,function(){t._onPlayerloadstart()}),this.player.on(o.Video.LoadedMetadata,function(){t._onPlayerLoadMetadata()}),this.player.on(o.Video.LoadedData,function(){t._onPlayerLoaddata()}),this.player.on(o.Video.Play,function(){t._onPlayerPlay()}),this.player.on(o.Video.Playing,function(){t._onPlayerReady()}),this.player.on(o.Video.Ended,function(){t._onPlayerFinish()}),this.player.on(o.Video.Pause,function(){t._onPlayerPause()}),this.player.on(o.Private.SeekStart,function(e){t._onPlayerSeekStart(e)}),this.player.on(o.Private.EndStart,function(e){t._seekEndData=e.paramData}),this.player.on(o.Player.Waiting,function(){t._waitingDelayLoadingShowHandle&&(clearTimeout(t._waitingDelayLoadingShowHandle),t._waitingDelayLoadingShowHandle=null),t._waitingDelayLoadingShowHandle=setTimeout(function(){t._onPlayerLoaded()},1e3*t.player._options.delayLoadingShow)}),this.player.on(o.Video.CanPlayThrough,function(){}),this.player.on(o.Video.CanPlay,function(){t._waitingDelayLoadingShowHandle&&(clearTimeout(t._waitingDelayLoadingShowHandle),t._waitingDelayLoadingShowHandle=null),t._onPlayerUnderload(),t._onPlayerCanplay()}),this.player.on(o.Video.TimeUpdate,function(){t._waitingDelayLoadingShowHandle&&(clearTimeout(t._waitingDelayLoadingShowHandle),t._waitingDelayLoadingShowHandle=null),t._seekEndData&&t.seeking&&t._onPlayerSeekEnd()}),this.player.on(o.Player.Error,function(){t._onPlayerError()}),this.player.on(o.Player.RequestFullScreen,function(){t._onFullscreenChange(1)}),this.player.on(o.Player.CancelFullScreen,function(){t._onFullscreenChange(0)}),this.player.on(o.Private.PREPARE,function(e){t._prepareTime=(new Date).getTime(),t._log("PREPARE",{dn:e.paramData})}),this.player.on(o.Player.Snapshoted,function(){t._log("SNAPSHOT")}),setInterval(function(){if(t.player.getCurrentTime()){var e=Math.floor(1e3*t.player.getCurrentTime());t.player.paused()||30<=++n&&(t._log("HEARTBEAT",{vt:e,interval:1e3*n}),n=0)}},1e3)},removeEvent:function(){this.player.off("init"),this.player.off("ready"),this.player.off("ended"),this.player.off("play"),this.player.off("pause"),this.player.off("seekStart"),this.player.off("seekEnd"),this.player.off("canplaythrough"),this.player.off("playing"),this.player.off("timeupdate"),this.player.off("error"),this.player.off("fullscreenchange"),this.player.off(o.Private.PREPARE),this._logService&&this._logService.dispose()},reset:function(){this.startTimePlay=0,this.buffer_flag=0,this.firstPlay=!1,this.playId=0,this.loadstarted=0,this._LoadedData=0,this._canPlay=0},encodeURL:function(e){if(!e)return"";var t=this.player.getOptions();return t&&!t.logBatched?encodeURIComponent(e):e},_onFullscreenChange:function(e){e?this._log("FULLSREEM",{}):this._log("QUITFULLSCREEM",{})},_onPlayerloadstart:function(){this.loadstartTime=(new Date).getTime(),this.playId=v.guid(),!this.loadstarted&&this.player._isPreload()&&(this.loadstarted=1,this._log("STARTPLAY",{vt:(new Date).getTime()}))},_onPlayerLoadMetadata:function(){this.loadMetaDataCost=(new Date).getTime()-this.loadstartTime},_onPlayerLoaddata:function(){if(!this._LoadedData&&!this.buffer_flag){var e=0,t=0;this.player.tag&&(e=this.player.tag.videoWidth,t=this.player.tag.videoHeight),this._log("PREPAREEND",{tc:(new Date).getTime()-this._prepareTime,cc:(new Date).getTime()-this.loadstartTime,md:this.loadMetaDataCost,mi:JSON.stringify({type:"video",definition:e+"*"+t})})}this._LoadedData=1},_onPlayerCanplay:function(){this._canPlay=1,this._reportPlay()},_onPlayerInit:function(){this.buffer_flag=0,this.pause_flag=0,this.startTimePlay=0,this.loadstarted=0,this._LoadedData=0,this._canPlay=0},_onPlayerReady:function(){this.startTimePlay||(this.startTimePlay=(new Date).getTime())},_onPlayerFinish:function(){this._log("STOP",{vt:Math.floor(1e3*this.player.getCurrentTime())}),this.reset()},_reportPlay:function(){return!(this.buffer_flag||!this._LoadedData||!this.playstartTime)&&(this.first_play_time=(new Date).getTime(),this._log("PLAY",{dsm:"fix",tc:this.first_play_time-this.loadstartTime,fc:this.first_play_time-this.playstartTime}),this.buffer_flag=1,!0)},_onPlayerPlay:function(){this.playstartTime=(new Date).getTime(),0==this.playId&&(this.playId=v.guid()),this.firstPlay||0!=this.pause_flag||this.seeking||(this.sessionId=v.guid()),this.player._isPreload()||(this._log("STARTPLAY",{vt:(new Date).getTime()}),this.loadstartTime=(new Date).getTime()),this._canPlay&&this._reportPlay()||this.buffer_flag&&this.pause_flag&&(this.pause_flag=0,this.pauseEndTime=(new Date).getTime(),this._log("RECOVER",{vt:Math.floor(1e3*this.player.getCurrentTime()),cost:this.pauseEndTime-this.pauseTime}))},_onPlayerPause:function(){this.buffer_flag&&this.startTimePlay&&(this.seeking||(this.pause_flag=1,this.pauseTime=(new Date).getTime(),this._log("PAUSE",{vt:Math.floor(1e3*this.player.getCurrentTime())})))},_onPlayerSeekStart:function(e){this.seekStartTime=e.paramData.fromTime,this.seeking=!0,this.startTimePlay=0,this.seekStartStamp=(new Date).getTime()},_onPlayerSeekEnd:function(){this.seekEndStamp=(new Date).getTime(),this._log("SEEK",{drag_from_timestamp:Math.floor(1e3*this.seekStartTime),drag_to_timestamp:Math.floor(1e3*this._seekEndData.toTime)}),this._log("SEEK_END",{vt:Math.floor(1e3*this.player.getCurrentTime()),cost:this.seekEndStamp-this.seekStartStamp}),this.seeking=!1,this._seekEndData=null},_onPlayerLoaded:function(){this.buffer_flag&&this.startTimePlay&&(this.stucking||this.seeking||(this.stuckStartTime=(new Date).getTime(),this.stuckStartTime-this.startTimePlay<=1e3||(this.stucking=!0,this._log("UNDERLOAD",{vt:Math.floor(1e3*this.player.getCurrentTime())}),this.stuckStartTime=(new Date).getTime())))},_onPlayerUnderload:function(){if((this.buffer_flag||!this.player._options||!this.player._options.autoplay)&&this.stucking&&!this.seeking){var e=Math.floor(1e3*this.player.getCurrentTime()),t=this.stuckStartTime||(new Date).getTime(),i=Math.floor((new Date).getTime()-t);0<i&&this._log("LOADED",{vt:e,cost:i}),this.stucking=!1}},_onPlayerHeartBeat:function(){if(!this.seeking){var e=Math.floor(1e3*this.player.getCurrentTime()),t=this;this.timer||(this.timer=setTimeout(function(){!t.seeking&&t._log("HEARTBEAT",{progress:e}),clearTimeout(t.timer),t.timer=null},6e4)),console.log("timeupdate")}},_onPlayerError:function(){this.playId=0,this._LoadedData=1,this.buffer_flag||this._reportPlay()},_log:function(e,t){if(this.trackLog){this.updateSourceInfo();var i=u.copy(this.opt);this.requestId=v.guid();var r=S.logReportTo;i.e=d[e]+"",i.ri=this.sessionId,i.t=(new Date).getTime()+"",i.cdn_ip=this._userNetInfo.cdnIp,i.hn=this._userNetInfo.localIp;var o=this.player.getCurrentQuality();""!=o&&(i.definition=o.definition);var n=[];u.each(t,function(e,t){n.push(e+"="+t)});var a="",s=this.player.getOptions();s&&s.vid&&(a=s.vid),n.push("vid="+a);try{Aliplayer&&Aliplayer.__logCallback__&&(i.args=n,Aliplayer.__logCallback__(i))}catch(e){console.log(e)}if(""==(n=n.join("&"))&&(n="0"),i.args=this.encodeURL(n),this._logService)this._logService.add(i);else{var l=[];u.each(i,function(e,t){l.push(e+"="+t)}),l=l.join("&"),c.jsonp(r+"?"+l,function(){},function(){})}return this.sessionId}}});t.exports=a},{"../config":5,"../lib/data":17,"../lib/io":24,"../lib/object":26,"../lib/oo":27,"../lib/ua":31,"../player/base/event/eventtype":43,"./log":37,"./util":39}],39:[function(e,t,i){var r=e("../lib/cookie"),o=e("../lib/data"),n=e("../lib/ua");t.exports.getUuid=function(){var e=r.get("p_h5_u");return e||(e=o.guid(),r.set("p_h5_u",e,730)),e},t.exports.getTerminalType=function(){var e="pc";return n.IS_IPAD?e="pad":n.IS_ANDROID?e="android":n.IS_IOS&&(e="iphone"),e},t.exports.returnUTCDate=function(e){var t=e.getUTCFullYear(),i=e.getUTCMonth(),r=e.getUTCDate(),o=e.getUTCHours(),n=e.getUTCMinutes(),a=e.getUTCSeconds(),s=e.getUTCMilliseconds();return Date.UTC(t,i,r,o,n,a,s)},t.exports.getRfc822=function(e){return e.toUTCString().replace("UTC","GMT")}},{"../lib/cookie":16,"../lib/data":17,"../lib/ua":31}],40:[function(e,t,i){var s=e("./base/player"),l=e("./flash/flashplayer"),u=e("./saas/mtsplayer"),c=e("./saas/vodplayer"),d=e("./taotv/taotvplayer"),p=e("./audio/audioplayer"),h=e("./hls/hlsplayer"),f=e("./flv/flvplayer"),_=e("./drm/drmplayer"),g=e("../lib/ua"),y=e("../lib/playerutil"),v=(e("../lib/dom"),e("../lib/io"),e("../lang/index"));t.exports.create=function(e,t){"function"!=typeof t&&(t=function(){}),e.readyCallback=t,v.setCurrentLanguage(e.language,"h5",e.languageTexts);var i=y.handleOption(e),r=i.source,o=y.isAudio(r);o&&(i.mediaType="audio");var n,a=y.createWrapper(i);return a.player?a.player:(o?n=new p(a,i):!i.useFlashPrism&&y.isFlv(r)&&y.isSupportFlv()?n=new f(a,i):g.IS_MOBILE||!i.useFlashPrism&&!y.isRTMP(r)?i.vid&&!i.source?n=i.authInfo?new u(a,i):i.playauth||i.accessKeyId&&i.accessKeySecret?new c(a,i):new d(a,i):y.isDash(r)&&y.isSupportMSE()?n=new _(a,i):y.isHls(r)?y.canPlayHls()?n=y.isSupportHls()&&(y.isUsedHlsPluginOnMobile()||y.isSafariUsedHlsPlugin(i.useHlsPluginForSafari))?new h(a,i):new s(a,i):y.isSupportHls()?n=new h(a,i):g.os.pc?i.userH5Prism||i.useH5Prism||(n=new l(a,i)):n=new s(a,i):n=(g.os.pc,new s(a,i)):n=new l(a,i),n)}},{"../lang/index":11,"../lib/dom":18,"../lib/io":24,"../lib/playerutil":29,"../lib/ua":31,"./audio/audioplayer":41,"./base/player":62,"./drm/drmplayer":69,"./flash/flashplayer":70,"./flv/flvplayer":72,"./hls/hlsplayer":74,"./saas/mtsplayer":78,"./saas/vodplayer":84,"./taotv/taotvplayer":93}],41:[function(e,t,i){var r=e("../base/player"),o=e("../../ui/component"),n=e("../../lib/dom"),a=e("../../lib/object"),s=e("../../lib/playerutil"),l=r.extend({init:function(e,t){this._isAudio=!0,void 0===t.skinLayout&&(t.skinLayout=s.defaultAudioLayout),r.call(this,e,t)}});l.prototype.createEl=function(){"AUDIO"!==this.tag.tagName&&(this._el=this.tag,this.tag=o.prototype.createEl.call(this,"audio"));var t=this._el,e=this.tag;e.player=this;var i=n.getElementAttributes(e);return a.each(i,function(e){t.setAttribute(e,i[e])}),this.setVideoAttrs(),e.parentNode&&e.parentNode.insertBefore(t,e),n.insertFirst(e,t),t},t.exports=l},{"../../lib/dom":18,"../../lib/object":26,"../../lib/playerutil":29,"../../ui/component":94,"../base/player":62}],42:[function(e,t,i){var a=e("../../../lib/event"),s=e("./eventtype"),r=e("../eventHandler/video/index"),o=e("../eventHandler/player/index");t.exports.offAll=function(e){var t=e.tag,i=e._el;for(var r in s.Video)a.off(t,s.Video[r]);for(var o in s.Player)a.off(i,s.Player[o]);for(var n in s.Private)a.off(i,s.Private[n])},t.exports.onAll=function(e){r.bind(e),o.bind(e)}},{"../../../lib/event":19,"../eventHandler/player/index":47,"../eventHandler/video/index":56,"./eventtype":43}],43:[function(e,t,i){t.exports={Video:{TimeUpdate:"timeupdate",Play:"play",Playing:"playing",Pause:"pause",CanPlay:"canplay",Waiting:"waiting",Ended:"ended",Error:"error",Suspend:"suspend",Stalled:"stalled",LoadStart:"loadstart",DurationChange:"durationchange",LoadedData:"loadeddata",LoadedMetadata:"loadedmetadata",Progress:"progress",CanPlayThrough:"canplaythrough",ContextMenu:"contextmenu",Seeking:"seeking",Seeked:"seeked",ManualEnded:"manualended"},Player:{TimeUpdate:"timeupdate",DurationChange:"durationchange",Init:"init",Ready:"ready",Play:"play",Pause:"pause",CanPlay:"canplay",Waiting:"waiting",Ended:"ended",Error:"error",RequestFullScreen:"requestFullScreen",CancelFullScreen:"cancelFullScreen",Snapshoted:"snapshoted",Snapshoting:"snapshoting",OnM3u8Retry:"onM3u8Retry",LiveStreamStop:"liveStreamStop",AutoPlayPrevented:"autoPlayPrevented",AutoPlay:"autoplay",StartSeek:"startSeek",CompleteSeek:"completeSeek",TextTrackReady:"textTrackReady",AudioTrackReady:"audioTrackReady",AudioTrackUpdated:"audioTrackUpdated",LevelsLoaded:"levelsLoaded",AudioTrackSwitch:"audioTrackSwitch",AudioTrackSwitched:"audioTrackSwitched",LevelSwitch:"levelSwitch",LevelSwitched:"levelSwitched",MarkerDotOver:"markerDotOver",MarkerDotOut:"markerDotOut"},Private:{Play_Btn_Show:"play_btn_show",UiH5Ready:"uiH5Ready",Error_Hide:"error_hide",Error_Show:"error_show",Info_Show:"info_show",Info_Hide:"info_hide",H5_Loading_Show:"h5_loading_show",H5_Loading_Hide:"h5_loading_hide",HideProgress:"hideProgress",CancelHideProgress:"cancelHideProgress",Click:"click",MouseOver:"mouseover",MouseOut:"mouseout",MouseEnter:"mouseenter",MouseLeave:"mouseleave",TouchStart:"touchstart",TouchMove:"touchmove",TouchEnd:"touchend",HideBar:"hideBar",ShowBar:"showBar",ReadyState:"readyState",SourceLoaded:"sourceloaded",QualityChange:"qualitychange",Play_Btn_Hide:"play_btn_hide",Cover_Hide:"cover_hide",Cover_Show:"cover_show",SeekStart:"seekStart",EndStart:"endStart",UpdateProgressBar:"updateProgressBar",LifeCycleChanged:"lifeCycleChanged",Dispose:"dispose",Created:"created",Snapshot_Hide:"snapshot_hide",AutoStreamShow:"auto_stream_show",AutoStreamHide:"auto_stream_hide",VolumnChanged:"volumnchanged",LiveShiftQueryCompleted:"liveShiftQueryCompleted",StreamSelectorHide:"streamSelectorHide",SpeedSelectorHide:"speedSelectorHide",SettingShow:"settingShow",SettingHide:"settingHide",SelectorShow:"selectorShow",SelectorHide:"selectorHide",SettingListShow:"settingListShow",SettingListHide:"settingListHide",ThumbnailHide:"thumbnailHide",ThumbnailShow:"thumbnailShow",ThumbnailLoaded:"thumbnailLoaded",TooltipShow:"tooltipShow",TooltipHide:"tooltipHide",SelectorUpdateList:"selectorUpdateList",SelectorValueChange:"selectorValueChange",VolumeVisibilityChange:"volumeVisibilityChange",ChangeURL:"changeURL",UpdateToSettingList:"updateToSettingList",CCChanged:"CCChanged",CCStateChanged:"CCStateChanged",PlayClick:"click",ProgressMarkerLoaded:"progressMarkerLoaded",MarkerTextShow:"markerTextShow",MarkerTextHide:"markerTextHide",PREPARE:"prepare",ProgressMarkerChanged:"progressMarkerChanged"}}},{}],44:[function(e,t,i){e("../../event/eventtype");var r=e("../../../../lib/dom"),o=e("../../../../lib/ua");t.exports.handle=function(){o.IS_IOS||r.removeClass(this.el(),"prism-fullscreen")}},{"../../../../lib/dom":18,"../../../../lib/ua":31,"../../event/eventtype":43}],45:[function(e,t,i){var r=e("../../event/eventtype");t.exports.handle=function(e){var t=this;this._enteredProgressMarker&&t.one(r.Player.CanPlay,function(){t.pause()}),t._seeking=!1,t.trigger(r.Player.CompleteSeek,e.paramData.toTime)}},{"../../event/eventtype":43}],46:[function(e,t,i){var r=e("../../event/eventtype"),o=(e("../../../../lib/constants"),e("../../../../lang/index"),e("../../../../monitor/util"));t.exports.handle=function(e){var t=this,i=e.paramData;t.trigger(r.Private.H5_Loading_Hide),t.trigger(r.Private.Cover_Hide),t.trigger(r.Private.Play_Btn_Hide),t.trigger(r.Private.SettingListHide),t.trigger(r.Private.SelectorHide),t.trigger(r.Private.VolumeVisibilityChange,""),i=i||{},t._monitor&&(i.uuid=o.getUuid(),i.requestId=t._serverRequestId,i.cdnIp=t._monitor._userNetInfo.cdnIp,i.localIp=t._monitor._userNetInfo.localIp),t._isError=!0,t.trigger(r.Private.Error_Show,i),t.trigger(r.Private.LifeCycleChanged,{type:r.Player.Error,data:i})}},{"../../../../lang/index":11,"../../../../lib/constants":15,"../../../../monitor/util":39,"../../event/eventtype":43}],47:[function(e,t,i){var r=e("../../event/eventtype"),o=e("../../../../lib/event"),n=e("./lifecyclecommon"),a={endStart:e("./endstart"),seekStart:e("./seekstart"),requestFullScreen:e("./requestfullscreen"),cancelFullScreen:e("./cancelfullscreen"),error:e("./error")},s=[r.Private.EndStart,r.Private.SeekStart,r.Player.RequestFullScreen,r.Player.CancelFullScreen,r.Player.Error,r.Player.Ready,r.Private.Dispose,r.Private.Created],l=function(t,i,r){var e=t.el();o.on(e,i,function(e){(r&&r.handle?r.handle:n.handle).call(t,e,i)})};t.exports.bind=function(e){e.el();for(var t=0;t<s.length;t++){var i=s[t];"undefined"!=a[i]&&l(e,i,a[i])}}},{"../../../../lib/event":19,"../../event/eventtype":43,"./cancelfullscreen":44,"./endstart":45,"./error":46,"./lifecyclecommon":48,"./requestfullscreen":49,"./seekstart":50}],48:[function(e,t,i){var r=e("../../event/eventtype");t.exports.handle=function(e,t){this.trigger(r.Private.LifeCycleChanged,{type:t,data:e})}},{"../../event/eventtype":43}],49:[function(e,t,i){e("../../event/eventtype");var r=e("../../../../lib/dom"),o=e("../../../../lib/ua");t.exports.handle=function(){o.IS_IOS||r.addClass(this.el(),"prism-fullscreen")}},{"../../../../lib/dom":18,"../../../../lib/ua":31,"../../event/eventtype":43}],50:[function(e,t,i){var r=e("../../event/eventtype");t.exports.handle=function(e){this._seeking=!0,this.trigger(r.Player.StartSeek,e.paramData.fromTime)}},{"../../event/eventtype":43}],51:[function(e,t,i){var r=e("../../event/eventtype");t.exports.handle=function(e){var t=this;t._retrySwitchUrlCount=0,t._liveRetryCount=0,t._clearLiveErrorHandle();var i=(new Date).getTime()-t.readyTime;t._options.autoplay||t._options._autoplay||!t.paused()||(t.trigger(r.Private.H5_Loading_Hide),t.trigger(r.Private.Play_Btn_Show)),t.trigger(r.Player.CanPlay,{loadtime:i})}},{"../../event/eventtype":43}],52:[function(e,t,i){var r=e("../../event/eventtype"),o=e("../../../../lib/dom"),n=e("../../../../lib/ua");t.exports.handle=function(e){var t=this.tag;"none"===t.style.display&&n.IS_IOS&&setTimeout(function(){o.css(t,"display","block")},100),this.trigger(r.Video.CanPlayThrough)}},{"../../../../lib/dom":18,"../../../../lib/ua":31,"../../event/eventtype":43}],53:[function(e,t,i){t.exports.handle=function(e,t){var i="";e&&e.paramData&&(i=e.paramData),this.trigger(t,i)}},{}],54:[function(e,t,i){var r=e("../../event/eventtype");e("../../../../lang/index");t.exports.handle=function(e){var t=this;t.waiting=!1,t._ended=!0,t._monitor&&t._monitor._onPlayerInit(),t._options.rePlay?(t.seek(0),t.tag.play()):t._options.isLive&&t.trigger(r.Private.H5_Loading_Hide),t.trigger(r.Private.Play_Btn_Show),t.trigger(r.Player.Ended)}},{"../../../../lang/index":11,"../../event/eventtype":43}],55:[function(e,t,i){var c=e("../../event/eventtype"),d=(e("../../../../lib/ua"),e("../../../../lib/playerutil"),e("../../../../lib/constants")),p=e("../../../../lang/index");t.exports.handle=function(e){var t=this;if(t.waiting=!1,t._clearTimeout(),t.checkOnline()){var i,r="",o=e.target||e.srcElement,n=o.error.message;r="";if(o.error.code&&(i=o.error.code,r=d.VideoErrorCode[o.error.code],n=i+" || "+n),t._options.isLive)t._options.liveRetry>t._liveRetryCount?t._reloadAndPlayForM3u8():(t._liveRetryCount=0,t.trigger(c.Player.LiveStreamStop),t._liveErrorHandle=setTimeout(function(){var e={mediaId:"ISLIVE",error_code:r,error_msg:p.get("Error_Play_Text")+"\uff0c"+p.get("Error_Retry_Text")};t.logError(e),t.trigger("error",e)}));else if(t._reloadForVod());else{var a=p.get("Error_Play_Text"),s=!1;if(i<4){if(3==i&&t._firstDecodeError){var l=t.getCurrentTime()+1;return t._loadByUrlInner(t._options.source,l,!0),void(t._firstDecodeError=!1)}a=d.VideoErrorCodeText[i]}else t._eventState==d.SUSPEND?(a=p.get("Error_Load_Abort_Text"),r=d.ErrorCode.RequestDataError):t._eventState==d.LOAD_START?(a=p.get("Error_Network_Text"),0<t._options.source.indexOf("auth_key")&&(a=a+"\uff0c"+p.get("Error_AuthKey_Text")),r=d.ErrorCode.StartLoadData):t._eventState==d.LOADED_METADATA&&(a=p.get("Error_Play_Text"),r=d.ErrorCode.PlayingError);a=a+"\uff0c"+p.get("Error_Retry_Text"),1<t._urls.length&&t._retrySwitchUrlCount<3&&-1==t._options.source.indexOf(".mpd")&&(t.switchUrl(),s=!0);var u={mediaId:t._options.vid?t._options.vid:"",error_code:r,error_msg:n};s||(t.logError(u),u.display_msg=a,t.trigger(c.Player.Error,u))}}}},{"../../../../lang/index":11,"../../../../lib/constants":15,"../../../../lib/playerutil":29,"../../../../lib/ua":31,"../../event/eventtype":43}],56:[function(e,t,i){var o=e("../../../../lib/event"),n=e("../../event/eventtype"),r={canplay:e("./canplay"),canplaythrough:e("./canplaythrough"),common:e("./common"),ended:e("./ended"),error:e("./error"),pause:e("./pause"),play:e("./play"),playing:e("./playing"),waiting:e("./waiting"),timeupdate:e("./timeupdate"),manualended:e("./ended")},a=function(t,i,r){var e=t.tag;o.on(e,i,function(e){r.handle.call(t,e,i),i!=n.Video.Error&&(i==n.Video.ManualEnded&&(i=n.Video.Ended),t.trigger(n.Private.LifeCycleChanged,{type:i,data:e}))})};t.exports.bind=function(e){e.tag;for(var t in n.Video){var i=n.Video[t];a(e,i,void 0!==r[i]?r[i]:r.common)}}},{"../../../../lib/event":19,"../../event/eventtype":43,"./canplay":51,"./canplaythrough":52,"./common":53,"./ended":54,"./error":55,"./pause":57,"./play":58,"./playing":59,"./timeupdate":60,"./waiting":61}],57:[function(e,t,i){var r=e("../../event/eventtype");t.exports.handle=function(e){var t=this;t._clearTimeout(),t.trigger(r.Private.AutoStreamHide),t.trigger(r.Player.Pause),t._isManualPause&&(t.trigger(r.Private.Play_Btn_Show),t.trigger(r.Private.H5_Loading_Hide)),t.waiting=!1}},{"../../event/eventtype":43}],58:[function(e,t,i){var r=e("../../event/eventtype");t.exports.handle=function(e){var t=this;t.trigger(r.Private.Error_Hide),t.trigger(r.Private.Cover_Hide),t.trigger(r.Private.AutoStreamHide),t.waiting=!1,t.trigger(r.Player.Play)}},{"../../event/eventtype":43}],59:[function(e,t,i){var o=e("../../event/eventtype");t.exports.handle=function(e){var t=this;t.trigger(o.Private.H5_Loading_Hide),t.trigger(o.Private.Cover_Hide),t.trigger(o.Private.Info_Hide),t.waiting=!1,t._ended=!1,t._liveRetryCount=0,t._vodRetryCount=0,t._firstDecodeError=!0;var i=t.getCurrentTime();if(t._waitingReloadTime!=i&&(t._waitingTimeoutCount=0),t._checkTimeoutHandle&&(clearTimeout(t._checkTimeoutHandle),t._checkTimeoutHandle=null),t._waitingLoadedHandle&&(clearTimeout(t._waitingLoadedHandle),t._waitingLoadedHandle=null),t._waitingDelayLoadingShowHandle&&(clearTimeout(t._waitingDelayLoadingShowHandle),t._waitingDelayLoadingShowHandle=null),t._waitingTimeoutHandle&&(clearTimeout(t._waitingTimeoutHandle),t._waitingTimeoutHandle=null,t._ccService&&t._options.isLive)){var r=t._ccService.getCurrentSubtitle();t._setDefaultCC=!0,r&&t._ccService["switch"](r)}t.trigger(o.Private.AutoStreamHide),t.trigger(o.Player.Playing),t.trigger(o.Private.Play_Btn_Hide),t.trigger(o.Private.Error_Hide)}},{"../../event/eventtype":43}],60:[function(e,t,i){var n=e("../../event/eventtype"),a=e("../../../../lib/ua"),s=e("../../../../lib/event"),l=e("../../plugin/status");t.exports.handle=function(e){var i=this;i.trigger(n.Player.TimeUpdate,e.timeStamp);var t=i.getCurrentTime();if(i.waiting&&!i._TimeUpdateStamp&&(i._TimeUpdateStamp=t),0!=i.waiting&&i._TimeUpdateStamp==t||(i.trigger(n.Private.H5_Loading_Hide),i.trigger(n.Private.AutoStreamHide),i._checkTimeoutHandle&&clearTimeout(i._checkTimeoutHandle),i._waitingTimeoutHandle&&clearTimeout(i._waitingTimeoutHandle),i._waitingLoadedHandle&&clearTimeout(i._waitingLoadedHandle),i.waiting=!1),i._TimeUpdateStamp=t,!i._options.isLive){var r=i.getDuration(),o=!1;r<t&&!i.paused()?o=!0:r-t<.2&&0<=a.browser.version.indexOf("49.")&&!i.paused()?o=!0:i.exceedPreviewTime(t)&&(o=!0),o&&!i._ended&&(i.pause(),s.trigger(i.tag,n.Video.ManualEnded))}i._playingSlientPause&&(clearTimeout(i._playingSlientPause),i._playingSlientPause=null),i._playingSlientPause=setTimeout(function(){if(i._status==l.playing){var e=i.getCurrentTime(),t=i._options.isLive?0:e;i._loadByUrlInner(i._options.source,t,!0)}},2e3)}},{"../../../../lib/event":19,"../../../../lib/ua":31,"../../event/eventtype":43,"../../plugin/status":66}],61:[function(e,t,i){var n=e("../../event/eventtype"),a=e("../../../../lib/constants"),s=e("../../../../lib/event"),l=e("../../../../lang/index");t.exports.handle=function(e){var i=this;if(!i._options.isLive){var t=this.getCurrentTime(),r=this.getDuration();if(r-t<.5||r<t)return i.pause(),i._ended=!0,void s.trigger(this.tag,n.Video.ManualEnded)}i.waiting=!0;var o=function(){i._checkTimeoutHandle&&(clearTimeout(i._checkTimeoutHandle),i._checkTimeoutHandle=null),i._waitingTimeoutHandle&&(clearTimeout(i._waitingTimeoutHandle),i._waitingTimeoutHandle=null),i._waitingLoadedHandle&&(clearTimeout(i._waitingLoadedHandle),i._waitingLoadedHandle=null),i._waitingDelayLoadingShowHandle&&(clearTimeout(i._waitingDelayLoadingShowHandle),i._waitingDelayLoadingShowHandle=null)};o(),i._waitingDelayLoadingShowHandle=setTimeout(function(){i.trigger(n.Private.H5_Loading_Show)},1e3*i._options.delayLoadingShow),i._TimeUpdateStamp=null,i._checkTimeoutHandle=setTimeout(function(){i.trigger(n.Private.AutoStreamShow)},1e3*i._options.loadDataTimeout),i.trigger(n.Player.Waiting),i._waitingTimeoutHandle=setTimeout(function(){if(i.tag&&i._options){i.pause();var e={mediaId:i._options.vid?i._options.vid:"",error_code:a.ErrorCode.LoadingTimeout,error_msg:l.get("Error_Waiting_Timeout_Text")};i.logError(e),i.trigger("error",e)}},1e3*i._options.waitingTimeout),i._waitingLoadedHandle=setTimeout(function(){var e=i.getCurrentTime();if(0==i._waitingTimeoutCount&&e!=i._waitingReloadTime){i._waitingTimeoutCount=1,i._waitingReloadTime=e;var t=i._options.isLive?0:e;i._loadByUrlInner(i._options.source,t,!0)}},i._options.waitingTimeout/2*1e3),i.on("error",function(){o()})}},{"../../../../lang/index":11,"../../../../lib/constants":15,"../../../../lib/event":19,"../../event/eventtype":43}],62:[function(e,t,i){var n=e("../../ui/component"),a=e("../../lib/object"),o=e("../../lib/dom"),s=e("../../lib/event"),l=(e("../../lib/io"),e("../../ui/exports")),u=e("../../monitor/monitor"),r=e("../../lib/ua"),c=e("../../lib/constants"),d=e("../../lib/util"),p=(e("../../config"),e("../../lib/playerutil")),h=e("./x5play"),f=e("../../lib/cookie"),_=e("../../lang/index"),g=e("../../feature/autoPlayDelay"),y=e("./event/eventmanager"),v=e("../../ui/component/cover"),m=e("../../ui/component/play-animation"),S=e("../../commonui/autostreamselector"),T=e("./event/eventtype"),b=e("./plugin/lifecyclemanager"),x=e("../service/export"),E=e("../../ui/component/progressmarker"),P=n.extend({init:function(e,t){if(this.tag=e,this.loaded=!1,this.played=!1,this.waiting=!1,this._urls=[],this._currentPlayIndex=0,this._retrySwitchUrlCount=0,this._isError=!1,this._isHls=!1,this._liveRetryCount=0,this._vodRetryCount=0,this._seeking=!1,this._serverRequestId=0,this._waitingTimeoutCount=0,this._waitingReloadTime=0,this._created=!1,this._firstDecodeError=!0,this._enteredProgressMarker=!1,this._liveShiftSeekStartTime=0,this._duration=0,this.__disposed=!1,void 0===t.skinLayout&&(t.skinLayout=p.defaultH5Layout),n.call(this,this,t),this.addClass("prism-player"),t.plugins&&a.each(t.plugins,function(e,t){this[e](t)},this),this._createService(),this.UI={},t.useNativeControls?this.tag.setAttribute("controls","controls"):this.UI=l,this.initChildren(),y.onAll(this),this._lifeCycleManager=new b(this),this._options.trackLog&&(this._monitor=new u(this,{video_id:0,album_id:0,from:this._options.from,source:this._options.source,logBatched:this._options.logBatched},this._options.trackLog)),this._overrideNativePlay(),!this._liveshiftService||this._liveshiftService.validate()){if(this._options.extraInfo){var i=this._options.extraInfo;i.liveRetry&&(this._options.liveRetry=i.liveRetry)}if(this.on(T.Private.ReadyState,function(){this.trigger(T.Player.Ready)}),this._thumbnailService&&this._options.thumbnailUrl&&this._thumbnailService.get(this._options.thumbnailUrl),0<this._options.progressMarkers.length&&this.trigger(T.Private.ProgressMarkerLoaded,this._options.progressMarkers),this._options.source&&this._options._native&&this._executeReadyCallback(),this._options.autoplay||this._options.preload?this.trigger(T.Private.H5_Loading_Show):this.trigger(T.Private.Play_Btn_Show),this._extraMultiSources(),this._options.source)if(this.trigger(T.Private.PREPARE,"custom"),this._options.autoPlayDelay){this._autoPlayDelay=new g(this);var r=this;this._autoPlayDelay.handle(function(){r.initPlay()})}else this.initPlay()}else{var o={mediaId:this._options.vid?this._options.vid:"",error_code:c.ErrorCode.InvalidParameter,error_msg:_.get("ShiftLiveTime_Error")};this.trigger(T.Player.Error,o)}}});P.prototype.initPlay=function(e){this._initPlayBehavior(e,this._options.source)},P.prototype.initChildren=function(){var e=this.options(),t=e.skinLayout;if(!1!==t&&!a.isArray(t))throw new Error("PrismPlayer Error: skinLayout should be false or type of array!");!1!==t&&0!==t.length&&(this.options({children:t}),n.prototype.initChildren.call(this)),this.UI.cover=v,this.addChild("cover",e),this.UI.playanimation=m,this.addChild("playanimation",e),this.UI.autoStreamSelector=S,this.addChild("autoStreamSelector",e),this.UI.progressMarker=E,this.addChild("progressMarker",e),this.trigger(T.Private.UiH5Ready)},P.prototype.createEl=function(){var e=!1;"VIDEO"!==this.tag.tagName?(this._el=this.tag,this.tag=n.prototype.createEl.call(this,"video"),this._options.playsinline&&(this.tag.setAttribute("webkit-playsinline",""),this.tag.setAttribute("playsinline",""),this.tag.setAttribute("x-webkit-airplay",""),this.tag.setAttribute("x5-playsinline",""))):(e=!0,this._el=this.tag.parentNode);var t=this._el,i=this.tag;this._options.enableSystemMenu||(i.addEventListener?i.addEventListener("contextmenu",function(e){e.preventDefault()},!1):i.attachEvent("oncontextmenu",function(){window.event.returnValue=!1})),i.player=this;var r=o.getElementAttributes(i);return a.each(r,function(e){t.setAttribute(e,r[e])}),this.setVideoAttrs(),e||(i.parentNode&&i.parentNode.insertBefore(t,i),o.insertFirst(i,t)),t},P.prototype.setVideoAttrs=function(){var e=this._options.preload,t=this._options.autoplay;if(this.tag.style.width=this._options.videoWidth||"100%",this.tag.style.height=this._options.videoHeight||"100%",e&&this.tag.setAttribute("preload","preload"),t&&!this._isEnabledAILabel()&&this.tag.setAttribute("autoplay","autoplay"),r.IS_IOS&&this.tag.setAttribute("poster","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAVlpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KTMInWQAAAMZJREFUeAHt0DEBAAAAwqD1T20LL4hAYcCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMDAc2CcpAABaODCqQAAAABJRU5ErkJggg=="),this._options.extraInfo)for(var i in this._options.extraInfo)this.tag.setAttribute(i,this._options.extraInfo[i]);h.adaptX5Play(this)},P.prototype.checkOnline=function(){if(!this._options||this._options.debug)return!0;if(0!=navigator.onLine)return!0;var e={mediaId:this._options.vid?this._options.vid:"",error_code:c.ErrorCode.NetworkUnavaiable,error_msg:_.get("Error_Offline_Text")};return e.display_msg=_.get("Error_Offline_Text"),this.trigger(T.Player.Error,e),!1},P.prototype.id=function(){return this.el().id},P.prototype.renderUI=function(){},P.prototype.switchUrl=function(){if(0!=this._urls.length){this._currentPlayIndex=this._currentPlayIndex+1,this._urls.length<=this._currentPlayIndex&&(this._currentPlayIndex=0,this._retrySwitchUrlCount++);var e=this._urls[this._currentPlayIndex];f.set(c.SelectedStreamLevel,e.definition,365),this.trigger(T.Private.QualityChange,_.get("Quality_Change_Fail_Switch_Text"));var t=this.getCurrentTime();this._vodRetryCount=0,this._originalSource="",this._loadByUrlInner(e.Url,t,!0)}},P.prototype.setControls=function(){var e=this.options();if(e.useNativeControls)this.tag.setAttribute("controls","controls");else if("object"==typeof e.controls){var t=this._initControlBar(e.controls);this.addChild(t)}},P.prototype._initControlBar=function(e){return new ControlBar(this,e)},P.prototype.getMetaData=function(){var t=this,i=this.tag;t._readyStateTimer&&clearInterval(t._readyStateTimer),t._readyStateTimer=window.setInterval(function(e){t.tag?i&&0<i.readyState&&(t._duration=i.duration<1?0:i.duration,t.trigger(T.Private.ReadyState),clearInterval(t._readyStateTimer)):clearInterval(t._readyStateTimer)},100)},P.prototype.getReadyTime=function(){return this.readyTime},P.prototype.readyState=function(){return this.tag.readyState},P.prototype.getError=function(){return this.tag.error},P.prototype.getRecentOccuredEvent=function(){return this._eventState},P.prototype.getSourceUrl=function(){return this._options?this._options.source:""},P.prototype.getMonitorInfo=function(){return this._monitor?this._monitor.opt:{}},P.prototype.getCurrentQuality=function(){if(0<this._urls.length){var e=this._urls[this._currentPlayIndex];return{width:e.width,url:e.Url,definition:e.definition}}return""},P.prototype.setSpeed=function(e){this.tag&&(this._originalPlaybackRate=e,this.tag.playbackRate=e)},P.prototype.play=function(e){return this.tag&&(this.tag.ended||this._ended?this.replay():((this._options.preload||this.loaded)&&this.tag.src||this._initLoad(this._options.source),this.trigger(T.Private.Cover_Hide),this.tag.play())),this._isManualPlay=e||!1,this},P.prototype.replay=function(){return this._monitor&&this._monitor.replay(),this.seek(0),this.tag.play(),this},P.prototype.pause=function(e){return this.tag&&this.tag.pause(),this._isManualPause=e||!1,this},P.prototype.stop=function(){return this.tag.setAttribute("src",null),this},P.prototype.paused=function(){if(this.tag)return!1!==this.tag.paused},P.prototype.getDuration=function(){var e=0;return this.tag&&(e=this.isPreview()?this._vodDuration||this.tag.duration:this._duration&&this._duration!=1/0?this._duration:this.tag.duration),e},P.prototype.getDisplayDuration=function(){var e=0;return this.tag&&(e=this._vodDuration||this.getDuration()),e},P.prototype.getCurrentTime=function(){return this.tag?this.tag.currentTime:0},P.prototype.seek=function(e){e===this.tag.duration&&e--;var t=this._originalPlaybackRate||this.tag.playbackRate;try{var i=this;this.tag.currentTime=e,setTimeout(function(){i.tag&&(i.tag.playbackRate=t)})}catch(e){console.log(e)}return this},P.prototype.firstNewUrlloadByUrl=function(e,t){this._clearTimeout(),this._options.vid=0,this._options.source=e,this._monitor&&this._monitor.updateVideoInfo({video_id:0,album_id:0,source:e,from:this._options.from}),this.trigger(T.Private.ChangeURL),this.initPlay(),this._options.autoplay&&this.trigger(T.Private.Cover_Hide),this._options.autoplay?this.trigger(T.Player.Play):this.trigger(T.Player.Pause),t||(t=0),!t&&0!=t||isNaN(t)||this.seek(t)},P.prototype._loadByUrlInner=function(e,t,i){this.loadByUrl(e,t,i,!0)},P.prototype.loadByUrl=function(e,t,i,r){this._monitor&&!r&&this._monitor.reset(),this._isError=!1,this._duration=0,this._clearTimeout(),this.trigger(T.Private.Error_Hide),this._options.vid=0,this._options.source=e,this._monitor&&this._monitor.updateVideoInfo({video_id:0,album_id:0,source:e,from:this._options.from}),r||(this.trigger(T.Private.ChangeURL),this._vodRetryCount=0),this._options._autoplay=i,this.initPlay(i),(this._options.autoplay||i)&&this.trigger(T.Private.Cover_Hide),this._options.autoplay||i?this.trigger(T.Player.Play):this.trigger(T.Player.Pause);var o=this;this._options.isLive||s.one(this.tag,T.Video.CanPlay,function(e){!t&&0!=t||isNaN(t)||o.seek(t)})},P.prototype.dispose=function(){this.__disposed=!0,this.trigger(T.Private.Dispose),this.tag.pause(),y.offAll(this),this._monitor&&(this._monitor.removeEvent(),this._monitor=null),this._autoPlayDelay&&this._autoPlayDelay.dispose(),this._checkTimeoutHandle&&(clearTimeout(this._checkTimeoutHandle),this._checkTimeoutHandle=null),this._waitingTimeoutHandle&&(clearTimeout(this._waitingTimeoutHandle),this._waitingTimeoutHandle=null),this._playingSlientPause&&(clearTimeout(this._playingSlientPause),this._playingSlientPause=null),this._waitingLoadedHandle&&(clearTimeout(this._waitingLoadedHandle),this._waitingLoadedHandle=null),this._readyStateTimer&&(clearInterval(this._readyStateTimer),this._readyStateTimer=null),this._vodRetryCountHandle&&(clearTimeout(this._vodRetryCountHandle),this._vodRetryCountHandle=null),this._waitingDelayLoadingShowHandle&&(clearTimeout(this._waitingDelayLoadingShowHandle),this._waitingDelayLoadingShowHandle=null),this._disposeService(),this._clearLiveErrorHandle(),this._el.innerHTML="",this.destroy(),this.tag=null,this._options.recreatePlayer=null,this._options=null},P.prototype.mute=function(){this._muteInner(),this._originalVolumn=this.tag.volume;var e=_.get("Volume_Mute");return this._player.trigger(T.Private.Info_Show,{text:e,duration:1e3,align:"lb"}),this._setInnerVolume(0),this},P.prototype._muteInner=function(){this.tag.muted=!0,this.trigger(T.Private.VolumnChanged,-1)},P.prototype.unMute=function(){this._unMuteInner();var e=_.get("Volume_UnMute");return this._player.trigger(T.Private.Info_Show,{text:e,duration:1e3,align:"lb"}),this._setInnerVolume(this._originalVolumn||.5),this},P.prototype._unMuteInner=function(){this.tag.muted=!1,this.trigger(T.Private.VolumnChanged,-2)},P.prototype.muted=function(){return this.tag.muted},P.prototype.getVolume=function(){return this.tag.volume},P.prototype.getOptions=function(){return this._options},P.prototype.setVolume=function(e,t){0!=e?this._unMuteInner():0==e&&this._muteInner(),this._setInnerVolume(e);var i=_.get("Curent_Volume")+"<span>"+(100*e).toFixed()+"%</span>";this._player.trigger(T.Private.Info_Show,{text:i,duration:1e3,align:"lb"})},P.prototype._setInnerVolume=function(e){this.tag.volume=e,this.trigger(T.Private.VolumnChanged,e)},P.prototype.hideProgress=function(){this.trigger(T.Private.HideProgress)},P.prototype.cancelHideProgress=function(){this.trigger(T.Private.CancelHideProgress)},P.prototype.setPlayerSize=function(e,t){this._el.style.width=e,this._el.style.height=t},P.prototype.getBuffered=function(){return this.tag.buffered},P.prototype.setRotate=function(e){this.tag&&(this._rotate=e,this._setTransform(),this.log("ROTATE",{rotation:e}))},P.prototype.getRotate=function(e){return void 0===this._rotate?0:this._rotate},P.prototype.setImage=function(e){this.tag&&(this._image=e,this._setTransform(),this.log("IMAGE",{mirror:"horizon"==e?2:1,text:e}))},P.prototype.getImage=function(){return this._image},P.prototype.cancelImage=function(){this.tag&&(this._image="",this._setTransform(),this.log("IMAGE",{mirror:0}))},P.prototype.setCover=function(e){var t=document.querySelector("#"+this.id()+" .prism-cover");t&&e&&(t.style.backgroundImage="url("+e+")",this._options.cover=e,this.trigger(T.Private.Cover_Show))},P.prototype._setTransform=function(){this._transformProp||(this._transformProp=o.getTransformName(this.tag));var e=" translate(-50%, -50%)";this._rotate&&(e+=" rotate("+this._rotate+"deg)"),this._image&&("vertical"==this._image?e+=" scaleY(-1)":"horizon"==this._image&&(e+=" scaleX(-1)")),this.tag.style[this._transformProp]=e},P.prototype._startPlay=function(){this.tag.paused&&this.tag.play()},P.prototype._initPlayBehavior=function(e,t){if(this._checkSupportVideoType())return!1;if(p.validateSource(t))return void 0===e&&(e=!1),this._created||(this._created=!0,this.trigger(T.Private.Created)),this.loaded||this.trigger(T.Player.Init),this._options.autoplay||this._options._autoplay||this._options.preload||e?(this._options._preload=!0,this._initLoad(t),(this._options.autoplay||this._options._autoplay)&&this._startPlay()):this.trigger(T.Private.Play_Btn_Show),!0;var i={mediaId:this._options.vid?this._options.vid:"",error_code:c.ErrorCode.InvalidSourceURL,error_msg:"InvalidSourceURL"};return i.display_msg=_.get("Error_Invalidate_Source"),this.trigger(T.Player.Error,i),!1},P.prototype._isPreload=function(){return this._options.autoplay||this._options.preload||this._options._preload},P.prototype._initLoad=function(e){this.getMetaData(),e&&(this._isPreload()&&!r.IS_MOBILE?this.trigger(T.Private.H5_Loading_Show):(this.trigger(T.Private.H5_Loading_Hide),this.trigger(T.Private.Play_Btn_Show)),this.tag.setAttribute("src",e),this.loaded=!0)},P.prototype._clearLiveErrorHandle=function(){this._liveErrorHandle&&(clearTimeout(this._liveErrorHandle),this._liveErrorHandle=null)},P.prototype._reloadAndPlayForM3u8=function(){0==this._liveRetryCount&&this.trigger(T.Player.OnM3u8Retry);var e=this._options,t=e.liveRetryInterval+e.liveRetryStep*this._liveRetryCount;d.sleep(1e3*t),this._liveRetryCount++,this.tag.load(this._options.source),this.tag.play()},P.prototype._checkSupportVideoType=function(){if(!this.tag.canPlayType||!this._options.source||!r.IS_MOBILE)return"";var e=this._options.source,t="";if(0<e.indexOf("m3u8")?""!=this.tag.canPlayType("application/x-mpegURL")||p.isSupportHls()||(t=_.get("Error_Not_Support_M3U8_Text")):0<e.indexOf("mp4")?""==this.tag.canPlayType("video/mp4")&&(t=_.get("Error_Not_Support_MP4_Text")):(p.isRTMP(e)||p.isFlv(e))&&r.IS_MOBILE&&(t=_.get("Error_Not_Support_Format_On_Mobile")),t){var i={mediaId:this._options.vid?this._options.vid:"",error_code:c.ErrorCode.FormatNotSupport,error_msg:t};this.logError(i),i.display_msg=t,this.trigger(T.Player.Error,i)}return t},P.prototype.getComponent=function(e){return this._lifeCycleManager.getComponent(e)},P.prototype.logError=function(e,t){e||(e={}),e.vt=this.getCurrentTime(),this._serverRequestId=this.log(t?"ERRORRETRY":"ERROR",e)},P.prototype.log=function(e,t){var i=0,r=0;if(this._monitor)return this._options&&(i=this._options.vid||"0",r=this._options.from||"0"),this._monitor.updateVideoInfo({video_id:i,album_id:0,source:this._options.source,from:r}),this._monitor._log(e,t)},P.prototype.setSanpshotProperties=function(e,t,i){if(this._snapshotMatric||(this._snapshotMatric={}),this._snapshotMatric.width=e,this._snapshotMatric.height=t,1<i)throw new Error("rate doesn't allow more than 1");this._snapshotMatric.rate=i},P.prototype.getStatus=function(){return this._status?this._status:"init"},P.prototype.enterProgressMarker=function(){this._enteredProgressMarker=!0},P.prototype.isInProgressMarker=function(){return this._enteredProgressMarker},P.prototype.exitProgressMarker=function(){this._enteredProgressMarker=!1},P.prototype.setProgressMarkers=function(e){e||(e=[]),this.trigger(T.Private.ProgressMarkerChanged,e)},P.prototype.getProgressMarkers=function(){return this._progressMarkerService?this._progressMarkerService.progressMarkers:[]},P.prototype.setPreviewTime=function(e){this._options.playConfig||(this._options.playConfig={}),this._options.playConfig.PreviewTime=e},P.prototype.getPreviewTime=function(){var e=0;return this._options.playConfig&&(e=this._options.playConfig.PreviewTime),e},P.prototype.exceedPreviewTime=function(e){return this.isPreview()&&e>=this._options.playConfig.PreviewTime},P.prototype.isPreview=function(){var e=this._options.playConfig.PreviewTime,t=this._vodDuration||this.tag.duration;return 0<e&&e<t},P.prototype._getSanpshotMatric=function(){return this._snapshotMatric||(this._snapshotMatric={}),this._snapshotMatric},P.prototype._overrideNativePlay=function(){var r=this.tag.play,o=this;this.tag.play=function(){if(console.log("do play"),!o._options.source){var e={mediaId:o._options.vid?o._options.vid:"",error_code:c.ErrorCode.InvalidSourceURL,error_msg:"InvalidSourceURL"};return o._options.vid?e.display_msg=_.get("Error_Vid_Empty_Source"):e.display_msg=_.get("Error_Empty_Source"),void o.trigger(T.Player.Error,e)}o.readyTime=(new Date).getTime();var t=r.apply(o.tag);void 0!==t&&t.then(function(){o.trigger(T.Player.AutoPlay,!0),console.log("do play successfully")})["catch"](function(e){console.log("do play failed"),!o.tag||!o.tag.paused||o._isError||o._options._autoplay||o._switchedLevel||(o.trigger(T.Private.Play_Btn_Show),o.trigger(T.Private.H5_Loading_Hide),o.trigger(T.Player.AutoPlayPrevented),o.trigger(T.Player.AutoPlay,!1),o._options.cover&&o.trigger(T.Private.Cover_Show))});var i=o._originalPlaybackRate||o.tag.playbackRate;setTimeout(function(){o.tag&&(o.tag.playbackRate=i)})}},P.prototype._extraMultiSources=function(){var e=this._options.source;if(e&&-1<e.indexOf("{")&&-1<e.indexOf("}")){var t="";try{t=JSON.parse(e)}catch(e){console.error(e),console.error("\u5730\u5740json\u4e32\u683c\u5f0f\u4e0d\u5bf9")}var i=[];for(var r in t){var o=c.QualityLevels[r];i.push({definition:r,Url:t[r],desc:o||r})}if(0<i.length){this._currentPlayIndex=p.findSelectedStreamLevel(i);var n=i[this._currentPlayIndex];this._urls=i,this._options.source=n.Url,this.trigger(T.Private.SourceLoaded,n)}}},P.prototype._isEnabledAILabel=function(){return this._options.ai&&this._options.ai.label},P.prototype._createService=function(){if(x)for(var e=x.length,t=0;t<e;t++){var i=x[t],r=i.condition;void 0===r?r=!0:"function"==typeof r&&(r=r.call(this)),r&&(this[i.name]=new i.service(this))}},P.prototype._disposeService=function(){if(x)for(var e=x.length,t=0;t<e;t++){var i=this[x[t].name];void 0!==i&&i.dispose&&i.dispose()}},P.prototype._executeReadyCallback=function(){try{this._options.autoplay||this._options.preload||(this.trigger(T.Private.H5_Loading_Hide),this.trigger(T.Private.Play_Btn_Show)),this._options.readyCallback(this)}catch(e){console.log(e)}},P.prototype._clearTimeout=function(){this._checkTimeoutHandle&&(clearTimeout(this._checkTimeoutHandle),this._checkTimeoutHandle=null),this._waitingTimeoutHandle&&(clearTimeout(this._waitingTimeoutHandle),this._waitingTimeoutHandle=null),this._clearLiveErrorHandle()},P.prototype._reloadForVod=function(){if(this._originalSource||(this._originalSource=this._options.source),this._vodRetryCount<this._options.vodRetry&&navigator.onLine){var e=this.getCurrentTime(),t=this._originalSource;t.indexOf("auth_key=")<0&&(t=t&&0<t.indexOf("?")?t+"&_t="+(new Date).valueOf():t+"?_t="+(new Date).valueOf()),this._vodRetryCountHandle&&clearTimeout(this._vodRetryCountHandle);var i=this;return console.log("_reloadForVod"),this._vodRetryCountHandle=setTimeout(function(){console.log("reload vod because failed"),i._loadByUrlInner(t,e,!0)},100*this._vodRetryCount),this._vodRetryCount=this._vodRetryCount+1,!0}return!1},t.exports=P},{"../../commonui/autostreamselector":2,"../../config":5,"../../feature/autoPlayDelay":7,"../../lang/index":11,"../../lib/constants":15,"../../lib/cookie":16,"../../lib/dom":18,"../../lib/event":19,"../../lib/io":24,"../../lib/object":26,"../../lib/playerutil":29,"../../lib/ua":31,"../../lib/util":33,"../../monitor/monitor":38,"../../ui/component":94,"../../ui/component/cover":98,"../../ui/component/play-animation":104,"../../ui/component/progressmarker":107,"../../ui/exports":124,"../service/export":87,"./event/eventmanager":42,"./event/eventtype":43,"./plugin/lifecyclemanager":65,"./x5play":67}],63:[function(e,t,i){var r=e("../../../lib/oo").extend({});t.exports=r},{"../../../lib/oo":27}],64:[function(e,t,i){t.exports={createEl:"createEl",created:"created",ready:"ready",loading:"loading",play:"play",pause:"pause",playing:"playing",waiting:"waiting",timeUpdate:"timeupdate",error:"error",ended:"ended",dispose:"dispose",markerDotOver:"markerDotOver",markerDotOut:"markerDotOut"}},{}],65:[function(e,t,i){var s=e("../../../lib/object"),u=e("../event/eventtype"),c=e("./lifecycle"),r=e("./status"),o=function(t){(this._player=t)._status="init",this.components=[];var e=t.getOptions().components;if(e&&s.isArray(e)&&0<e.length)for(var i=0;i<e.length;i++){var r=e[i];if(!r)return void console.log("The "+i+" custome component is "+r);if(constr=void 0===r.type?r:r.type,args=void 0===r.args?[]:r.args,name=void 0===r.name?"":r.name,!constr)return void console.log(name+" compenent is "+constr);args&&0<args.length?args=[].concat.call([constr],args):args=[];var o=new(Function.prototype.bind.apply(constr,args)),n=o[c.createEl];n&&"function"==typeof n&&n.call(o,t.el(),t),this.components.push({name:name,obj:o})}var a=this;t.on(u.Private.LifeCycleChanged,function(e){0!=a.components.length&&l.call(a,t,e)})};o.prototype.getComponent=function(e){var t=null,i=this.components.length;if(e)for(var r=0;r<i;r++)if(this.components[r].name==e){t=this.components[r].obj;break}return t};var l=function(e,t){if(t){var i=t.paramData,r=i.type,o=i.data;(function(e){return e==u.Video.LoadStart||e==u.Video.LoadedData||e==u.Video.LoadedMetadata})(r)&&(r=c.loading),d(e,r);for(var n=this.components.length,a=0;a<n;a++){var s=this.components[a].obj,l=s[r];l&&"function"==typeof l&&l.call(s,e,o)}r==u.Private.Dispose&&(this.components=[])}},d=function(e,t){void 0!==r[t]&&(t!=r.pause||e._status!=r.error&&e._status!=r.ended)&&(e._status=t)};t.exports=o},{"../../../lib/object":26,"../event/eventtype":43,"./lifecycle":64,"./status":66}],66:[function(e,t,i){t.exports={init:"init",ready:"ready",loading:"loading",play:"play",pause:"pause",playing:"playing",waiting:"waiting",error:"error",ended:"ended"}},{}],67:[function(e,t,i){var r=e("../../lib/ua"),o=e("../../lib/dom"),n=function(e,t){var i=e.el().style.height,r=e.el().style.width;e.originalLayout={container:{height:i,width:r},video:{width:e.tag.style.width,height:e.tag.style.height}};var o=document.body.clientHeight*(window.devicePixelRatio||1)+"px",n=document.body.clientWidth+"px";t?(height=o,width=n):(height=i.indexOf("%")?i:i+"px",width=r.indexOf("%")?r:r+"px"),e.tag.style.width=n,e.tag.style.height=o,e.el().style.height=t?o:height};t.exports.isAndroidX5=function(){return r.os.android&&r.is_X5||r.dingTalk()},t.exports.adaptX5Play=function(e){r.os.android&&r.is_X5&&("h5"==e._options.x5_type&&(e.tag.setAttribute("x5-video-player-type",e._options.x5_type),window.onresize=function(){n(e,e._options.x5_fullscreen||"center"==e._options.x5_video_position),function(e){if("landscape"==e._x5VideoOrientation){e._originalTagWidth=e.tag.style.width,e._originalTagHeight=e.tag.style.height;var t=document.querySelector("#"+e.id()+" .prism-controlbar");t&&parseFloat(t.offsetHeight),e.tag.style.height="100%",e.tag.style.width=window.screen.width+"px"}}(e)},e.tag.addEventListener("x5videoenterfullscreen",function(){n(e,e._options.x5_fullscreen||"center"==e._options.x5_video_position),e.trigger("x5requestFullScreen")}),e.tag.addEventListener("x5videoexitfullscreen",function(){!function(e,t){if(e.originalLayout){var i=e.originalLayout;e.el().style.height=i.container.height,e.el().style.width=i.container.width,e.tag.style.width=i.video.width,e.tag.style.height=i.video.height}}(e),e.trigger("x5cancelFullScreen"),e.fullscreenService.getIsFullScreen()&&e.fullscreenService.cancelFullScreen()}),e.on("requestFullScreen",function(){"top"==e._options.x5_video_position&&o.removeClass(e.tag,"x5-top-left"),r.os.android&&r.is_X5&&e._options.x5LandscapeAsFullScreen&&(e.tag.setAttribute("x5-video-orientation","landscape"),e._x5VideoOrientation="landscape")}),e.on("cancelFullScreen",function(){"top"==e._options.x5_video_position&&o.addClass(e.tag,"x5-top-left"),r.os.android&&r.is_X5&&e._options.x5LandscapeAsFullScreen&&(e.tag.setAttribute("x5-video-orientation","portrait"),n(e,e._options.x5_fullscreen||"center"==e._options.x5_video_position),e._x5VideoOrientation="portrait")})),void 0!==e._options.x5_fullscreen&&e._options.x5_fullscreen&&(e.tag.setAttribute("x5-video-player-fullscreen",e._options.x5_fullscreen),o.addClass(e.tag,"x5-full-screen")),"top"==e._options.x5_video_position&&o.addClass(e.tag,"x5-top-left"),void 0!==e._options.x5_orientation&&e.tag.setAttribute("x5-video-orientation",e._options.x5_orientation))}},{"../../lib/dom":18,"../../lib/ua":31}],68:[function(e,t,i){var c=e("../../lib/io"),d=e("../../config"),p=e("../../lib/constants"),h=e("../../lib/util"),f=e("../../lib/playerutil"),_=(e("../../lib/dom"),e("../../lang/index")),g=e("../base/event/eventtype"),y=e("../saas/drm");t.exports.inject=function(e,t,i,r,a,o,n){var s=r.source;if(o||function(e,t){return!(e._drm||!f.isDash(t))}(e,s)){t.prototype._checkDrmReady=function(){if(null==e._drm)throw new Error("please invoke this method after ready event")},e._isDrm=!0,e._drm=null,e._isLoadedDrm=!1,t.prototype.play=function(e){this._checkDrmReady(),this._isManualPlay=e||!1;if(this.trigger(g.Private.Cover_Hide),this.tag.ended)this.replay();else{this.getCurrentTime();this.tag.paused&&this.tag.play()}return this},t.prototype.replay=function(){if(this.tag.paused){this._monitor&&this._monitor.replay();var e=this;this._drm.load(this._options.source).then(function(){e._options._autoplay=!0,e._initPlayBehavior(!0),console.log("The video has now been loaded!")})["catch"](u)}return this},t.prototype.pause=function(e){return this._checkDrmReady(),this._isManualPause=e||!1,this.tag.pause(),this},t.prototype.stop=function(){return this._checkDrmReady(),this.tag.setAttribute("src",null),this},t.prototype.initPlay=function(e){if(h.contentProtocolMixed(s)){var t={mediaId:this._options.vid?this._options.vid:"",error_code:p.ErrorCode.InvalidSourceURL,error_msg:"InvalidSourceURL"};return t.display_msg=_.get("Request_Block_Text"),void this.trigger(g.Player.Error,t)}function i(i,t){var r=!i._drm,o=function(){l(i,i._drm);var e={drm:{requestLicenseKey:y.requestLicenseKey(i),servers:{}}};p.DRMKeySystem[4]&&(e.drm.servers[p.DRMKeySystem[5]]="https://foo.bar/drm/widevine",e.drm.servers[p.DRMKeySystem[4]]="https://foo.bar/drm/playready"),i._drm.configure(e),a&&a(i._drm),r&&i._executeReadyCallback(),i._drm.load(i._options.source).then(function(){i._initPlayBehavior(t),console.log("The video has now been loaded!")})["catch"](function(e){u(i,e)})},n=function(e){if(!e||i.__support&&i.__support.drm[e])o();else{var t={mediaId:i._options.vid?i._options.vid:"",error_code:p.ErrorCode.EncrptyVideoNotSupport,error_msg:_.get("Not_Support_DRM")};i.trigger(g.Player.Error,t)}};i.destroy(function(t){try{t._drm=new shaka.Player(t.tag);var e=t._getItemBySource();if(e){var i=p.DRMKeySystem[e.encryptionType];t.__support?n(i):shaka.Player.probeSupport().then(function(e){t.__support=e,n(i)})}else o()}catch(e){console.log(e)}})}(that=this)._isLoadedDrm&&"undefined"!=typeof shaka?i(this,e):(this.trigger(g.Private.H5_Loading_Show),function(e){var t="aliplayer-drm-min.js",i="https://"+d.domain+"/de/prismplayer/"+d.h5Version+"/drm/"+t;d.domain?-1<d.domain.indexOf("g-assets.daily")?i="http://"+d.domain+"/de/prismplayer/"+d.h5Version+"/drm/"+t:-1<d.domain.indexOf("localhost")&&(i="http://"+d.domain+"/build/drm/"+t):i="de/prismplayer/"+d.h5Version+"/drm/"+t;var r=this;c.loadJS(i,function(){shaka.polyfill.installAll(),e.apply(r)})}.call(that,function(){this._isLoadedDrm=!0,i(this,e)}))},t.prototype.destroy=function(e){if(this._drm){var t=this;this._drm.destroy().then(function(){t._drm=null,e(t)})}else e(this)},t.prototype.dispose=function(){i.dispose.call(this),this.destroy()},t.prototype._getDRMEncryptItem=function(){var e=this._urls;if(e&&0<e.length){for(var t=e.length,i=0;i<t;i++){var r=e[i];if(r.Url==this._options.source&&1*r.encryption)return r}return""}return""},t.prototype._getItemBySource=function(){var e=this._urls;if(e&&0<e.length){for(var t=e.length,i=0;i<t;i++){var r=e[i];if(r.Url==this._options.source)return r}return""}return""};var l=function(t,e){e.addEventListener("error",function(e){!function(e,t){u(e,t.detail)}(t,e)})}}function u(t,i){var r="Error code:"+i.code+"message:"+i.message;console.log(r);var o=p.ErrorCode.OtherError;r=_.get("Error_Play_Text");i.code==shaka.util.Error.Code.EXPIRED?(o=p.ErrorCode.AuthKeyExpired,r=_.get("DRM_License_Expired")):i.code==shaka.util.Error.Code.HTTP_ERROR?(o=p.ErrorCode.NetworkError,r=_.get("Http_Error")):i.code==shaka.util.Error.Code.HTTP_ERROR?(o=p.ErrorCode.LoadingTimeout,r=_.get("Http_Timeout")):i.category==shaka.util.Error.NETWORK&&(o=p.ErrorCode.NetworkError,r=_.get("Error_Network_Text"));!function(){if(setTimeout(function(){t.trigger(g.Private.Play_Btn_Hide)}),t.checkOnline()){var e={mediaId:t._options.vid?t._options.vid:"",error_code:o,error_msg:i.message};t.logError(e),e.display_msg=i.code+"|"+r,t.trigger(g.Player.Error,e)}}()}}},{"../../config":5,"../../lang/index":11,"../../lib/constants":15,"../../lib/dom":18,"../../lib/io":24,"../../lib/playerutil":29,"../../lib/util":33,"../base/event/eventtype":43,"../saas/drm":76}],69:[function(e,t,i){var r=e("../base/player"),o=e("./drminjector"),n=r.extend({init:function(e,t){o.inject(this,n,r.prototype,t,function(e){}),t._native=!1,r.call(this,e,t)}});t.exports=n},{"../base/player":62,"./drminjector":68}],70:[function(e,t,i){var o=e("../../ui/component"),n=e("../../lib/data"),s=e("../../lib/ua"),a=e("../../lib/constants"),l=e("../../lib/dom"),u=e("../../lib/object"),c=e("../../config"),d=e("../../lang/index"),p=e("../../lib/playerutil"),h=e("../../lib/util"),r=e("../../ui/component/info-display"),f=e("../../ui/component/error-display"),_=e("../../feature/autoPlayDelay"),g=e("../../commonui/autostreamselector"),y=e("../base/event/eventtype"),v=e("../saas/ststoken"),m=o.extend({init:function(e,t){if(void 0===t.skinLayout&&(t.skinLayout=p.defaultFlashLayout),o.call(this,this,t),this._id="prism-player-"+n.guid(),this.tag=e,this._el=this.tag,this._childrenUI=[f],this.initChildren(),this.id=this._id,window[this.id]=this,d.setCurrentLanguage(this._options.language,"flash",this._options.languageTexts),h.openInFile()){var i={mediaId:this._options.vid?this._options.vid:"",error_code:a.ErrorCode.FormatNotSupport,error_msg:d.get("Open_Html_By_File","flash")};this.trigger(y.Private.Error_Show,i)}else if(s.IS_MOBILE)this.trigger(y.Private.Error_Show,{mediaId:this._options.vid?this._options.vid:"",error_code:a.ErrorCode.FormatNotSupport,error_msg:d.get("Cant_Use_Flash_On_Mobile","flash")});else{if(this._options.vid&&this._options.accessKeyId&&this._options.securityToken&&this._options.accessKeySecret){var r=this;v.getPlayAuth(this._options,function(e){r._options.playauth=e,r._createPlayer()},function(e){var t={mediaId:r._options.vid,error_code:e.Code,error_msg:e.Message};e.sri&&(t.sri=e.sri),t.display_msg=e.display_msg,r.trigger(y.Private.Error_Show,t)},"flash")}else this._createPlayer();this._status="init"}},_createPlayer:function(){if(this._options.autoPlayDelay){var e=new _(this),t=this;e.handle(function(){t._options.autoplay=!0,t._initPlayer(),t._childrenUI=[r,g],t.initChildren()})}else this._initPlayer(),this._childrenUI=[r,g],this.initChildren();if(!s.HAS_FLASH){var i=d.get("Flash_Not_Ready","flash");this.trigger(y.Private.Info_Show,{text:i,align:"tc",isBlack:!1})}},_initPlayer:function(){var e="//"+c.domain+"/de/prismplayer-flash/"+c.flashVersion+"/PrismPlayer.swf";this._options.playerSwfPath?e=this._options.playerSwfPath:c.domain?-1<c.domain.indexOf("localhost")&&(e="//"+c.domain+"/build/flash//PrismPlayer.swf"):e="de/prismplayer-flash/"+c.flashVersion+"/PrismPlayer.swf";var t=this._comboFlashVars(),i=this._options.wmode?this._options.wmode:"opaque";this.tag.innerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" width="100%" height="100%" id="'+this.id+'"><param name=movie value="'+e+'"><param name=quality value=High><param name="FlashVars" value="'+t+'"><param name="WMode" value="'+i+'"><param name="AllowScriptAccess" value="always"><param name="AllowFullScreen" value="true"><param name="AllowFullScreenInteractive" value="true"><embed name="'+this.id+'" src="'+e+'" quality=high pluginspage="//www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="100%" height="100%" AllowScriptAccess="always" AllowFullScreen="true" AllowFullScreenInteractive="true" WMode="'+i+'" FlashVars="'+t+'"></embed></object>'},_getPlayer:function(e){return-1!=navigator.appName.indexOf("Microsoft")?document.getElementById(e):document[e]},_getLowerQualityLevel:function(){var e=this._getVideoUrls();if(!e)return"";var t=e.Urls,i=e.index;return t&&0==t.length||-1==i?"":0<i?{item:t[i-1],index:i-1}:""},_comboFlashVars:function(){var e=encodeURIComponent(s.getReferer()),t=s.getHref(),i=encodeURIComponent(t),r="";t&&(r=s.getHost(t));var o=this._options,n={autoPlay:o.autoplay?1:0,isInner:0,actRequest:1,vid:o.vid,diagnosisButtonVisible:o.diagnosisButtonVisible?1:0,domain:o.domain?o.domain:"//tv.taobao.com",statisticService:o.statisticService?o.statisticService:c.logReportTo,videoInfoService:o.videoInfoService?o.videoInfoService:"/player/json/getBaseVideoInfo.do",disablePing:o.trackLog?0:1,namespace:this.id,barMode:0!=o.barMode?1:0,isLive:o.isLive?1:0,waterMark:o.waterMark,environment:o.environment,vurl:o.source?encodeURIComponent(o.source):"",plugins:o.plugins?o.plugins:"",snapShotShow:o.snapshot?1:0,accessId:o.accId?o.accId:"",accessKey:o.accSecret?o.accSecret:"",apiKey:o.apiKey?o.apiKey:"",flashApiKey:o.flashApiKey?o.flashApiKey:"",disableSeek:o.disableSeek?1:0,disableFullScreen:o.disableFullScreen?1:0,stsToken:o.stsToken?o.stsToken:"",domainRegion:o.domainRegion?o.domainRegion:"",authInfo:o.authInfo?encodeURIComponent(o.authInfo):"",playDomain:o.playDomain?o.playDomain:"",stretcherZoomType:o.stretcherZoomType?o.stretcherZoomType:"",playauth:o.playauth?o.playauth.replace(/\+/g,"%2B"):"",prismType:o.prismType?o.prismType:0,formats:o.formats?o.formats:"",notShowTips:o.notShowTips?1:0,showBarTime:o.showBarTime?o.showBarTime:0,showBuffer:0==o.showBuffer?0:1,rePlay:o.rePlay?1:0,encryp:o.encryp?o.encryp:"",secret:o.secret?o.secret:"",mediaType:"video",logInfo:{ud:s.getHost(o.source),os:s.os.name,ov:s.os.version||"",et:s.browser.name,ev:s.browser.version||"",uat:s.USER_AGENT,r:e,pu:i,app_n:r}},a=[];return void 0!==o.rtmpBufferTime&&(n.rtmpBufferTime=o.rtmpBufferTime),o.cover&&(n.cover=o.cover),o.extraInfo&&(n.extraInfo=encodeURIComponent(JSON.stringify(o.extraInfo))),n.logInfo&&(n.logInfo=encodeURIComponent(JSON.stringify(n.logInfo))),n.languageData=encodeURIComponent(JSON.stringify(d.getLanguageData("flash"))),n.language=d.getCurrentLanguage(),u.each(n,function(e,t){a.push(e+"="+t)}),a.join("&")},initChildren:function(){for(var e=this._childrenUI.length,t=0;t<e;t++){var i=new this._childrenUI[t](this,this._options),r=i.el();r.id=i.id(),this.contentEl().appendChild(r),i.bindEvent()}var o=document.querySelector("#"+this._options.id+" .prism-info-display");l.css(o,"display","none")},flashReady:function(){this.flashPlayer=this._getPlayer(this.id),this._isReady=!0;var e,t=this._options.skinRes,i=this._options.skinLayout;if(!1!==i&&!u.isArray(i))throw new Error("PrismPlayer Error: skinLayout should be false or type of array!");if("string"!=typeof t)throw new Error("PrismPlayer Error: skinRes should be string!");e=0!=i&&0!==i.length&&{skinRes:t,skinLayout:i},this.flashPlayer.setPlayerSkin(e),this.trigger("ready");var r=this;window.addEventListener("beforeunload",function(){try{r.flashPlayer.setPlayerCloseStatus()}catch(e){}})},jsReady:function(){return!0},snapshoted:function(e){var t=h.toBinary(e),i="data:image/jpeg;base64,"+e;this.trigger("snapshoted",{time:this.getCurrentTime(),base64:i,binary:t})},uiReady:function(){this._status="ready",this.trigger("uiReady")},loadedmetadata:function(){"ended"!=this._status&&(this._status="loading",this.trigger("loadedmetadata"))},onPlay:function(){this._status="play",this.trigger("play"),this._clearTimeoutHandle(),this.trigger(y.Private.AutoStreamHide)},onEnded:function(){this._clearTimeoutHandle(),this._status="ended",this.trigger("ended")},onPause:function(){this._status="pause",this._clearTimeoutHandle(),this.trigger(y.Private.AutoStreamHide),this.trigger("pause")},onBulletScreenReady:function(){this.trigger("bSReady")},onBulletScreenMsgSend:function(e){this.trigger("bSSendMsg",e)},onVideoRender:function(e){this._clearTimeoutHandle(),this.trigger("videoRender"),this.trigger("canplay",{loadtime:e})},onVideoError:function(e){this._clearTimeoutHandle(),this._status="error",this.trigger("error",{errortype:e})},onM3u8Retry:function(){this.trigger("m3u8Retry")},hideBar:function(){this.trigger("hideBar")},showBar:function(){this.trigger("showBar")},liveStreamStop:function(){this.trigger("liveStreamStop")},stsTokenExpired:function(){this._status="error",this.trigger("stsTokenExpired")},onVideoBuffer:function(){if("pause"!=this._status){this._status="waiting",this.trigger("waiting"),this._clearTimeoutHandle();var e=this;this._checkTimeoutHandle=setTimeout(function(){e.trigger(y.Private.AutoStreamShow)},1e3*this._options.loadDataTimeout),this._checkVideoStatus()}},startSeek:function(e){this.trigger("startSeek",e)},completeSeek:function(e){this.trigger("completeSeek",e)},_invoke:function(){var e=arguments[0],t=arguments;if(Array.prototype.shift.call(t),!this.flashPlayer)throw new Error("PrismPlayer Error: flash player is not ready\uff0cplease use api after ready event occured!");if("function"!=typeof this.flashPlayer[e])throw new Error("PrismPlayer Error: function "+e+" is not found!");return this.flashPlayer[e].apply(this.flashPlayer,t)},play:function(){this._invoke("playVideo")},replay:function(){this._invoke("replayVideo")},pause:function(){this._invoke("pauseVideo")},stop:function(){this._invoke("stopVideo")},seek:function(e){this._invoke("seekVideo",e)},getCurrentTime:function(){return this._invoke("getCurrentTime")},getDuration:function(){return this._invoke("getDuration")},getStatus:function(){return this._status},_getVideoUrls:function(){var e=this._invoke("getVideoUrls"),t=[];if(e&&e.Urls)for(var i=0;i<e.Urls.length;i++){var r=e.Urls[i].value,o=r.desc.indexOf("_"),n=d.get(r.definition,"flash");r.desc=0<o?n+"_"+r.height:n,t.push(r)}return{Urls:t,index:e.index}},_getVideoStatus:function(){return this._invoke("getVideoStatus")},_checkVideoStatus:function(){if(this.flashPlayer&&!this._checkVideoStatusHandler){var t=this,i=function(){t._checkVideoStatusHandler=setTimeout(function(){var e=t._getVideoStatus();"playing"==e.videoStatus&&"bufferFull"==e.bufferStatus?(t._status="playing",t._clearTimeoutHandle()):"videoPlayOver"==e.videoStatus&&(t._status="ended",t._clearTimeoutHandle()),i()},500)};i()}},_clearTimeoutHandle:function(){this._checkTimeoutHandle&&(clearTimeout(this._checkTimeoutHandle),this._checkTimeoutHandle=null)},_changeStream:function(e){return this._invoke("changeStream",e)},mute:function(){this.setVolume(0)},unMute:function(){this.setVolume(.5)},getVolume:function(){return this._invoke("getVolume")},setVolume:function(e){this._invoke("setVolume",e)},loadByVid:function(e){this._invoke("loadByVid",e,!1)},loadByUrl:function(e,t){this._invoke("loadByUrl",e,t)},dispose:function(){this._clearTimeoutHandle(),this._checkVideoStatusHandler&&(clearTimeout(this._checkVideoStatusHandler),this._checkVideoStatusHandler=null),this._invoke("pauseVideo");var e=this;setTimeout(function(){e.off("completeSeek"),e.off("startSeek"),e.off("stsTokenExpired"),e.off("liveStreamStop"),e.off("showBar"),e.off("hideBar"),e.off("m3u8Retry"),e.off("error"),e.off("canplay"),e.off("pause"),e.off("ended"),e.off("play"),e.off("loadedmetadata"),e.off("snapshoted"),e.off("uiReady"),e.off("ready"),e.flashPlayer=null,e._el&&(e._el.innerHTML="")})},showBSMsg:function(e){this._invoke("showBSMsg",e)},setToastEnabled:function(e){this._invoke("setToastEnabled",e)},setLoadingInvisible:function(){this._invoke("setLoadingInvisible")},setPlayerSize:function(e,t){this._el.style.width=e,this._el.style.height=t}});t.exports=m},{"../../commonui/autostreamselector":2,"../../config":5,"../../feature/autoPlayDelay":7,"../../lang/index":11,"../../lib/constants":15,"../../lib/data":17,"../../lib/dom":18,"../../lib/object":26,"../../lib/playerutil":29,"../../lib/ua":31,"../../lib/util":33,"../../ui/component":94,"../../ui/component/error-display":99,"../../ui/component/info-display":102,"../base/event/eventtype":43,"../saas/ststoken":81}],71:[function(e,t,i){var a=e("../../lib/io"),d=e("../../config"),p=e("../../lib/constants"),h=e("../../lib/util"),u=e("../../lib/playerutil"),c=(e("../../lib/dom"),e("../../lib/ua")),f=e("../../lang/index"),_=e("../base/event/eventtype");e("../base/player");t.exports.inject=function(e,t,i,r,s,o){var n=r.source;if(o||function(e,t){return!(e._flv||!u.isFlv(t))}(e,n)){e._Type=t,e._superType=i,e._superPt=i.prototype,e._disposed=!1,t.prototype._checkFlvReady=function(){if(null==e._flv)throw new Error("please invoke this method after ready event")},e._isFlv=!0,e._flv=null,e._isLoadedFlv=!1,e._originalUrl="",t.prototype.play=function(e){this._checkFlvReady(),this._isManualPlay=e||!1;if(this.trigger(_.Private.Cover_Hide),this._options.isLive&&e)this._loadByUrlInner(this._options.source,0,liveForceLoad);else if(this.tag.ended||this._ended)this.replay();else{if(0==this._seeking){var t=0;this.tag.ended||this._ended||0==(t=this.getCurrentTime())&&(t=-1),-1!=t&&this.seek(t)}this.tag.paused&&(this._hasLoaded||(this.getMetaData(),this._flv.load()),this._flv.play())}return this},t.prototype.seek=function(e){this._checkFlvReady(),e===this.tag.duration&&e--;try{this._flv.currentTime=e}catch(e){console.log(e)}return this},t.prototype.pause=function(e){return this._checkFlvReady(),this._isManualPause=e||!1,this._flv.pause(),this},t.prototype.getProgramDateTime=function(){if(this._checkFlvReady(),!this._metadata)return"";var e=this._flv.getFirstSample(),t=e&&e.pts?e.pts:0;return console.log("\u63a8\u6d41\u65f6\u95f4\uff1a"+this._metadata.NtpTime),console.log("\u9996\u5e27PTS\uff1a"+t),this._metadata.NtpTime+t},t.prototype.initPlay=function(e){if(c.browser.safari&&this.trigger(_.Private.Snapshot_Hide),h.contentProtocolMixed(n)){var t={mediaId:this._options.vid?this._options.vid:"",error_code:p.ErrorCode.InvalidSourceURL,error_msg:"InvalidSourceURL"};return t.display_msg=f.get("Request_Block_Text"),void this.trigger(_.Player.Error,t)}function i(t,e){var i=!t._flv;t._destroyFlv();var r=t._options.isLive,o={isLive:r,enableWorker:t._options.enableWorker,stashInitialSize:2048},n={type:"flv",isLive:r,url:t._options.source};for(var a in r?(o.enableStashBuffer=t._options.enableStashBufferForFlv,stashInitialSize=t._options.stashInitialSizeForFlv,o.autoCleanupSourceBuffer=!1):o.lazyLoadMaxDuration=600,t._options.flvOption)"cors"==a||"hasAudio"==a||"withCredentials"==a||"hasVideo"==a||"type"==a?n[a]=t._options.flvOption[a]:o[a]=t._options.flvOption[a];t._originalUrl=t._options.source,flvjs.LoggingControl.enableAll=t._options.debug,t._flv=flvjs.createPlayer(n,o),l(t,t._flv),t._flv.on(flvjs.Events.MEDIA_INFO,function(e){t._metadata=e.metadata}),t._flv.attachMediaElement(t.tag),t._initPlayBehavior(e)&&((t._options.preload||t._options.autoplay)&&(t._hasLoaded=!0,t._flv.load()),t._options.autoplay&&!t.tag.paused&&t._flv.play(),s&&s(t._flv),i&&t._executeReadyCallback())}(that=this)._isLoadedFlv&&"undefined"!=typeof Hls?setTimeout(function(){i(that,e)},1e3):(this.trigger(_.Private.H5_Loading_Show),function(e,t){var i="aliplayer-flv-min.js",r="https://"+d.domain+"/de/prismplayer/"+d.h5Version+"/flv/"+i;d.domain?-1<d.domain.indexOf("g-assets.daily")?r="http://"+d.domain+"/de/prismplayer/"+d.h5Version+"/flv/"+i:-1<d.domain.indexOf("localhost")&&(r="http://"+d.domain+"/build/flv/"+i):r="de/prismplayer/"+d.h5Version+"/flv/"+i;var o=this;a.loadJS(r,function(){e.apply(o)})}.call(that,function(){this._isLoadedFlv=!0,i(that,e)},this._options.debug))},t.prototype._destroyFlv=function(){try{this._flv&&(this._flv.pause(),this._flv.destroy())}catch(e){console.log(e)}this.loaded=!1,this._hasLoaded=!1,this._flv=null},t.prototype.dispose=function(){this._disposed||(this._disposed=!0,this._superPt&&this._superPt.dispose.call(this),this._destroyFlv(),this._superPt&&(t.prototype.play=this._superPt.play,t.prototype.pause=this._superPt.pause,t.prototype.initPlay=this._superPt.initPlay,t.prototype.seek=this._superPt.seek,t.prototype.canSeekable=this._superPt.canSeekable))},t.prototype.canSeekable=function(e){var t=this._flv.mediaInfo;return!(!this._flv._isTimepointBuffered(e)&&t&&!t.hasKeyframesIndex)};var l=function(u,e){var c=!1;e.on(flvjs.Events.ERROR,function(e,t,i){var r=p.ErrorCode.OtherError,o=f.get("Error_Play_Text");if(t==flvjs.ErrorDetails.NETWORK_EXCEPTION){var n=u.getOptions().source;!n||0!=n.toLowerCase().indexOf("http://")&&0!=n.toLowerCase().indexOf("https://")?(r=p.ErrorCode.InvalidSourceURL,o=f.get("Error_Invalidate_Source_Widthout_Protocal"),c=!0):o=navigator.onLine?(r=p.ErrorCode.RequestDataError,f.get("Maybe_Cors_Error")):(r=p.ErrorCode.NetworkError,f.get("Error_Network_Text"))}else t==flvjs.ErrorDetails.NETWORK_STATUS_CODE_INVALID?"404"==i.code?(r=p.ErrorCode.NotFoundSourceURL,o=f.get("Error_Not_Found")):"403"==i.code?(r=p.ErrorCode.AuthKeyExpired,o=f.get("Error_AuthKey_Text"),c=!0):(r=p.ErrorCode.NetworkError,o=f.get("Error_Network_Text")):t==flvjs.ErrorDetails.NETWORK_TIMEOUT?(r=p.ErrorCode.LoadingTimeout,o=f.get("Error_Waiting_Timeout_Text")):t!=flvjs.ErrorDetails.MEDIA_FORMAT_UNSUPPORTED&&t!=flvjs.ErrorDetails.MEDIA_CODEC_UNSUPPORTED||(r=p.ErrorCode.FormatNotSupport,o=f.get("Error_H5_Not_Support_Text"),c=!0);var a=function(){if(setTimeout(function(){u.trigger(_.Private.Play_Btn_Hide)}),u.checkOnline()){var e={mediaId:u._options&&u._options.vid?u._options.vid:"",error_code:r,error_msg:i.msg};u.logError(e),e.display_msg=o,d.cityBrain&&(u.flv=null),u.trigger(_.Player.Error,e)}};if(u._options&&u._options.isLive&&!c){var s=u._options;if(s.liveRetry>u._liveRetryCount){0==u._liveRetryCount&&u.trigger(_.Player.OnM3u8Retry);var l=s.liveRetryInterval+s.liveRetryStep*u._liveRetryCount;u._liveRetryCount++,h.sleep(1e3*l),u._loadByUrlInner(s.source)}else u._liveErrorHandle&&clearTimeout(u._liveErrorHandle),u.trigger(_.Player.LiveStreamStop),u._liveErrorHandle=setTimeout(a,500)}else{if(u._reloadForVod())return;a()}})}}}},{"../../config":5,"../../lang/index":11,"../../lib/constants":15,"../../lib/dom":18,"../../lib/io":24,"../../lib/playerutil":29,"../../lib/ua":31,"../../lib/util":33,"../base/event/eventtype":43,"../base/player":62}],72:[function(e,t,i){var r=e("../base/player"),o=e("./flvinjector"),n=r.extend({init:function(e,t){o.inject(this,n,r,t,function(e){}),t._native=!1,r.call(this,e,t)}});t.exports=n},{"../base/player":62,"./flvinjector":71}],73:[function(e,t,i){var c=e("../../lib/io"),d=e("../../config"),p=e("../../lib/constants"),h=e("../../lib/util"),f=e("../../lib/playerutil"),_=(e("../../lib/dom"),e("../../lib/ua")),g=e("../../lang/index"),y=e("../base/event/eventtype");e("../base/player");t.exports.inject=function(e,t,i,r,n,o){var a=r.source,s=r.useHlsPluginForSafari,l=r.useHlsPlugOnMobile;if(n||o||function(e,t,i,r){return!(e._hls||!f.isHls(t)||!(!f.canPlayHls()||f.isSafariUsedHlsPlugin(i)||r&&f.isUsedHlsPluginOnMobile()))}(e,a,s,l)){e._Type=t,e._superType=i,e._superPt=i.prototype,e._disposed=!1,t.prototype._checkHlsReady=function(){if(null==e._hls)throw new Error("please invoke this method after ready event")},e._isHls=!0,e._hls=null,e._isLoadedHls=!1,e._stopLoadAsPaused=!0,t.prototype.play=function(e){this._checkHlsReady(),this._isManualPlay=e||!1;if(this.trigger(y.Private.Cover_Hide),this._options.autoplay||this._options.preload||this._loadSourced||(this._loadSourced=!0,this._options._autoplay=!0,this._hls.loadSource(this._options.source)),this.tag.ended||this._ended)this.replay();else if(this.tag.paused&&(this.tag.play(),this._stopLoadAsPaused)){var t=this.getCurrentTime();this._hls.startLoad(t)}return this},t.prototype.replay=function(){return this._monitor&&this._monitor.replay(),this._hls.startLoad(0),this.tag.play(),this},t.prototype.pause=function(e){return this.tag&&(this._checkHlsReady(),this.tag.pause(),this._stopLoadAsPaused&&this._hls.stopLoad()),this._isManualPause=e||!1,this},t.prototype.stop=function(){return this._checkHlsReady(),this.tag.setAttribute("src",null),this._hls.stopLoad(),this},t.prototype.seek=function(e){this._checkHlsReady();try{this._superPt.seek.call(this,e),this.tag.paused&&this._stopLoadAsPaused&&this._hls.startLoad(e)}catch(e){console.log(e)}return this},t.prototype.getProgramDateTime=function(){if(this._checkHlsReady(),-1==this._hls.currentLevel)return"";var e=this._hls.currentLevel,t=this._hls.levels[e].details;if(t){var i=t.programDateTime;if(console.log("ProgramDateTime="+i),i)return new Date(i).valueOf()}return 0},t.prototype._reloadAndPlayForM3u8=function(){0==this._liveRetryCount&&this.trigger(y.Player.OnM3u8Retry),this._liveRetryCount++},t.prototype._switchLevel=function(e){this.trigger(y.Player.LevelSwitch);for(var t=this._hls.levels,i=0;i<t.length;i++)if(t[i].url==e){this._hls.currentLevel=i;break}this._switchedLevel=!0;var r=this;setTimeout(function(){r.trigger(y.Player.LevelSwitched),this._switchedLevel=!1},1e3)},t.prototype.initPlay=function(e){if(h.contentProtocolMixed(a)){var t={mediaId:this._options.vid?this._options.vid:"",error_code:p.ErrorCode.InvalidSourceURL,error_msg:"InvalidSourceURL"};return t.display_msg=g.get("Request_Block_Text"),void this.trigger(y.Player.Error,t)}function i(a,e){var t=!a._hls;a._destroyHls();var i={xhrSetup:function(e,t){e.withCredentials=a._options.withCredentials||!1}},r=a._options.loadingTimeOut||a._options.hlsLoadingTimeOut;for(var o in r&&(i.manifestLoadingTimeOut=r,i.levelLoadingTimeOut=r,i.fragLoadingTimeOut=r),a._options.nudgeMaxRetry&&(i.nudgeMaxRetry=a._options.nudgeMaxRetry),a._options.maxMaxBufferLength&&(i.maxMaxBufferLength=a._options.maxMaxBufferLength),a._options.maxBufferSize&&(i.maxBufferSize=a._options.maxBufferSize),a._options.maxBufferLength&&(i.maxBufferLength=a._options.maxBufferLength),n&&(i._sce_dlgtqredxx=n),i.enableWorker=a._options.enableWorker,i.debug=a._options.debug,a._stopLoadAsPaused=a._options.hlsOption.stopLoadAsPaused,a._options.hlsOption)i[o]=a._options.hlsOption[o];_.IS_IE11&&n&&(i.enableWorker=!1),a._hls=new Hls(i),u(a,a._hls),a._loadSourced=!1,a._hls.attachMedia(a.tag),a._hls.on(Hls.Events.MEDIA_ATTACHED,function(){(a._options.autoplay||a._options.preload||e)&&(a._loadSourced=!0,a._hls.loadSource(a._options.source)),a._hls.on(Hls.Events.MANIFEST_PARSED,function(){a._initPlayBehavior(e||a._loadSourced)}),a._hls.on(Hls.Events.AUDIO_TRACKS_UPDATED,function(e,t){a.trigger(y.Player.AudioTrackUpdated,t)}),a._hls.on(Hls.Events.MANIFEST_LOADED,function(e,t){a.trigger(y.Player.LevelsLoaded,t)}),a._hls.on(Hls.Events.LEVEL_SWITCHED,function(e,t){if(a._qualityService){for(var i=a._hls.levels[t.level].url,r=a._qualityService.levels,o="",n=0;n<r.length;n++)if(r[n].Url==i){o=r[n].desc;break}o&&a.trigger(y.Private.QualityChange,{levelSwitch:!0,url:i,desc:o})}}),a._hls.on(Hls.Events.AUDIO_TRACK_SWITCH,function(e,t){a.trigger(y.Player.AudioTrackSwitch,t),setTimeout(function(){a.trigger(y.Player.AudioTrackSwitched,t)},1e3)}),t&&a._executeReadyCallback()})}this._isLoadedHls&&"undefined"!=typeof Hls?i(this,e):(this.trigger(y.Private.H5_Loading_Show),function(e,t,i){var r="aliplayer-hls-min.js",o="https://"+d.domain+"/de/prismplayer/"+d.h5Version+"/hls/"+r;d.domain?-1<d.domain.indexOf("g-assets.daily")?o="http://"+d.domain+"/de/prismplayer/"+d.h5Version+"/hls/"+r:-1<d.domain.indexOf("localhost")&&(o="http://"+d.domain+"/build/hls/"+r):o="de/prismplayer/"+d.h5Version+"/hls/"+r;var n=this;c.loadJS(o,function(){e.apply(n)})}.call(this,function(){this._isLoadedHls=!0,i(this,e)},this._options.debug))},t.prototype._destroyHls=function(){this._hls&&this._hls.destroy(),this._hls=null},t.prototype.dispose=function(){this._disposed||(this._disposed=!0,this._superPt&&this._superPt.dispose.call(this),this._destroyHls(),this._superPt&&(t.prototype.play=this._superPt.play,t.prototype.pause=this._superPt.pause,t.prototype.initPlay=this._superPt.initPlay,t.prototype.replay=this._superPt.replay,t.prototype.stop=this._superPt.stop,t.prototype.seek=this._superPt.seek))};var u=function(l,e){e.on(Hls.Events.ERROR,function(e,t){if(l._options&&t.details!=Hls.ErrorDetails.FRAG_LOOP_LOADING_ERROR&&1!=l._seeking&&(0!=t.fatal||t.type==Hls.ErrorTypes.NETWORK_ERROR)){l._clearTimeout();var i=p.ErrorCode.LoadedMetadata,r=g.get("Error_Play_Text"),o=!1;if(t.details==Hls.ErrorDetails.MANIFEST_LOAD_ERROR){o=!0;t.networkDetails;r=t.response?"404"==t.response.code?(i=p.ErrorCode.NotFoundSourceURL,g.get("Error_Not_Found")):"403"==t.response.code?(i=p.ErrorCode.AuthKeyExpired,g.get("Error_AuthKey_Text")):"0"==t.response.code&&navigator.onLine?(i=p.ErrorCode.RequestDataError,r+"\uff0c"+g.get("Maybe_Cors_Error")):g.get("Error_Load_M3U8_Failed_Text"):g.get("Error_Load_M3U8_Failed_Text")}else t.details==Hls.ErrorDetails.MANIFEST_LOAD_TIMEOUT?(o=!0,r=g.get("Error_Load_M3U8_Timeout_Text")):t.details==Hls.ErrorDetails.MANIFEST_PARSING_ERROR||t.details==Hls.ErrorDetails.MANIFEST_INCOMPATIBLE_CODECS_ERROR?(o=!0,r=g.get("Error_M3U8_Decode_Text")):t.type==Hls.ErrorTypes.NETWORK_ERROR?(i=p.ErrorCode.NetworkError,r=g.get("Error_Network_Text")):t.type!=Hls.ErrorTypes.MUX_ERROR&&t.type!=Hls.ErrorTypes.MEDIA_ERROR||(i=p.ErrorCode.PlayDataDecode,r=g.get("Error_TX_Decode_Text"));r=r+"("+t.details+")";var n=function(){if(l.pause(),setTimeout(function(){l.trigger(y.Private.Play_Btn_Hide)}),l.checkOnline()){var e={mediaId:l._options&&l._options.vid?l._options.vid:"",error_code:i,error_msg:t.details};l.logError(e),e.display_msg=r,l.trigger(y.Player.Error,e)}};if(l._options&&l._options.isLive){var a=l._options;if(a.liveRetry>l._liveRetryCount){0==l._liveRetryCount&&l.trigger(y.Player.OnM3u8Retry);var s=a.liveRetryInterval+a.liveRetryStep*l._liveRetryCount;l._liveRetryCount++,h.sleep(1e3*s),o&&l._loadByUrlInner(l._options.source,0,!0)}else l._liveErrorHandle&&clearTimeout(l._liveErrorHandle),l.trigger(y.Player.LiveStreamStop),l._liveErrorHandle=setTimeout(n,500)}else{if(l._reloadForVod())return;n()}}})}}}},{"../../config":5,"../../lang/index":11,"../../lib/constants":15,"../../lib/dom":18,"../../lib/io":24,"../../lib/playerutil":29,"../../lib/ua":31,"../../lib/util":33,"../base/event/eventtype":43,"../base/player":62}],74:[function(e,t,i){var r=e("../base/player"),o=e("./hlsinjector"),n=r.extend({init:function(e,t){t._native=!1,o.inject(this,n,r,t),r.call(this,e,t)}});t.exports=n},{"../base/player":62,"./hlsinjector":73}],75:[function(e,t,i){var r=e("../../lib/constants"),o=e("../../lib/oo").extend({init:function(e){this.player=e,this.tickhandle=null}});o.prototype.tick=function(e,t){var i=this;this.tickhandle=setTimeout(function(){i.player&&i.player.trigger(r.AuthKeyExpiredEvent),t&&t()},1e3*e)},o.prototype.clearTick=function(e){this.tickhandle&&clearTimeout(this.tickhandle)},t.exports=o},{"../../lib/constants":15,"../../lib/oo":27}],76:[function(e,t,i){var l=e("../../lib/io"),u=(e("../../lib/ua"),e("../../lib/bufferbase64")),c=e("../../lib/constants"),d=e("./signature"),p=e("./util"),h=e("../../lang/index"),f=function(e,r,o){var t=d.randomUUID(),i="https://mts."+e.domainRegion+".aliyuncs.com/?",n={AccessKeyId:e.accessId,Action:"GetLicense",MediaId:e.vid,LicenseUrl:i,data:e.data,SecurityToken:e.stsToken,Format:"JSON",Type:e.encryptionType,Version:"2014-06-18",SignatureMethod:"HMAC-SHA1",SignatureVersion:"1.0",SignatureNonce:t};e.header&&(n.Header=e.header);var a=i+("Signature="+d.AliyunEncodeURI(d.makeChangeSiga(n,e.accessSecret,"POST"))),s=d.makeUTF8sort(n,"=","&");l.post(a,s,function(e){if(e){var t=JSON.parse(e);if(r){var i=t.License;r(i)}}else o&&o(p.createError("MPS\u83b7\u53d6License\u5931\u8d25"))},function(e){if(o){var t={Code:"",Message:h.get("Error_MTS_Fetch_Urls_Text")};try{t=JSON.parse(e)}catch(e){}o({Code:c.ErrorCode.ServerAPIError,Message:t.Code+"|"+t.Message,sri:t.requestId||""})}})};t.exports.requestLicenseKey=function(e){var l=e;return l._options.vid&&(l.__vid=l._options.vid),function(e,i){var t=l._options,r=l._getDRMEncryptItem();if(r){var o={vid:l.__vid,accessId:t.accId,accessSecret:t.accSecret,stsToken:t.stsToken,domainRegion:t.domainRegion,authInfo:t.authInfo,encryptionType:r.encryptionType};if(r.encryptionType==c.EncryptionType.Widevine)o.data=u.encode(e.message);else if(r.encryptionType==c.EncryptionType.PlayReady){var n=u.unpackPlayReady(e.message);o.data=n.changange,n.header&&(o.header=JSON.stringify(n.header))}console.log(o.data);var a=l.__licenseKeys,s=l.__vid+r.Url;a&&a[s],f(o,function(e){l.__licenseKeys||(l.__licenseKeys={}),10<o.data.length&&(l.__licenseKeys[s]=e);var t=u.decode(e);i(t)},function(e){var t={mediaId:l.__vid,error_code:e.Code,error_msg:e.Message};l.logError(t),l.trigger("error",t)})}}}},{"../../lang/index":11,"../../lib/bufferbase64":13,"../../lib/constants":15,"../../lib/io":24,"../../lib/ua":31,"./signature":80,"./util":82}],77:[function(e,t,i){var n=e("../../lib/io"),u=e("../../lib/constants"),c=e("./signature"),d=e("./util"),p=e("../../lang/index"),h=e("../../lib/ua");var f=function(e,o){var t="";e.sort(function(e,t){var i=parseInt(e.bitrate),r=parseInt(t.bitrate);if("desc"==o){if(r<i)return-1;if(i<r)return 1}else{if(i<r)return-1;if(r<i)return 1}});for(var i=e.length,r=0;r<i;r++){var n=e[r],a=u.QualityLevels[n.definition],s="";s=void 0===a?n.bitrate:t==a?a+n.bitrate:a,n.desc=s,t=a}},_=function(e,o){var t="";e.sort(function(e,t){var i=parseInt(e.width),r=parseInt(t.width);if("desc"==o){if(r<i)return-1;if(i<r)return 1}else{if(i<r)return-1;if(r<i)return 1}});for(var i=e.length,r=0;r<i;r++){var n=e[r],a=u.QualityLevels[n.definition],s="";s=void 0===a?"":t==a?a+n.height:a,n.desc=s,t=a}};t.exports.getDataByAuthInfo=function(e,a,s,l){c.returnUTCDate(),c.randomUUID();var t=c.randomUUID(),i={AccessKeyId:e.accessId,Action:"PlayInfo",MediaId:e.vid,Formats:e.format,AuthInfo:e.authInfo,AuthTimeout:e.authTimeout||u.AuthKeyExpired,IncludeSnapshotList:e.includeSnapshotList,Rand:e.rand,SecurityToken:e.stsToken,Format:"JSON",Version:"2014-06-18",SignatureMethod:"HMAC-SHA1",SignatureVersion:"1.0",Terminal:h.IS_CHROME?"Chrome":h.IS_EDGE?"Edge":h.IS_IE11?"IE":h.IS_SAFARI?"Safari":h.IS_FIREFOX?"Firefox":"",SignatureNonce:t},r=c.makeUTF8sort(i,"=","&")+"&Signature="+c.AliyunEncodeURI(c.makeChangeSiga(i,e.accessSecret)),o="https://mts."+e.domainRegion+".aliyuncs.com/?"+r;n.get(o,function(e){if(e){var t=JSON.parse(e),i=t.PlayInfoList.PlayInfo,r=t.SnapshotList?t.SnapshotList.Snapshot:[],o="";r&&0<r.length&&(o=r[0].Url);var n=function(e,t){for(var i=[],r=[],o=[],n=[],a=e.length-1;0<=a;a--){var s=e[a];"mp4"==s.format?r.push(s):"mp3"==s.format?o.push(s):"m3u8"==s.format?i.push(s):n.push(s)}return 0<o.length?(f(o,t),o):0<r.length?(_(r,t),r):0<i.length?(_(i,t),i):(_(n,t),n)}(i,a);s&&s({requestId:t.RequestId,urls:n,thumbnailUrl:o})}else l&&l(d.createError("MPS\u83b7\u53d6\u53d6\u6570\u5931\u8d25"))},function(e){if(l){var t={Code:"",Message:p.get("Error_MTS_Fetch_Urls_Text")};try{t=JSON.parse(e)}catch(e){}l({Code:u.ErrorCode.ServerAPIError,Message:t.Code+"|"+t.Message,sri:t.requestId||""})}})}},{"../../lang/index":11,"../../lib/constants":15,"../../lib/io":24,"../../lib/ua":31,"./signature":80,"./util":82}],78:[function(e,t,i){var r=e("./saasplayer"),o=(e("../../lib/constants"),e("./mts")),n=r.extend({init:function(e,t){r.call(this,e,t),this.service=o,this.loadByMts()}});n.prototype.loadByMts=function(e){var t={vid:this._options.vid,accessId:this._options.accId,accessSecret:this._options.accSecret,stsToken:this._options.stsToken,domainRegion:this._options.domainRegion,authInfo:this._options.authInfo,format:this._options.format,includeSnapshotList:this._options.includeSnapshotList||!1,defaultDefinition:this._options.defaultDefinition,authTimeout:this._options.authTimeout};this.loadData(t,e)},n.prototype.replayByVidAndAuthInfo=function(e,t,i,r,o,n){this.trigger("error_hide"),this._options.source="",this._isError=!1,this._duration=0,this._options.cover="",this._vodRetryCount=0,this._clearTimeout(),this.reloadNewVideoInfo(e,t,i,r,o,n)},n.prototype.reloadNewVideoInfo=function(e,t,i,r,o,n){if(this.trigger("error_hide"),this._options.source="",e&&(this._options.vid=e,this._options.accId=t,this._options.accessSecret=i,this._options.stsToken=r,this._options.domainRegion=n,this._options.authInfo=o),!(this._options.vid&&this._options.accId&&this._options.accessSecret&&this._options.stsToken&&this._options.domainRegion&&this._options.authInfo))throw new Error("\u9700\u8981\u63d0\u4f9bvid\u3001accId\u3001accessSecret\u3001stsToken\u3001domainRegion\u548cauthInfo\u53c2\u6570");this.log("STARTFETCHDATA",JSON.stringify({it:"mps",pa:{vid:e}})),this.loadByMts(!0)},t.exports=n},{"../../lib/constants":15,"./mts":77,"./saasplayer":79}],79:[function(e,t,i){var c=e("../base/player"),r=e("../audio/audioplayer"),n=(e("../../lib/event"),e("../../lib/io")),d=e("../../lib/constants"),o=e("./signature"),a=e("./authkeyexpiredhandle"),p=e("../hls/hlsinjector"),h=e("../flv/flvinjector"),f=e("../drm/drminjector"),_=(e("../../lib/cookie"),e("../../lang/index")),s=e("../../config"),g=e("../../lib/playerutil"),y=e("../base/event/eventtype"),v=c.extend({init:function(e,t){this._authKeyExpiredHandle=new a(this),c.prototype._videoCreateEl||(c.prototype._videoCreateEl=c.prototype.createEl),"mp3"==t.format?(t.height="auto",t.mediaType="audio",c.prototype.createEl=r.prototype.createEl,r.call(this,e,t)):(c.prototype.createEl=c.prototype._videoCreateEl,t._native=!1,c.call(this,e,t))}});v.prototype.loadData=function(e,t){if("undefined"!=typeof _sce_r_skjhfnck||""!=e.format&&"m3u8"!=e.format&&1!=this._options.encryptType)this._loadData(e,t);else{var i="aliplayer-vod-min.js",r="https://"+s.domain+"/de/prismplayer/"+s.h5Version+"/hls/"+i;s.domain?-1<s.domain.indexOf("g-assets.daily")?r="http://"+s.domain+"/de/prismplayer/"+s.h5Version+"/hls/"+i:-1<s.domain.indexOf("localhost")&&(r="http://"+s.domain+"/build/hls/"+i):r="de/prismplayer/"+s.h5Version+"/hls/"+i;var o=this;n.loadJS(r,function(){o._loadData(e,t)})}},v.prototype._loadData=function(n,a){var s=(new Date).getTime(),l=this;if(this._urls=[],this._currentPlayIndex=0,this._retrySwitchUrlCount=0,this._authKeyExpiredHandle.clearTick(),""!=n.format&&"m3u8"!=n.format||1!=this._options.encryptType)n.rand=o.randomUUID();else{var u=_sce_r_skjhfnck();n.rand=_sce_lgtcaygl(u)}this.trigger(y.Private.H5_Loading_Show),this.service.getDataByAuthInfo(n,this._options.qualitySort,function(e){if(l.log("COMPLETEFETCHDATA",{cost:(new Date).getTime()-s}),e.urls&&0==e.urls.length)l._mtsError_message(l,{Code:d.ErrorCode.URLsIsEmpty,Message:_.get("Error_Vod_URL_Is_Empty_Text")+(n.format?"(format:"+n.format+")":"")},"");else{l.log("COMPLETEFETCHDATA",{cost:(new Date).getTime()-s,mi:JSON.stringify(e.urls)}),l._urls=e.urls,l._currentPlayIndex=g.findSelectedStreamLevel(l._urls,n.defaultDefinition);var t=e.urls[l._currentPlayIndex],i=t.Url;if(l._vodDuration=t.duration||0,l._options.source=i,l.encType="",l.trigger(y.Private.PREPARE,t.definition),l.UI.cover&&e.coverUrl&&!l._options.cover&&l.setCover(e.coverUrl),g.isHls(i)){var r="";if(t.encryptionType==d.EncryptionType.Private){l.encType=t.encryptionType;var o=g.checkSecuritSupport();if(o)return void l._mtsError_message(l,{Code:d.ErrorCode.EncrptyVideoNotSupport,Message:o,display_msg:o},"");r=_sce_dlgtqred(u,t.rand,t.plaintext)}p.inject(l,v,c,l._options,r)}else g.isFlv(i)?h.inject(l,v,c,l._options):g.isDash(i)?f.inject(l,v,c,l._options):l._player._executeReadyCallback();l._authKeyExpiredHandle.tick(d.AuthKeyRefreshExpired),l.trigger(y.Private.SourceLoaded,t),l.initPlay(a),l.trigger(y.Private.ChangeURL),e.thumbnailUrl&&l._thumbnailService.get(e.thumbnailUrl)}},function(e){l._mtsError_message(l,e,"")})},v.prototype._changeStream=function(e,t){this._urls.length>e&&(this.loadByUrl(this._urls[e].Url,this.getCurrentTime()),this._currentPlayIndex=e,this.trigger(y.Private.QualityChange,t||_.get("Quality_Change_Fail_Switch_Text")))},v.prototype._getLowerQualityLevel=function(){if(0==this._urls.length||-1==this._currentPlayIndex)return"";if("asc"==this.options().qualitySort){if(0<this._currentPlayIndex)return{item:this._urls[this._currentPlayIndex-1],index:this._currentPlayIndex-1}}else if(this._currentPlayIndex<this._urls.length-1)return{item:this._urls[this._currentPlayIndex+1],index:this._currentPlayIndex+1};return""},v.prototype._mtsError_message=function(e,t,i){var r=e;r.trigger(y.Private.H5_Loading_Hide);var o=t.Code?t.Code:"OTHER_ERR_CODE",n=t.Message?t.Message:"OTHER_ERR_MSG",a=(d.ErrorCode.ServerAPIError,t.display_msg||"");-1<n.indexOf("InvalidParameter.Rand")||-1<n.indexOf('"Rand" is not valid.')?(d.ErrorCode.EncrptyVideoNotSupport,a=_.get("Error_Not_Support_encrypt_Text")):-1<n.indexOf("SecurityToken.Expired")?(d.ErrorCode.AuthKeyExpired,a=_.get("Error_Playauth_Expired_Text")):-1<n.indexOf("InvalidVideo.NoneStream")&&(d.ErrorCode.URLsIsEmpty,a=_.get("Error_Fetch_NotStream")+"("+r._options.format+"|"+r._options.definition+")");var s=r._options.vid?r._options.vid:"0",l=(r._options.from&&r._options.from,{mediaId:s,error_code:o,error_msg:n});t.sri&&(l.sri=t.sri),r.logError(l),l.display_msg=(a||_.get("Error_Vod_Fetch_Urls_Text"))+"</br>"+n,r.trigger("error",l),console.log("PrismPlayer Error: "+i+"! error_msg :"+n+";")},t.exports=v},{"../../config":5,"../../lang/index":11,"../../lib/constants":15,"../../lib/cookie":16,"../../lib/event":19,"../../lib/io":24,"../../lib/playerutil":29,"../audio/audioplayer":41,"../base/event/eventtype":43,"../base/player":62,"../drm/drminjector":68,"../flv/flvinjector":71,"../hls/hlsinjector":73,"./authkeyexpiredhandle":75,"./signature":80}],80:[function(e,c,t){var r=e("crypto-js/hmac-sha1"),o=e("crypto-js/enc-base64"),i=e("crypto-js/enc-utf8");c.exports.randomUUID=function(){for(var e=[],t="0123456789abcdef",i=0;i<36;i++)e[i]=t.substr(Math.floor(16*Math.random()),1);return e[14]="4",e[19]=t.substr(3&e[19]|8,1),e[8]=e[13]=e[18]=e[23]="-",e.join("")},c.exports.returnUTCDate=function(){var e=new Date,t=e.getUTCFullYear(),i=e.getUTCMonth(),r=e.getUTCDate(),o=e.getUTCHours(),n=e.getUTCMinutes(),a=e.getUTCSeconds(),s=e.getUTCMilliseconds();return Date.UTC(t,i,r,o,n,a,s)},c.exports.AliyunEncodeURI=function(e){var t=encodeURIComponent(e);return t=(t=(t=t.replace("+","%2B")).replace("*","%2A")).replace("%7E","~")},c.exports.makesort=function(e,t,i){if(!e)throw new Error("PrismPlayer Error: vid should not be null!");var r=[];for(var o in e)r.push(o);var n=r.sort(),a="",s=n.length;for(o=0;o<s;o++)""==a?a=n[o]+t+e[n[o]]:a+=i+n[o]+t+e[n[o]];return a},c.exports.makeUTF8sort=function(e,t,i){if(!e)throw new Error("PrismPlayer Error: vid should not be null!");var r=[];for(var o in e)r.push(o);var n=r.sort(),a="",s=n.length;for(o=0;o<s;o++){var l=c.exports.AliyunEncodeURI(n[o]),u=c.exports.AliyunEncodeURI(e[n[o]]);""==a?a=l+t+u:a+=i+l+t+u}return a},c.exports.makeChangeSiga=function(e,t,i){if(!e)throw new Error("PrismPlayer Error: vid should not be null!");return i||(i="GET"),o.stringify(r(i+"&"+c.exports.AliyunEncodeURI("/")+"&"+c.exports.AliyunEncodeURI(c.exports.makeUTF8sort(e,"=","&")),t+"&"))},c.exports.ISODateString=function(e){function t(e){return e<10?"0"+e:e}return e.getUTCFullYear()+"-"+t(e.getUTCMonth()+1)+"-"+t(e.getUTCDate())+"T"+t(e.getUTCHours())+":"+t(e.getUTCMinutes())+":"+t(e.getUTCSeconds())+"Z"},c.exports.encPlayAuth=function(e){if(!(e=i.stringify(o.parse(e))))throw new Error("playuth\u53c2\u6570\u89e3\u6790\u4e3a\u7a7a");return JSON.parse(e)},c.exports.encRsa=function(){}},{"crypto-js/enc-base64":126,"crypto-js/enc-utf8":127,"crypto-js/hmac-sha1":128}],81:[function(e,t,i){var l=e("../../lib/io"),u=e("../../lib/constants"),c=e("./signature"),d=e("./util"),p=e("../../lang/index");t.exports.getPlayAuth=function(e,i,r,o){c.randomUUID();var t=c.randomUUID(),n={AccessKeyId:e.accessKeyId,Action:"GetVideoPlayAuth",VideoId:e.vid,AuthTimeout:u.AuthInfoExpired,SecurityToken:e.securityToken,Format:"JSON",Version:"2017-03-21",SignatureMethod:"HMAC-SHA1",SignatureVersion:"1.0",SignatureNonce:t},a=c.makeUTF8sort(n,"=","&")+"&Signature="+c.AliyunEncodeURI(c.makeChangeSiga(n,e.accessKeySecret)),s="https://vod."+e.region+".aliyuncs.com/?"+a;l.get(s,function(e){if(e){var t=JSON.parse(e);i&&i(t.PlayAuth)}else r&&r(d.createError("\u83b7\u53d6\u89c6\u9891\u64ad\u653e\u51ed\u8bc1\u5931\u8d25"))},function(e){if(r){var t={Code:"",Message:p.get("Fetch_Playauth_Error")};try{(t=JSON.parse(e)).Code}catch(e){}r({Code:u.ErrorCode.ServerAPIError,Message:t.Code+"|"+t.Message,sri:t.requestId,display_msg:p.get("Fetch_Playauth_Error",o)})}})}},{"../../lang/index":11,"../../lib/constants":15,"../../lib/io":24,"./signature":80,"./util":82}],82:[function(e,t,i){t.exports.createError=function(e,t){return{requestId:"",code:t||"",message:e}}},{}],83:[function(e,t,i){var l=e("../../lib/io"),p=e("../../lib/constants"),u=e("./signature"),c=e("./util"),d=e("../../config"),h=e("../../lang/index");t.exports.getDataByAuthInfo=function(e,n,a,s){u.randomUUID();var t=u.randomUUID(),i={AccessKeyId:e.accessId,Action:"GetPlayInfo",VideoId:e.vid,Formats:e.format,AuthTimeout:e.authTimeout||p.AuthKeyExpired,Rand:e.rand,SecurityToken:e.stsToken,StreamType:e.mediaType,Format:"JSON",Version:"2017-03-21",SignatureMethod:"HMAC-SHA1",SignatureVersion:"1.0",SignatureNonce:t,PlayerVersion:d.h5Version,Definition:e.definition,Channel:"HTML5"};e.authInfo&&(i.AuthInfo=e.authInfo),e.outputType&&(i.OutputType=e.outputType),e.playConfig&&(i.PlayConfig=JSON.stringify(e.playConfig)),e.reAuthInfo&&(i.ReAuthInfo=JSON.stringify(e.reAuthInfo));var r=u.makeUTF8sort(i,"=","&")+"&Signature="+u.AliyunEncodeURI(u.makeChangeSiga(i,e.accessSecret)),o="https://vod."+e.domainRegion+".aliyuncs.com/?"+r;l.get(o,function(e){if(e){var t=JSON.parse(e),i="",r=t.VideoBase.ThumbnailList;r&&r.Thumbnail&&0<r.Thumbnail.length&&(i=r.Thumbnail[0].URL);var o=function(e,t){for(var i=[],r=[],o=[],n=[],a=e.length-1;0<=a;a--){var s=e[a],l=(c=void 0,(c={}).width=(u=s).Width,c.height=u.Height,c.definition=u.Definition,c.Url=u.PlayURL,c.format=u.Format,c.desc=p.QualityLevels[c.definition],c.encryptionType=p.VodEncryptionType[u.EncryptType],c.plaintext=u.Plaintext,c.rand=u.Rand,c.encrypt=u.Encrypt,c.duration=u.Duration,c);"mp4"==l.format?r.push(l):"mp3"==l.format?o.push(l):"m3u8"==l.format?i.push(l):n.push(l)}var u,c,d=[];return d=0<o.length?o:0<r.length?r:0<i.length?i:n,"asc"==t&&d.reverse(),d}(t.PlayInfoList.PlayInfo,n);a&&a({requestId:t.RequestId,urls:o,thumbnailUrl:i,coverUrl:t.VideoBase.CoverURL})}else s&&s(c.createError("\u70b9\u64ad\u670d\u52a1\u83b7\u53d6\u53d6\u6570\u5931\u8d25"))},function(e){if(s){var t={Code:"",Message:h.get("Error_Vod_Fetch_Urls_Text")};try{t=JSON.parse(e)}catch(e){}s({Code:p.ErrorCode.ServerAPIError,Message:t.Code+"|"+t.Message,sri:t.requestId||""})}})}},{"../../config":5,"../../lang/index":11,"../../lib/constants":15,"../../lib/io":24,"./signature":80,"./util":82}],84:[function(e,t,i){var r=e("./saasplayer"),l=e("../../lib/constants"),o=e("./vod"),u=e("./signature"),n=(e("./authkeyexpiredhandle"),e("./ststoken"),r.extend({init:function(e,t){r.call(this,e,t),this.service=o,this.loadByVod()}}));n.prototype.loadByVod=function(e){var t="",i="",r="",o="",n="";if(this._options.accessKeyId&&this._options.accessKeySecret)t=this._options.accessKeyId,i=this._options.accessKeySecret,r=this._options.securityToken,o=this._options.region,this.log("STARTFETCHDATA",JSON.stringify({it:"sts",pa:{vid:this._options.vid}}));else{try{var a=u.encPlayAuth(this._options.playauth);t=a.AccessKeyId,i=a.AccessKeySecret,r=a.SecurityToken,o=a.Region,n=a.AuthInfo}catch(e){var s={Code:l.ErrorCode.PlayauthDecode,Message:"playauth decoded failed.",displayMessage:"playauth\u89e3\u6790\u9519\u8bef"};return void this._mtsError_message(this,s,this._options.playauth)}this._options.from=a.CustomerId?a.CustomerId:"",this.log("STARTFETCHDATA",JSON.stringify({it:"playAuth",pa:{vid:this._options.vid}}))}this._loadByVodBySTS(t,i,r,o,n,e)},n.prototype.replayByVidAndPlayAuth=function(e,t){this.trigger("error_hide"),this._options.source="",this._options.vid=e,this._options.playauth=t,this._isError=!1,this._duration=0,this._options.cover="",this._vodRetryCount=0,this._clearTimeout(),this.loadByVod(!0)},n.prototype.updateSourcesByVidAndPlayAuth=function(e,t){if(e==this._options.vid){this._options.vid=e,this._options.playauth=t;try{var i=u.encPlayAuth(this._options.playauth)}catch(e){return void console.log("playauth\u89e3\u6790\u9519\u8bef")}var r={vid:e,accessId:i.AccessKeyId,accessSecret:i.AccessKeySecret,stsToken:i.SecurityToken,domainRegion:i.Region,authInfo:i.AuthInfo,playDomain:i.PlayDomain,format:this._options.format,mediaType:this._options.mediaType};this._authKeyExpiredHandle.clearTick();var o=this;this.service.loadData(r,this._options.qualitySort,function(e){o._serverRequestId=e.requestId,0!=e.urls.length&&(o._urls=e.urls),o._authKeyExpiredHandle.tick(l.AuthKeyRefreshExpired)},function(e){console.log(e)})}else console.log("\u4e0d\u80fd\u66f4\u65b0\u5730\u5740\uff0cvid\u548c\u64ad\u653e\u4e2d\u7684\u4e0d\u4e00\u81f4")},n.prototype.reloaduserPlayInfoAndVidRequestMts=function(e,t){this.replayByVidAndPlayAuth(e,t,accessSecret)},n.prototype._loadByVodBySTS=function(e,t,i,r,o,n){var a={vid:this._options.vid,accessId:e,accessSecret:t,stsToken:i,authInfo:o,domainRegion:r,format:this._options.format,mediaType:this._options.mediaType,definition:this._options.definition,defaultDefinition:this._options.defaultDefinition,authTimeout:this._options.authTimeout,outputType:this._options.outputType,playConfig:this._options.playConfig,reAuthInfo:this._options.reAuthInfo};this.loadData(a,n)},t.exports=n},{"../../lib/constants":15,"./authkeyexpiredhandle":75,"./saasplayer":79,"./signature":80,"./ststoken":81,"./vod":83}],85:[function(e,t,i){var o=e("../base/event/eventtype"),r=function(i){this._player=i,this._video=i.tag;var r=this;this._isCreated=!1,this._canPlayTriggered=!1,this._defaultTrack="",i.on(o.Private.ChangeURL,function(){r._isCreated=!1,r._canPlayTriggered=!1,r._defaultTrack=""}),i.on(o.Player.CanPlay,function(){if(!r._player._drm&&!r._canPlayTriggered){var e=r._getTracks();e&&(r._isCreated=!0,i.trigger(o.Player.AudioTrackReady,e),r._notifyDefaultValue(e)),r._canPlayTriggered=!0}}),i.on(o.Player.AudioTrackUpdated,function(e){if(!r._isCreated){var t=r._getTracks(e.paramData.audioTracks);t&&(r._isCreated=!0,i.trigger(o.Player.AudioTrackReady,t),r._notifyDefaultValue(t))}})};r.prototype._notifyDefaultValue=function(e){!this._defaultTrack&&0<e.length&&(this._defaultTrack=e[0]),this._defaultTrack&&this._player.trigger(o.Private.SelectorUpdateList,{type:"audio",text:this._defaultTrack.text})},r.prototype.support=function(){return!!this._video.audioTracks},r.prototype._getTracks=function(e){if(!this.support()&&!e)return null;this._video&&this._video.audioTracks&&(!e||e&&0==e.length)&&(e=this._video.audioTracks);for(var t=[],i=e?e.length:0,r=0;r<i;r++){var o=e[r],n={value:o.id,text:o.label||o.name||o.language};(o["default"]||o.enabled)&&(this._defaultTrack=n),t.push(n)}return t},r.prototype["switch"]=function(e){if(this._player._hls)this._player._hls.audioTrack=1*e;else for(var t=this._video.audioTracks?this._video.audioTracks.length:0,i=0;i<t;i++){var r=this._video.audioTracks[i];r.id==e?r.enabled=!0:r.enabled=!1}},r.prototype.dispose=function(){this._player=null},t.exports=r},{"../base/event/eventtype":43}],86:[function(e,t,i){var r=e("../base/event/eventtype"),o=e("../../lib/dom"),n=e("../../lib/ua"),l=e("../../lib/cookie"),u=e("../../lib/constants"),a=function(e){this._video=e.tag,this._player=e,this._isCreated=!1,this._backupCC="",this.tracks=[],this._defaultTrack="",this._currentValue="";var t=this;e.on(r.Private.ChangeURL,function(){t._disabledTracks(),t._isCreated=!1,t._defaultTrack=""}),e.on(r.Player.CanPlay,function(){t._player._drm||(t._isCreated||(t.tracks=t._getTracks(),e.trigger(r.Player.TextTrackReady,t.tracks)),t._isCreated&&!t._player._setDefaultCC||!t._defaultTrack||(e.trigger(r.Private.SelectorUpdateList,{type:"cc",text:t._defaultTrack.text}),t["switch"](t._defaultTrack.value),t._player._setDefaultCC=!1,t._isCreated=!0))}),this._adaptiveCueStype(),e.on(r.Player.RequestFullScreen,function(){t._adaptiveCueStype()}),e.on(r.Player.CancelFullScreen,function(){t._adaptiveCueStype()})};a.prototype._adaptiveCueStype=function(){var e=-10;if(n.IS_SAFARI){e=-65;var t=this._player.fullscreenService;t&&t.getIsFullScreen()&&(e=-95)}else n.IS_MOBILE&&(e=-30);o.addCssByStyle("video::-webkit-media-text-track-container{transform: translateY("+e+"px) !important;}")},a.prototype.close=function(){for(var e=this._video&&this._video.textTracks?this._video.textTracks.length:0,t=0;t<e;t++){var i=this._video.textTracks[t];"expired"!=i.mode&&("showing"==i.mode&&(this._backupCC=i),i.mode="disabled")}},a.prototype.open=function(){if(this.tracks&&!(this.tracks.length<2)){var e=this._backupCC?this._backupCC.language:"",t=this._backupCC?this._backupCC.label:"";return e||(e=this.tracks[1].value,t=this.tracks[1].text),this["switch"](e),t}},a.prototype.getCurrentSubtitle=function(){return this._currentValue},a.prototype._getTracks=function(){if(this._player._drm)return[];var e=this._video&&this._video.textTracks?this._video.textTracks.length:0;this._defaultTrack={value:"off",text:"Off"};for(var t=[this._defaultTrack],i=l.get(u.SelectedCC),r="",o=!1,n=0;n<e;n++){var a=this._video.textTracks[n];if("expired"!=a.mode&&"subtitles"==a.kind){var s={value:a.language,text:a.label};a["default"]&&(this._defaultTrack=s,o=!0),s.value==i&&(r=s),t.push(s)}}return!o&&r&&(this._defaultTrack=r),t},a.prototype._disabledTracks=function(){for(var e=this._video&&this._video.textTracks?this._video.textTracks.length:0,t=0;t<e;t++){this._video.textTracks[t].mode="expired"}},a.prototype["switch"]=function(e){if(this.close(),"off"!=e){for(var t=this._video&&this._video.textTracks?this._video.textTracks.length:0,i=0;i<t;i++){var r=this._video.textTracks[i];r.language===e&&"expired"!=r.mode&&(this._video.textTracks[i].mode="showing")}this._currentValue=e}else this.close()},a.prototype.dispose=function(){this._player=null},t.exports=a},{"../../lib/constants":15,"../../lib/cookie":16,"../../lib/dom":18,"../../lib/ua":31,"../base/event/eventtype":43}],87:[function(e,t,i){var r=e("../../lib/playerutil");t.exports=[{service:e("./ccservice"),name:"_ccService",condition:!0},{service:e("./audiotrackservice"),name:"_audioTrackService"},{service:e("./qualityservice"),name:"_qualityService"},{service:e("./fullscreenservice"),name:"fullscreenService",condition:function(){return!0}},{service:e("./liveshiftservice"),name:"_liveshiftService",condition:function(){var e=this.options();return r.isLiveShift(e)}},{service:e("./thumbnailservice"),name:"_thumbnailService",condition:function(){return!0}},{service:e("./progressmarkerservice"),name:"_progressMarkerService",condition:function(){return!0}}]},{"../../lib/playerutil":29,"./audiotrackservice":85,"./ccservice":86,"./fullscreenservice":88,"./liveshiftservice":89,"./progressmarkerservice":90,"./qualityservice":91,"./thumbnailservice":92}],88:[function(e,t,i){var o=e("../../lib/ua"),n=e("../../lib/dom"),a=e("../../lib/event"),s=e("../base/event/eventtype"),r=e("../base/x5play"),l=e("../../lang/index"),u=function(){var e;n.createEl("div");var t=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror","fullScreen"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror","webkitfullScreen"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror","webkitIsFullScreen"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror","mozFullScreen"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError","MSFullScreen"]],i=!(e={});if(o.IS_IOS&&(e.requestFn="webkitEnterFullscreen",e.cancelFn="webkitExitFullscreen",e.fullscreenElement="webkitFullscreenElement",e.eventName="webkitfullscreenchange",e.isFullScreen="webkitDisplayingFullscreen",document[e.requestFn]&&(i=!0)),!i){for(var r=0;r<5;r++)if(t[r][1]in document){e.requestFn=t[r][0],e.cancelFn=t[r][1],e.fullscreenElement=t[r][2],e.eventName=t[r][4],e.isFullScreen=t[r][6];break}"requestFullscreen"in document?e.requestFn="requestFullscreen":"webkitRequestFullscreen"in document?e.requestFn="webkitRequestFullscreen":"webkitRequestFullScreen"in document?e.requestFn="webkitRequestFullScreen":"webkitEnterFullscreen"in document?e.requestFn="webkitEnterFullscreen":"mozRequestFullScreen"in document?e.requestFn="mozRequestFullScreen":"msRequestFullscreen"in document&&(e.requestFn="msRequestFullscreen"),"fullscreenchange"in document?e.eventName="fullscreenchange":"webkitfullscreenchange"in document?e.eventName="webkitfullscreenchange":"webkitfullscreenchange"in document?e.eventName="webkitfullscreenchange":"webkitfullscreenchange"in document?e.eventName="webkitfullscreenchange":"mozfullscreenchange"in document?e.eventName="mozfullscreenchange":"MSFullscreenChange"in document&&(e.eventName="MSFullscreenChange"),"fullScreen"in document?e.isFullScreen="fullScreen":"webkitfullScreen"in document?e.isFullScreen="webkitfullScreen":"webkitIsFullScreen"in document?e.isFullScreen="webkitIsFullScreen":"webkitDisplayingFullscreen"in document?e.isFullScreen="webkitDisplayingFullscreen":"mozFullScreen"in document?e.isFullScreen="mozFullScreen":"mozfullScreen"in document?e.isFullScreen="mozfullScreen":"MSFullScreen"in document&&(e.isFullScreen="MSFullScreen"),"fullscreenElement"in document?e.fullscreenElement="fullscreenElement":"webkitFullscreenElement"in document?e.fullscreenElement="webkitFullscreenElement":"webkitFullScreenElement"in document?e.fullscreenElement="webkitFullScreenElement":"mozFullScreenElement"in document?e.fullscreenElement="mozFullScreenElement":"msFullscreenElement"in document?e.fullscreenElement="msFullscreenElement":"MSFullscreenElement"in document&&(e.fullscreenElement="MSFullscreenElement")}return e.requestFn?e:null}(),c=function(e){this.isFullWindow=!1,this.isFullScreen=!1,this.isFullScreenChanged=!1,this._requestFullScreenTimer=null,this._cancelFullScreenTimer=null,this._player=e;var r=this,o=u;this._fullscreenChanged=function(e){if(null!=r._player){var t=document[o.isFullScreen];if(void 0!==t)r.isFullScreen=t;else{var i=document[o.fullscreenElement];r.isFullScreen=null!=i}(r.isFullScreenChanged=!0)===r.isFullScreen?r._player.trigger(s.Player.RequestFullScreen):r._player.trigger(s.Player.CancelFullScreen)}},o&&a.on(document,o.eventName,this._fullscreenChanged)};c.prototype.requestFullScreen=function(){if(!r.isAndroidX5()||!this._player.paused()){var e=u,t=this._player.el(),i=this;if(o.IS_IOS)return(t=this._player.tag)[e.requestFn](),i._player.trigger(s.Player.RequestFullScreen),this;this.isFullScreen=!0,this.isFullScreenChanged=!1,this._requestFullScreenTimer=null,this._cancelFullScreenTimer||clearTimeout(this._cancelFullScreenTimer);i=this;return e&&!this._player._options.enableMockFullscreen?(t[e.requestFn](),this._requestFullScreenTimer=setTimeout(function(){i.isFullScreenChanged||(d.apply(i),i._player.trigger(s.Player.RequestFullScreen)),i._requestFullScreenTimer=null},1e3)):(d.apply(i),this._player.trigger(s.Player.RequestFullScreen)),this._player}this._player.trigger(s.Private.Info_Show,l.get("Play_Before_Fullscreen"))},c.prototype.cancelFullScreen=function(){var e=u;this.isFullScreen=!1,this.isFullScreenChanged=!1,this._cancelFullScreenTimer=null,this._requestFullScreenTimer||clearTimeout(this._requestFullScreenTimer);var t=this;return e&&!this._player._options.enableMockFullscreen?(document[e.cancelFn](),t._cancelFullScreenTimer=setTimeout(function(){t.isFullScreenChanged||(p.apply(t),t._player.trigger(s.Player.CancelFullScreen)),t._cancelFullScreenTimer=null},500)):(p.apply(t),this._player.trigger(s.Player.CancelFullScreen)),this._player.tag.paused||this._player.trigger(s.Player.Play),this._player},c.prototype.getIsFullScreen=function(){return this.isFullScreen},c.prototype.dispose=function(){this._player=null;var e=u;a.off(document,e.eventName,this._fullscreenChanged)};var d=function(){this.isFullWindow=!0,this.docOrigOverflow=document.documentElement.style.overflow,document.documentElement.style.overflow="hidden",n.addClass(document.getElementsByTagName("body")[0],"prism-full-window")},p=function(){this.isFullWindow=!1,document.documentElement.style.overflow=this.docOrigOverflow,n.removeClass(document.getElementsByTagName("body")[0],"prism-full-window")};t.exports=c},{"../../lang/index":11,"../../lib/dom":18,"../../lib/event":19,"../../lib/ua":31,"../base/event/eventtype":43,"../base/x5play":67}],89:[function(e,t,i){var o=e("../../lib/io"),n=e("../../lib/util"),a=e("../../lib/playerUtil"),s=e("../../lang/index"),l=(e("../flv/flvinjector"),e("../hls/hlsinjector")),u=e("../../lib/constants"),c=e("../base/event/eventtype"),d=(e("../../lib/url"),function(e,t){if(e&&e){var i=new Date(e),r=new Date(t),o=r.valueOf()/1e3-i.valueOf()/1e3;return{start:i,end:r,endDisplay:n.extractTime(r),totalTime:o}}}),p=function(e,t){t&&(e.currentTimestamp=t,e.currentTime=n.convertToDate(t),e.currentTimeDisplay=n.extractTime(e.currentTime),e.liveShiftStart=e.liveTimeRange.start,e.liveShiftEnd=e.liveTimeRange.end,e.liveShiftStartDisplay=n.extractTime(e.liveShiftStart),e.liveShiftEndDisplay=n.extractTime(e.liveShiftEnd),e.availableLiveShiftTime=t-e.liveShiftStart.valueOf()/1e3,e.timestampStart=n.convertToTimestamp(e.liveShiftStart),e.timestampEnd,n.convertToTimestamp(e.liveShiftEnd))},r=function(t){this._player=t,this._isLiveShift=!1;var r=this,e=function(){var e=t._options.source;this._originalPlayUrl=e,this._liveShiftUrl=t._options.liveTimeShiftUrl,this.liveTimeRange=d(t._options.liveStartTime,t._options.liveOverTime),this.availableLiveShiftTime=0,this.seekTime=-1};e.call(this),t.liveShiftSerivce={setLiveTimeRange:function(e,t){r.setLiveTimeRange(e,t)},queryLiveShift:function(e,t,i){r.queryLiveShift(e,t,i)}},t.on(c.Private.ChangeURL,function(){e.call(r)})};r.prototype.validate=function(){return!(this.liveTimeRange.start>=this.liveTimeRange.end)},r.prototype.switchToLive=function(){var e=that._player._options.recreatePlayer;e&&this._isLiveShift&&(this._player.dispose(),setTimeout(function(){e()},1e3),this._isLiveShift=!1)},r.prototype.getBaseTime=function(){this.liveShiftStartDisplay;return-1==this.seekTime?n.parseTime(this.currentTimeDisplay):n.parseTime(this.liveShiftStartDisplay)+this.seekTime},r.prototype.getSourceUrl=function(e,t){var i=this._originalPlayUrl;return this.availableLiveShiftTime<=e?i:(this._isLiveShift=!0,(e=parseInt(e))<=5&&(e=5),(i=this._switchLiveShiftPlayer(t))&&(i=i.replace("lhs_offset_unix_s_0","z")),i=-1==i.indexOf("?")?i+"?lhs_offset_unix_s_0="+e:i+"&lhs_offset_unix_s_0="+e)},r.prototype._switchLiveShiftPlayer=function(e){var t=this._originalPlayUrl,i=this._player._options.liveShiftSource,r=this._player._options.source;if(a.isHls(r))t=r;else if(a.isFlv(t)&&i&&a.isHls(i)){this._player._flv&&this._player._destroyFlv();var o=this._player._superType,n=this._player._Type;return this._player._options._autoplay=!0,l.inject(this._player,n,o,this._player._options,"",!0),i}return t},r.prototype.getTimeline=function(i,r){if(this._player.trigger(c.Private.LiveShiftQueryCompleted),!this._liveShiftUrl)return p(this,(new Date).valueOf()/1e3),void(i&&i());var o=this;this.queryLiveShift(this._liveShiftUrl,function(e){if(e){var t=e;0==t.retCode?(p(o,t.content.current),i&&i()):r({Code:u.ErrorCode.ServerAPIError,Message:t.retCode+"|"+t.description+"|"+t.content})}else console.log("\u83b7\u53d6\u76f4\u64ad\u65f6\u79fb\u6570\u636e\u5931\u8d25")},function(e){if(r&&e){var t={};if(e){if(-1<e.indexOf("403 Forbidden"))t.Code=u.ErrorCode.AuthKeyExpired,t.Message="Query liveshift failed:"+s.get("Error_AuthKey_Text");else{var i;t=e;try{i=JSON.parse(e)}catch(e){}i&&(t.Code=u.ErrorCode.ServerAPIError,t.Message=i.retCode+"|"+i.description+"|"+i.content)}r(t)}}})},r.prototype.start=function(e,t){var i=this,r=function(){i._loopHandler=setTimeout(function(){i.getTimeline(function(){},t),r()},e)};i.getTimeline(function(e){i._localLiveTimeHandler||i.tickLocalLiveTime()},t),r()},r.prototype.tickLocalLiveTime=function(){var e=this,t=function(){e._localLiveTimeHandler=setTimeout(function(){e.currentTimestamp++,p(e,e.currentTimestamp),e._player.trigger(c.Private.LiveShiftQueryCompleted),t()},1e3)};t()},r.prototype.setLiveTimeRange=function(e,t){e||(e=this._player._options.liveStartTime),t||(t=this._player._options.liveOverTime),this.liveTimeRange=d(e,t),p(this,this.currentTimestamp),this._player.trigger(c.Private.LiveShiftQueryCompleted)},r.prototype.queryLiveShift=function(e,i,r){o.get(e,function(e){if(e){var t=JSON.parse(e);0==t.retCode?i&&i(t):r&&r(t)}else r&&r(e)},function(e){r&&r(e)})},r.prototype.stop=function(e){this._loopHandler&&(clearTimeout(this._loopHandler),this._loopHandler=null)},r.prototype.dispose=function(){this.stop(),this._localLiveTimeHandler&&(clearTimeout(this._localLiveTimeHandler),this._localLiveTimeHandler=null),this._player=null},t.exports=r},{"../../lang/index":11,"../../lib/constants":15,"../../lib/io":24,"../../lib/playerUtil":28,"../../lib/url":32,"../../lib/util":33,"../base/event/eventtype":43,"../flv/flvinjector":71,"../hls/hlsinjector":73}],90:[function(e,t,i){var c=e("../base/event/eventtype"),d=(e("../../lang/index"),e("../../lib/hls/hlsparse"),e("../../lib/object"),e("../../lib/dom")),p=e("../../lib/event"),r=(e("../../lib/playerutil"),function(l){this.progressMarkers=[],this._player=l;var u=this;l.on(c.Private.ProgressMarkerLoaded,function(e){var t=e.paramData;t&&0<t.length&&(u.progressMarkers=t)});var i=function(){var e=document.querySelector("#"+l.id()+" .prism-progress-marker");if(e){e.innerHTML="";var n=u._player.getDuration();if(0<n){for(var t=0;t<u.progressMarkers.length;t++){var i=u.progressMarkers[t];if(void 0!==i.offset&&""!==i.offset){var r=document.createElement("div");d.addClass(r,"prism-marker-dot");var o=u.progressMarkers[t].offset/n;r.style.left=100*o+"%",e.appendChild(r);var a=function(e,t){return function(){u._player.trigger(c.Private.MarkerTextShow,{left:e,progressMarker:t})}}(o,u.progressMarkers[t]);p.on(r,"mouseover",a),p.on(r,"mouseout",function(e){u._player.trigger(c.Private.MarkerTextHide)}),p.on(r,"touchstart",a),p.on(r,"mousemove",function(e){e.preventDefault()}),p.on(r,"touchmove",function(e){e.preventDefault()})}}var s=document.querySelector("#"+u._player.id()+" .prism-progress-cursor");u._player.on(s,"click",function(e){for(var t=u._player.getCurrentTime(),i=0;i<u.progressMarkers.length;i++){var r=u.progressMarkers[i];if(r&&(t-1<r.offset&&r.offset<t+1)){var o=r.offset/n*100+"%";u._player.trigger(c.Private.MarkerTextShow,{left:o,progressMarker:r})}}})}}};l.on(c.Private.ProgressMarkerChanged,function(e){var t=e.paramData;t&&0<t.length&&(u.progressMarkers=t,i())}),l.on(c.Video.LoadedMetadata,i)});r.prototype.dispose=function(){this._player=null,this.progressMarkers=[]},t.exports=r},{"../../lang/index":11,"../../lib/dom":18,"../../lib/event":19,"../../lib/hls/hlsparse":23,"../../lib/object":26,"../../lib/playerutil":29,"../base/event/eventtype":43}],91:[function(e,t,i){var l=e("../base/event/eventtype"),u=e("../../lang/index"),r=e("../../lib/hls/hlsparse"),c=e("../../lib/object"),o=e("../../lib/playerutil"),n=function(a){this.levels=[],this._player=a;var s=this;a.on(l.Player.LevelsLoaded,function(e){if(0<s.levels.length&&(s.levels=[]),(e=e.paramData)&&e.levels){for(var t=e.levels.length-1;-1<t;t--){var i=e.levels[t];if(i.url&&0<i.url.length&&i.attrs&&i.attrs.BANDWIDTH){var r=i.url;c.isArray(r)&&(r=r[0]);var o={Url:r,desc:i.height||i.width,bitrate:i.bitrate,resolution:i.attrs.RESOLUTION,bandwidth:i.attrs.BANDWIDTH};s.levels.push(o)}}if(0<s.levels.length){var n=u.get("Auto");s.levels.push({Url:e.url,desc:n}),a.trigger(l.Private.SelectorUpdateList,{type:"quality",text:n})}}}),a.on(l.Video.LoadStart,function(){if(a._options){var e=a._options.source;!a._hls&&e&&o.isHls(e)&&s.loadLevels(e)}})};(n.prototype={loadLevels:function(e){var t=new r,i=this;t.load(e,function(e){i._player.trigger(l.Player.LevelsLoaded,e)})}}).dispose=function(){this._player=null},t.exports=n},{"../../lang/index":11,"../../lib/hls/hlsparse":23,"../../lib/object":26,"../../lib/playerutil":29,"../base/event/eventtype":43}],92:[function(e,t,i){var r=e("../../lib/io"),o=e("../../lib/url"),n=e("../../lib/vtt/thumbnailvtt"),a=e("../base/event/eventtype"),s=function(e){this._player=e,this.cues=[],this.baseUrl="";var t=this;e.on(a.Private.ChangeURL,function(){t.cues=[],t.baseUrl=""})};(s.prototype={get:function(e){var t=this;this.baseUrl=function(e){var t=o.parseUrl(e);if(t){var i=t.segments;if(i&&0<i.length){var r=i[i.length-1];baseUrl=e.replace(r,"")}}return baseUrl}(e),r.get(e,function(e){e&&n.parse(e,function(e){t.cues=e,t._player.trigger(a.Private.ThumbnailLoaded,e)})},function(e){console.log(e)})},findAvailableCue:function(e){for(var t=this.cues.length,i=0;i<t;i++){var r=this.cues[i];if(r.startTime<=e&&e<r.endTime)return r}return null},makeUrl:function(e){return-1==e.indexOf("://")&&(e=this.baseUrl+e),e}}).dispose=function(){this._player=null},t.exports=s},{"../../lib/io":24,"../../lib/url":32,"../../lib/vtt/thumbnailvtt":34,"../base/event/eventtype":43}],93:[function(e,t,i){var a=e("../base/player"),s=e("../hls/hlsinjector"),r=e("../../lib/io"),o=a.extend({init:function(e,t){a.call(this,e,t),this.loadVideoInfo()}});o.prototype.loadVideoInfo=function(i){this.trigger("error_hide");var o=this._options.vid,n=this;if(!o)throw new Error("PrismPlayer Error: vid should not be null!");r.jsonp("//tv.taobao.com/player/json/getBaseVideoInfo.do?vid="+o+"&playerType=3",function(e){if(1!==e.status||!e.data.source)throw new Error("PrismPlayer Error: #vid:"+o+" cannot find video resource!");var t,r=-1;_.each(e.data.source,function(e,t){var i=+e.substring(1);r<i&&(r=i)}),t=e.data.source["v"+r],t=_.unescape(t),n._options.source=t,s.inject(n,TaobaoTVPlayer,a.prototype,n._options),n.initPlay(),i&&i()},function(){throw new Error("PrismPlayer Error: network error!")})},o.prototype.loadByVid=function(e){this._options.vid=e;var t=this;if(!e)throw new Error("PrismPlayer Error: vid should not be null!");this._monitor&&this._monitor.updateVideoInfo({video_id:e,album_id:data.data.baseInfo.aid,source:src,from:t._options.from}),this._options.autoplay=!0,this.loadVideoInfo(function(){t.cover&&t._options.autoplay&&(Dom.css(t.cover,"display","none"),delete t.cover),t.tag.play()})},t.exports=o},{"../../lib/io":24,"../base/player":62,"../hls/hlsinjector":73}],94:[function(e,t,i){var r=e("../lib/oo"),o=e("../lib/data"),a=e("../lib/object"),n=e("../lib/dom"),s=e("../lib/event"),l=e("../lib/function"),u=e("../lib/layout"),c=(e("../lib/constants"),e("../lib/util"),e("../player/base/event/eventtype")),d=e("./component/util"),p=r.extend({init:function(e,t){var i=this;this._player=e,this._eventState="",this._options=a.copy(t),this._el=this.createEl();var r=e.id;"function"==typeof e.id&&(r=e.id()),this._id=r+"_component_"+o.guid(),this._children=[],this._childIndex={},this._player.on(c.Private.UiH5Ready,function(){i.renderUI(),i.syncUI(),i.bindEvent()})}});p.prototype.renderUI=function(){u.render(this.el(),this.options()),this.el().id=this.id()},p.prototype.syncUI=function(){},p.prototype.bindEvent=function(){},p.prototype.createEl=function(e,t){return n.createEl(e,t)},p.prototype.options=function(e){return void 0===e?this._options:this._options=a.merge(this._options,e)},p.prototype.el=function(){return this._el},p.prototype._contentEl,p.prototype.player=function(){return this._player},p.prototype.contentEl=function(){return this._contentEl||this._el},p.prototype._id,p.prototype.id=function(){return this._id},p.prototype.getId=function(){return this._id},p.prototype.addChild=function(e,t){var i;if("string"==typeof e){if(!this._player.UI[e])return;i=new this._player.UI[e](this._player,t)}else i=e;if(this._children.push(i),"function"==typeof i.id&&(this._childIndex[i.id()]=i),"function"==typeof i.el&&i.el()){var r=i.el();r.id=i.id(),this.contentEl().appendChild(r)}return i},p.prototype.removeChild=function(e){if(e&&this._children){for(var t=!1,i=this._children.length-1;0<=i;i--)if(this._children[i]===e){t=!0,this._children.splice(i,1);break}if(t){this._childIndex[e.id]=null;var r=e.el();r&&r.parentNode===this.contentEl()&&this.contentEl().removeChild(e.el())}}},p.prototype.initChildren=function(){var i,e,t,r,o;if(e=(i=this).options().children)if(a.isArray(e))for(var n=0;n<e.length;n++)o="string"==typeof(t=e[n])?(r=t,{}):(r=t.name,t),i.addChild(r,o);else a.each(e,function(e,t){!1!==t&&i.addChild(e,t)})},p.prototype.on=function(e,t){return s.on(this._el,e,l.bind(this,t)),this},p.prototype.off=function(e,t){return s.off(this._el,e,t),this},p.prototype.one=function(e,t){return s.one(this._el,e,l.bind(this,t)),this},p.prototype.trigger=function(e,t){if(this._el)return(t||0==t)&&(this._el.paramData=t),this._eventState=e,s.trigger(this._el,e),this},p.prototype.off=function(e){return s.off(this._el,e),this},p.prototype.addClass=function(e){return n.addClass(this._el,e),this},p.prototype.removeClass=function(e){return n.removeClass(this._el,e),this},p.prototype.show=function(){return this._el.style.display="block",this},p.prototype.hide=function(){return this._el.style.display="none",this},p.prototype.destroy=function(){if(this.trigger({type:"destroy",bubbles:!1}),this._children)for(var e=this._children.length-1;0<=e;e--)this._children[e].destroy&&this._children[e].destroy();"function"==typeof this.disposeUI&&this.disposeUI(),this.children_=null,this.childIndex_=null,this.off(),this._el.parentNode&&this._el.id!=this._player.id()&&this._el.parentNode.removeChild(this._el),o.removeData(this._el),this._el=null},p.prototype.registerControlBarTooltip=d.registerTooltipEvent,t.exports=p},{"../lib/constants":15,"../lib/data":17,"../lib/dom":18,"../lib/event":19,"../lib/function":20,"../lib/layout":25,"../lib/object":26,"../lib/oo":27,"../lib/util":33,"../player/base/event/eventtype":43,"./component/util":121}],95:[function(e,t,i){var r=e("../component"),o=e("../../lib/dom"),n=e("../../lib/event"),a=e("../../player/base/event/eventtype"),s=e("../../player/base/plugin/status"),l=r.extend({init:function(e,t){r.call(this,e,t),this.addClass(t.className||"prism-big-play-btn")},createEl:function(){var e=r.prototype.createEl.call(this,"div");return e.innerHTML='<div class="outter"></div>',e},bindEvent:function(){var t=this;this._player.on(a.Player.Play,function(){t.addClass("playing"),t.removeClass("pause"),t._hide()}),this._player.on(a.Player.Pause,function(){if(!t._player._switchSourcing){t.removeClass("playing"),t.addClass("pause");var e=t._player._status;e!=s.ended&&e!=s.error&&e!=s.playing&&t._show()}});var e=document.querySelector("#"+t.id()+" .outter");n.on(this.el(),"mouseover",function(){o.addClass(e,"big-playbtn-hover-animation")}),n.on(this.el(),"mouseout",function(){o.removeClass(e,"big-playbtn-hover-animation")}),this.on(a.Private.PlayClick,function(){if(t._player.paused()){var e=t._player.getCurrentTime();(t._player.getDuration()<=e||t._player._ended||t._player.exceedPreviewTime(e))&&t._player.seek(0),t._player.play(!0)}else t._player.pause(!0)}),this._player.on(a.Private.Play_Btn_Show,function(){t._show()}),this._player.on(a.Private.Play_Btn_Hide,function(){t._hide()})},_show:function(){o.css(this.el(),"display","block")},_hide:function(){o.css(this.el(),"display","none")}});t.exports=l},{"../../lib/dom":18,"../../lib/event":19,"../../player/base/event/eventtype":43,"../../player/base/plugin/status":66,"../component":94}],96:[function(e,t,i){var r=e("../component"),o=e("../../lib/dom"),n=e("./util"),a=e("../../lang/index"),s=e("../../player/base/event/eventtype"),l=r.extend({init:function(e,t){this.isOpened=!1,r.call(this,e,t),this.addClass(t.className||"prism-cc-btn")},createEl:function(){return r.prototype.createEl.call(this,"div")},bindEvent:function(){var i=this;this.on("click",function(){o.addClass(i._el,"disabled");var e="on",t="";i.isOpened?(i._player._ccService.close(),e="off"):t=i._player._ccService.open(),i.isOpened=!i.isOpened,i._player.trigger(s.Private.CCStateChanged,{value:e,lang:t}),i.disabledHandler&&clearTimeout(i.disabledHandler),i.disabledHandler=setTimeout(function(){o.removeClass(i._el,"disabled")},1e3),i._player.trigger(s.Private.MarkerTextHide)}),this._player.on(s.Private.CCChanged,function(e){var t=e.paramData;i.isOpened="off"!=t}),n.registerTooltipEvent.call(this,this.el(),function(){return i.isOpened?a.get("CloseSubtitle"):a.get("OpenSubtitle")})},disposeUI:function(){this.disabledHandler&&(clearTimeout(this.disabledHandler),this.disabledHandler=null)}});t.exports=l},{"../../lang/index":11,"../../lib/dom":18,"../../player/base/event/eventtype":43,"../component":94,"./util":121}],97:[function(e,t,i){var r=e("../component"),n=e("../../player/base/event/eventtype"),a=e("../../lib/event"),s=e("../../lib/dom"),o=r.extend({init:function(e,t){r.call(this,e,t),this.addClass(t.className||"prism-controlbar"),this.initChildren(),this.onEvent()},createEl:function(){var e=r.prototype.createEl.call(this);return e.innerHTML='<div class="prism-controlbar-bg"></div>',e},onEvent:function(){var i=this.player(),e=i.options(),r=this;a.on(this._el,"mouseover",function(){var e=document.querySelector("#"+r.id()+" .prism-progress-cursor");s.css(e,"display","block")}),a.on(this._el,"mouseout",function(e){var t=document.querySelector("#"+r.id()+" .prism-progress-cursor");s.css(t,"display","none"),i.trigger(n.Private.ThumbnailHide)}),this.timer=null;var t=e.controlBarVisibility;if(1==e.controlBarForOver&&(t="hover"),"hover"==t){r.hide();var o=function(){r._hideHandler&&clearTimeout(r._hideHandler),r._show(),i.fullscreenService.getIsFullScreen()&&r._hide()};i.on(n.Private.MouseOver,function(){o()}),a.on(this._player.tag,"click",function(e){e&&e.target==e.currentTarget&&o()}),a.on(this._player.tag,"touchstart",function(e){e&&e.target==e.currentTarget&&o()}),i.on(n.Private.MouseOut,function(){r._hideHandler=setTimeout(function(){r.hide(),i.trigger(n.Private.HideBar),i.trigger(n.Private.VolumeVisibilityChange,""),i.trigger(n.Private.SettingListHide)})})}else"click"==t?(i.on(n.Private.Click,function(e){i._isError||(e.preventDefault(),e.stopPropagation(),r._show(),r._hide())}),i.on(n.Player.Ready,function(){r._hide()}),i.on(n.Private.TouchStart,function(){r._show()}),i.on(n.Private.TouchMove,function(){r._show()}),i.on(n.Private.TouchEnd,function(){r._hide()})):r._show()},_show:function(){this.show(),this._player.trigger(n.Private.ShowBar),this.timer&&(clearTimeout(this.timer),this.timer=null)},_hide:function(){var e=this,t=this.player().options().showBarTime;this.timer=setTimeout(function(){e.hide(),e._player.trigger(n.Private.HideBar),e._player.trigger(n.Private.VolumeVisibilityChange,""),e._player.trigger(n.Private.SettingListHide)},t)},disposeUI:function(){this.timer&&(clearTimeout(this.timer),this.timer=null),this._hideHandler&&(clearTimeout(this._hideHandler),this._hideHandler=null)}});t.exports=o},{"../../lib/dom":18,"../../lib/event":19,"../../player/base/event/eventtype":43,"../component":94}],98:[function(e,t,i){var r=e("../component"),o=e("../../lib/dom"),n=e("../../player/base/event/eventtype"),a=r.extend({init:function(e,t){r.call(this,e,t),this.addClass(t.className||"prism-cover")},createEl:function(){var e=r.prototype.createEl.call(this,"div"),t=this.options().cover;return t?e.style.backgroundImage="url("+t+")":o.css(e,"display","none"),e},_hide:function(e){var t=document.querySelector("#"+this.id()+" .prism-cover");t&&o.css(t,"display","none")},_show:function(e){var t=document.querySelector("#"+this.id()+" .prism-cover");t&&o.css(t,"display","block")},bindEvent:function(){this._player.on(n.Private.Cover_Show,this._show),this._player.on(n.Private.Cover_Hide,this._hide)}});t.exports=a},{"../../lib/dom":18,"../../player/base/event/eventtype":43,"../component":94}],99:[function(e,t,i){var r=e("../component"),h=e("../../lib/util"),f=e("../../lib/dom"),o=e("../../lib/event"),n=e("../../lib/ua"),_=e("../../lang/index"),a=e("../../player/base/event/eventtype"),s=r.extend({init:function(e,t){r.call(this,e,t),this.className=t.className?t.className:"prism-ErrorMessage",this.addClass(this.className)},createEl:function(){var e=r.prototype.createEl.call(this,"div");return e.innerHTML="<div class='prism-error-content'><p></p></div><div class='prism-error-operation'><a class='prism-button prism-button-refresh'>"+_.get("Refresh_Text")+"</a><a class='prism-button prism-button-retry'  target='_blank'>"+_.get("Retry")+"</a><a class='prism-button prism-button-orange'  target='_blank'>"+_.get("Detection_Text")+"</a></div><div class='prism-detect-info prism-center'><p class='errorCode'><span class='info-label'>code\uff1a</span><span class='info-content'></span></p><p class='vid'><span class='info-label'>vid:</span><span class='info-content'></span></p><p class='uuid'><span class='info-label'>uuid:</span><span class='info-content'></span></p><p class='requestId'><span class='info-label'>requestId:</span><span class='info-content'></span></p><p class='dateTime'><span class='info-label'>"+_.get("Play_DateTime")+"\uff1a</span><span class='info-content'></span></p></div>",e},bindEvent:function(){var i=this;i._player.on(a.Private.Error_Show,function(e){var t=null;i._player.getMonitorInfo&&(t=i._player.getMonitorInfo()),i._show(e,t)}),i._player.on(a.Private.Error_Hide,function(){i._hide()});var e=document.querySelector("#"+i.id()+" .prism-button-refresh");if(o.on(e,"click",function(){location.reload(!0)}),n.IS_MOBILE){e=document.querySelector("#"+i.id()+" .prism-detect-info");f.addClass(e,"prism-width90")}var t=document.querySelector("#"+i.id()+" .prism-button-retry");o.on(t,"click",function(){var e=i._player.getCurrentTime(),t=i._player._options.source;i._player._setDefaultCC=!0,i._player._loadByUrlInner(t,e,!0)})},_show:function(e,t){var i=e.paramData,r="",o="";i.mediaId&&(r=i.mediaId);var n=document.querySelector("#"+this.id()+" .prism-button-orange");if(n){if(t&&this._player._options.diagnosisButtonVisible){t.vu?o=decodeURIComponent(t.vu):f.css(n,"display","none");var a="//player.alicdn.com/detection.html?from=h5&vid="+r+"&source="+(o?encodeURIComponent(o):"")+"&uuid="+t.uuid+"&lang="+_.getCurrentLanguage();n&&(n.href=a)}else f.css(n,"display","none");var s=i.display_msg||i.error_msg;document.querySelector("#"+this.id()+" .prism-error-content p").innerHTML=s,document.querySelector("#"+this.id()+" .errorCode .info-content").innerText=i.error_code;var l=document.querySelector("#"+this.id()+" .vid");if(i.mediaId?(f.css(l,"display","block"),document.querySelector("#"+this.id()+" .vid .info-content").innerText=i.mediaId):f.css(l,"display","none"),i.uuid)document.querySelector("#"+this.id()+" .uuid .info-content").innerText=i.uuid;else{var u=document.querySelector("#"+this.id()+" .uuid");f.css(u,"display","none")}if(i.requestId)document.querySelector("#"+this.id()+" .requestId .info-content").innerText=i.requestId;else{var c=document.querySelector("#"+this.id()+" .requestId");f.css(c,"display","none")}document.querySelector("#"+this.id()+" .dateTime .info-content").innerText=h.formatDate(new Date,"yyyy-MM-dd HH:mm:ss");var d=document.querySelector("#"+this.id());f.css(d,"display","block");var p=this;p.playHideHandler&&clearTimeout(p.playHideHandler),p.playHideHandler=setTimeout(function(){p._player.trigger("play_btn_hide")})}},_hide:function(){var e=document.querySelector("#"+this.id());f.css(e,"display","none")},disposeUI:function(){this.playHideHandler&&(clearTimeout(this.playHideHandler),this.playHideHandler=null)}});t.exports=s},{"../../lang/index":11,"../../lib/dom":18,"../../lib/event":19,"../../lib/ua":31,"../../lib/util":33,"../../player/base/event/eventtype":43,"../component":94}],100:[function(e,t,i){var r=e("../component"),o=e("../../player/base/event/eventtype"),n=(e("../../lib/event"),e("../../lib/ua")),a=e("../../lang/index"),s=e("./util"),l=r.extend({init:function(e,t){r.call(this,e,t),this.addClass(t.className||"prism-fullscreen-btn")},bindEvent:function(){var e=this;this._player.on(o.Player.RequestFullScreen,function(){n.IS_IOS||e.addClass("fullscreen")}),this._player.on(o.Player.CancelFullScreen,function(){e.removeClass("fullscreen")}),s.registerTooltipEvent.call(this,this.el(),function(){return e._player.fullscreenService.getIsFullScreen()?a.get("ExistFullScreen"):a.get("Fullscreen")}),this.on("click",function(){e._player.fullscreenService.getIsFullScreen()?e._player.fullscreenService.cancelFullScreen():e._player.fullscreenService.requestFullScreen(),e._player.trigger(o.Private.MarkerTextHide)})}});t.exports=l},{"../../lang/index":11,"../../lib/event":19,"../../lib/ua":31,"../../player/base/event/eventtype":43,"../component":94,"./util":121}],101:[function(e,t,i){"use strict";var r=e("../component"),o=e("../../lib/dom"),n=e("../../player/base/event/eventtype"),a=r.extend({init:function(e,t){r.call(this,e,t),this.addClass(t.className||"prism-hide")},createEl:function(){var e=r.prototype.createEl.call(this,"div");return e.innerHTML='<div class="circle"></div> <div class="circle1"></div>',e},_loading_hide:function(e){var t=document.querySelector("#"+this.id()+" .prism-loading");t&&(o.removeClass(t,"prism-loading"),o.addClass(t,"prism-hide"))},_loading_show:function(e){var t=document.querySelector("#"+this.id()+" .prism-hide");t&&(o.removeClass(t,"prism-hide"),o.addClass(t,"prism-loading"))},bindEvent:function(){this._player.on(n.Private.H5_Loading_Show,this._loading_show),this._player.on(n.Private.H5_Loading_Hide,this._loading_hide)}});t.exports=a},{"../../lib/dom":18,"../../player/base/event/eventtype":43,"../component":94}],102:[function(e,t,i){var r=e("../component"),o=(e("../../lib/util"),e("../../lib/dom")),n=(e("../../lib/event"),e("../../lib/ua"),e("../../lang/index"),e("../../player/base/event/eventtype")),a=r.extend({init:function(e,t){r.call(this,e,t),this.className=t.className?t.className:"prism-info-display",this.addClass(this.className)},createEl:function(){return r.prototype.createEl.call(this,"p")},bindEvent:function(){var r=this;r._player.on(n.Private.Info_Show,function(e){var t=document.querySelector("#"+r.id()),i=e.paramData;i&&(void 0!==i.text&&i.text?(t.innerHTML=i.text,void 0!==i.duration&&i.duration&&(r.handler&&clearTimeout(r.handler),r.handler=setTimeout(function(){o.css(t,"display","none")},i.duration)),"lb"==i.align?(o.addClass(t,"prism-info-left-bottom"),o.removeClass(t,"prism-info-top-center")):"tc"==i.align?(o.addClass(t,"prism-info-top-center"),o.removeClass(t,"prism-info-left-bottom")):(o.removeClass(t,"prism-info-left-bottom"),o.removeClass(t,"prism-info-top-center")),i.isBlack?o.addClass(t,"prism-info-black"):o.removeClass(t,"prism-info-black")):t.innerHTML=i,o.css(t,"display","block"))}),r._player.on(n.Private.Info_Hide,function(e){var t=document.querySelector("#"+r.id());o.css(t,"display","none")})},disposeUI:function(){this.handler&&(clearTimeout(this.handler),this.handler=null)}});t.exports=a},{"../../lang/index":11,"../../lib/dom":18,"../../lib/event":19,"../../lib/ua":31,"../../lib/util":33,"../../player/base/event/eventtype":43,"../component":94}],103:[function(e,t,i){var r=e("../component"),o=e("./util"),n=(e("../../lib/util"),e("../../lib/dom")),a=e("../../lib/event"),s=e("../../lib/playerUtil"),l=e("../../lang/index"),u=r.extend({init:function(e,t){r.call(this,e,t),this.className=t.className?t.className:"prism-live-display",this.addClass(this.className)},createEl:function(){var e=r.prototype.createEl.call(this,"p");return e.innerText="LIVE",s.isLiveShift(this._player._options)&&n.addClass(e,"live-shift-display"),e},bindEvent:function(){var e=document.querySelector("#"+this.id()),t=this;s.isLiveShift(this._player._options)&&(a.on(e,"click",function(){t._player._liveshiftService.switchToLive()}),o.registerTooltipEvent.call(this,this.el(),l.get("SwitchToLive")))}});t.exports=u},{"../../lang/index":11,"../../lib/dom":18,"../../lib/event":19,"../../lib/playerUtil":28,"../../lib/util":33,"../component":94,"./util":121}],104:[function(e,t,i){var r=e("../component"),o=(e("../../lib/dom"),e("../../lib/event"),e("../../player/base/event/eventtype")),n=e("../../player/base/plugin/status"),a=r.extend({init:function(e,t){r.call(this,e,t),this.addClass(t.className||"prism-animation")},bindEvent:function(){var t=this;this._player.on(o.Player.Play,function(){t._player._isManualPlay&&(t.removeClass("prism-pause-animation"),t.addClass("prism-play-animation"),t.removeClass("play-apply-animation"),t.playHandler&&clearTimeout(t.playHandler),t.playHandler=setTimeout(function(){t.addClass("play-apply-animation")}))}),this._player.on(o.Player.Pause,function(){var e=t._player._status;e!=n.ended&&e!=n.error&&t._player._isManualPause&&(t.removeClass("prism-play-animation"),t.addClass("prism-pause-animation"),t.removeClass("play-apply-animation"),t.pauseHandler&&clearTimeout(t.pauseHandler),t.pauseHandler=setTimeout(function(){t.addClass("play-apply-animation")}))})},disposeUI:function(){this.playHandler&&(clearTimeout(this.playHandler),this.playHandler=null),this.pauseHandler&&(clearTimeout(this.pauseHandler),this.pauseHandler=null)}});t.exports=a},{"../../lib/dom":18,"../../lib/event":19,"../../player/base/event/eventtype":43,"../../player/base/plugin/status":66,"../component":94}],105:[function(e,t,i){var r=e("../component"),o=e("../../player/base/event/eventtype"),n=e("./util"),a=e("../../lang/index"),s=r.extend({init:function(e,t){r.call(this,e,t),this.addClass(t.className||"prism-play-btn")},bindEvent:function(){var t=this;this._player.on(o.Player.Play,function(){t.addClass("playing")}),this._player.on(o.Player.Pause,function(){t.removeClass("playing")}),this.on(o.Private.PlayClick,function(){if(t._player.paused()){var e=t._player.getCurrentTime();(t._player.getDuration()<=e||t._player._ended||t._player.exceedPreviewTime(e))&&t._player.seek(0),t._player.play(!0),t.addClass("playing")}else t._player.pause(!0),t.removeClass("playing");t._player.trigger(o.Private.MarkerTextHide)}),n.registerTooltipEvent.call(this,this.el(),function(){return t._player.paused()?a.get("Play"):a.get("Pause")})}});t.exports=s},{"../../lang/index":11,"../../player/base/event/eventtype":43,"../component":94,"./util":121}],106:[function(e,t,i){var r=e("../component"),a=e("../../lib/dom"),n=(e("../../lib/constants"),e("../../lib/event")),s=e("../../lib/ua"),l=e("../../lib/function"),o=e("../../lang/index"),u=e("../../config"),c=e("../../lib/util"),d=e("../../player/base/event/eventtype"),p=r.extend({init:function(e,t){r.call(this,e,t),this.className=t.className?t.className:"prism-progress",this.addClass(this.className)},createEl:function(){var e=r.prototype.createEl.call(this);return e.innerHTML='<div class="prism-progress-loaded"></div><div class="prism-progress-played"></div><div class="prism-progress-marker"></div><div class="prism-progress-cursor"><img></img></div><p class="prism-progress-time"></p>',e},bindEvent:function(){var t=this;this.loadedNode=document.querySelector("#"+this.id()+" .prism-progress-loaded"),this.playedNode=document.querySelector("#"+this.id()+" .prism-progress-played"),this.cursorNode=document.querySelector("#"+this.id()+" .prism-progress-cursor"),this.timeNode=document.querySelector("#"+this.id()+" .prism-progress-time"),this.timeNode=document.querySelector("#"+this._player._options.id+" .prism-progress-time");var i=document.querySelector("#"+this.id()),e=document.querySelector("#"+this.id()+" .prism-progress-cursor img"),r="https://"+u.domain+"/de/prismplayer/"+u.h5Version+"/skins/default/img/dragcursor.png";u.domain?-1<u.domain.indexOf("localhost")&&(r="//"+u.domain+"/build/skins/default/img/dragcursor.png"):r="de/prismplayer/"+u.h5Version+"/skins/default/img/dragcursor.png",e.src=r,n.on(this.cursorNode,"mousedown",function(e){t._onMouseDown(e)}),n.on(this.cursorNode,"touchstart",function(e){t._onMouseDown(e)}),n.on(i,"mousemove",function(e){t._progressMove(e)}),n.on(i,"touchmove",function(e){t._progressMove(e)});var o=function(e){t._progressDown=e};n.on(i,"mousedown",function(e){o(!0)}),n.on(i,"touchstart",function(e){o(!0)}),n.on(i,"mouseup",function(e){o(!1)}),n.on(i,"touchend",function(e){o(!1)}),n.on(this._el,"click",function(e){t._onMouseClick(e)}),this._player.on(d.Private.HideProgress,function(e){t._hideProgress(e)}),this._player.on(d.Private.CancelHideProgress,function(e){t._cancelHideProgress(e)}),n.on(i,d.Private.MouseOver,function(e){t._onMouseOver(e)}),n.on(i,d.Private.MouseOut,function(e){t._onMouseOut(e)}),n.on(this.controlNode,d.Private.MouseLeave,function(e){t._offMouseUp()}),s.IS_PC?(n.on(i,"mouseover",function(){a.addClass(i,"prism-progress-hover"),a.addClass(t.cursorNode,"cursor-hover")}),n.on(i,"mouseout",function(e){a.removeClass(i,"prism-progress-hover"),a.removeClass(t.cursorNode,"cursor-hover"),t._progressDown=!1})):(a.addClass(i,"prism-progress-hover"),a.addClass(t.cursorNode,"cursor-hover")),this.bindTimeupdate=l.bind(this,this._onTimeupdate),this._player.on(d.Player.TimeUpdate,this.bindTimeupdate),s.IS_IPAD?this.interval=setInterval(function(){t._onProgress()},500):this._player.on(d.Video.Progress,function(){t._onProgress()})},_progressMove:function(e){e.preventDefault();var t=this._getSeconds(e);if(t!=1/0){var i=c.formatTime(t),r=this._getDistance(e);this.cursorNode&&(this._player.trigger(d.Private.ThumbnailShow,{time:t,formatTime:i,left:r,progressWidth:this.el().offsetWidth}),this._progressDown&&this._onMouseMove(e))}},_hideProgress:function(e){n.off(this.cursorNode,"mousedown"),n.off(this.cursorNode,"touchstart")},_cancelHideProgress:function(e){var t=this;n.on(this.cursorNode,"mousedown",function(e){t._onMouseDown(e)}),n.on(this.cursorNode,"touchstart",function(e){t._onMouseDown(e)})},_canSeekable:function(e){var t=!0;return"function"==typeof this._player.canSeekable&&(t=this._player.canSeekable(e)),t},_onMouseOver:function(e){this._cursorHideHandler&&(clearTimeout(this._cursorHideHandler),this._cursorHideHandler=null),this._mouseInProgress||this._updateCursorPosition(this._player.getCurrentTime()),this._mouseInProgress=!0},_onMouseOut:function(e){var t=this;this._cursorHideHandler&&clearTimeout(this._cursorHideHandler),this._cursorHideHandler=setTimeout(function(){t._player.trigger(d.Private.ThumbnailHide),t._mouseInProgress=!1})},_getSeconds:function(e){var t=this._getDistance(e),i=this.el().offsetWidth,r=this._player.getDuration()?t/i*this._player.getDuration():0;return r<0&&(r=0),r>this._player.getDuration()&&(r=this._player.getDuration()),r},_getDistance:function(e){for(var t=this.el().offsetLeft,i=this.el();i=i.offsetParent;){var r=a.getTranslateX(i);t+=i.offsetLeft+r}var o=e.touches?e.touches[0].pageX:e.pageX;return Math.abs(o-t)},_onMouseClick:function(e){var t=this,i=t._getSeconds(e);if(t._canSeekable(i)){t._player.exceedPreviewTime(i)&&(i=t._player.getPreviewTime()),t._updateCursorPosition(i);this._mouseClickTimeHandle&&clearTimeout(this._mouseClickTimeHandle),this._mouseClickTimeHandle=setTimeout(function(){t._player._seeking=!0,t._player.trigger(d.Private.SeekStart,{fromTime:t._player.getCurrentTime()}),t._player.seek(i),t._player.trigger(d.Private.EndStart,{toTime:i}),t._mouseClickTimeHandle=null,t._inWaitingSeek=!1},300),this._inWaitingSeek=!0}else t._player.trigger(d.Private.Info_Show,{text:o.get("Can_Not_Seekable"),duration:2e3})},_onMouseDown:function(e){var t=this;e.preventDefault(),this._player.trigger(d.Private.SeekStart,{fromTime:this._player.getCurrentTime()}),n.on(this.controlNode,"mousemove",function(e){t._onMouseMove(e)}),n.on(this.controlNode,"touchmove",function(e){t._onMouseMove(e)}),n.on(this._player.tag,"mouseup",function(e){t._onPlayerMouseUp(e)}),n.on(this._player.tag,"touchend",function(e){t._onPlayerMouseUp(e)}),n.on(this.controlNode,"mouseup",function(e){t._onControlBarMouseUp(e)}),n.on(this.controlNode,"touchend",function(e){t._onControlBarMouseUp(e)})},_onMouseUp:function(e){this._onMouseUpIntern(e)},_onControlBarMouseUp:function(e){this._onMouseUpIntern(e)},_onPlayerMouseUp:function(e){this._onMouseUpIntern(e)},_offMouseUp:function(){n.off(this.controlNode,"mousemove"),n.off(this.controlNode,"touchmove"),n.off(this._player.tag,"mouseup"),n.off(this._player.tag,"touchend"),n.off(this.controlNode,"mouseup"),n.off(this.controlNode,"touchend")},_onMouseUpIntern:function(e){e.preventDefault(),this._offMouseUp();var t=this.playedNode.offsetWidth/this.el().offsetWidth*this._player.getDuration();this._player.getDuration();isNaN(t)||this._player.seek(t),this._player.trigger(d.Private.EndStart,{toTime:t})},_onMouseMove:function(e){e.preventDefault();var t=this._getSeconds(e);this._player.exceedPreviewTime(t)&&(t=this._player.getPreviewTime()),this._player.seek(t),this._updateProgressBar(this.playedNode,t),this._updateCursorPosition(t)},_onTimeupdate:function(e){this._inWaitingSeek||this._player._seeking||this._progressDown||(this._updateProgressBar(this.playedNode,this._player.getCurrentTime()),this._updateCursorPosition(this._player.getCurrentTime()),this._player.trigger(d.Private.UpdateProgressBar,{time:this._player.getCurrentTime()}))},_onProgress:function(e){this._player.getDuration()&&1<=this._player.getBuffered().length&&this._updateProgressBar(this.loadedNode,this._player.getBuffered().end(this._player.getBuffered().length-1))},_updateProgressBar:function(e,t){var i=this._player.getDuration();if(1!=this._player._switchSourcing&&i){var r=t/i+.005;1<r&&(r=1),e&&a.css(e,"width",100*r+"%")}},_updateCursorPosition:function(e){var t=this._player.getDuration();if(1!=this._player._switchSourcing&&t){var i=1,r=this._player.el().clientWidth,o=10/r,n=e/t-o;0!=r&&(i=1-o),n=n<0?0:n,this.cursorNode&&(i<n?(a.css(this.cursorNode,"right","0px"),a.css(this.cursorNode,"left","auto")):(a.css(this.cursorNode,"right","auto"),a.css(this.cursorNode,"left",100*n+"%")))}},disposeUI:function(){this.cursorNodeHandler&&(clearTimeout(this.cursorNodeHandler),this.cursorNodeHandler=null),this._cursorHideHandler&&(clearTimeout(this._cursorHideHandler),this._cursorHideHandler=null),this._mouseClickTimeHandle&&(clearTimeout(this._mouseClickTimeHandle),this._mouseClickTimeHandle=null)}});t.exports=p},{"../../config":5,"../../lang/index":11,"../../lib/constants":15,"../../lib/dom":18,"../../lib/event":19,"../../lib/function":20,"../../lib/ua":31,"../../lib/util":33,"../../player/base/event/eventtype":43,"../component":94}],107:[function(e,t,i){var r=e("../component"),o=(e("../../lib/util"),e("../../lib/dom")),n=e("../../lib/event"),a=e("../../player/base/event/eventtype"),s=r.extend({init:function(e,t){r.call(this,e,t),this.className=t.className?t.className:"prism-marker-text",this.addClass(this.className)},createEl:function(){var e=r.prototype.createEl.call(this,"div");return e.innerHTML="<p></p>",e},bindEvent:function(){var r=this;r._player.on(a.Private.MarkerTextShow,function(e){var t=e.paramData,i=a.Player.MarkerDotOver;if(r._player.trigger(i,e.paramData),t.progressMarker.isCustomized)r._player.trigger(a.Private.LifeCycleChanged,{type:i,data:e.paramData});else{r._thumbnailShowHanlde&&(o.css(r.el(),"display","none"),clearTimeout(r._thumbnailShowHanlde)),r._thumbnailShowHanlde=setTimeout(function(){if(document.querySelector("#"+r.id()+" p").innerText=t.progressMarker.text||"",t){o.css(r.el(),"display","block");var e=r._player.el().offsetWidth;left=e*t.left,width=r.el().offsetWidth,left+width>e?(o.css(r.el(),"right","0px"),o.css(r.el(),"left","auto")):(left-=width/2,left=left<0?0:left,o.css(r.el(),"right","auto"),o.css(r.el(),"left",left+"px"))}},30)}}),r._player.on(a.Private.MarkerTextHide,function(e){r._player.trigger(a.Player.MarkerDotOut),r._player.trigger(a.Private.LifeCycleChanged,{type:a.Player.MarkerDotOut,data:""}),r._thumbnailShowHanlde&&clearTimeout(r._thumbnailShowHanlde),o.css(r.el(),"display","none")}),n.on(r._player.tag,"click",function(e){e&&e.target==e.currentTarget&&r._player.trigger(a.Private.MarkerTextHide)}),n.on(r._player.tag,"touchstart",function(e){e&&e.target==e.currentTarget&&r._player.trigger(a.Private.MarkerTextHide)})},disposeUI:function(){this._thumbnailShowHanlde&&(clearTimeout(this._thumbnailShowHanlde),this._thumbnailShowHanlde=null)}});t.exports=s},{"../../lib/dom":18,"../../lib/event":19,"../../lib/util":33,"../../player/base/event/eventtype":43,"../component":94}],108:[function(e,t,i){var r=e("./selector"),s=e("../../../lib/object"),u=(e("../../../lib/util"),e("../../../lib/cookie")),l=e("../../../lib/dom"),c=(e("../../../lib/event"),e("../../../lib/constants")),d=e("../../../lang/index"),p=e("../../../player/base/event/eventtype"),o=r.extend({init:function(e,t){this.Name=d.get("Quality"),this.Type="quality",this.Tooltip=d.get("Quality_Switch_To"),r.call(this,e,t),this._isMasterLevel=!1},showTip:function(e,t){this._player.trigger(p.Private.Info_Show,{text:e,duration:t,align:"lb"})},bindEvent:function(){this.bindCommonEvent();var s=this;this._player.on(p.Private.QualityChange,function(e){var t=s._player._urls,i=e.paramData;if(i.levelSwitch){var r=i.desc;s._autoSWitchDesc=r,s._updateText(r)}else if(0<s._player._currentPlayIndex){s._autoSWitchDesc="";var o=s._player._currentPlayIndex,n=t[o-1].desc,a=t[o].desc;s.showTip(n+e.paramData+a,1e3),s._player.trigger(p.Private.SelectorValueChange,t[o].Url)}});var e=document.querySelector("#"+s.id()+" .selector-list");this._player.on(p.Player.LevelSwitch,function(){l.addClass(e,"disabled")}),this._player.on(p.Player.LevelSwitched,function(){l.removeClass(e,"disabled")})},generateList:function(e){var t=this._player._urls,o=this._player._currentPlayIndex,i=this._player._qualityService.levels;0<i.length&&(this._isMasterLevel=!0,o=(t=i).length-1);var n=document.querySelector("#"+this.id()+" .selector-list");if(0<t.length){var a=this;s.each(t,function(e,t){if(e.desc){var i=l.createEl.call(this,"li",{key:e.Url,index:t,text:e.desc}),r=l.createEl.call(this,"span",{key:e.Url,index:t,text:e.desc});t==o&&(l.addClass(i,"current"),a._previousSelection=i),r.innerText=e.desc,i.appendChild(r),n.appendChild(i)}})}this._autoSWitchDesc&&this._updateText(this._autoSWitchDesc)},execute:function(e){if(this._player._switchSourcing=!0,this._isMasterLevel){var t=this._player._qualityService.levels;for(n=0;n<t.length;n++)t[n].Url==e&&t[n].desc!=d.get("Auto")&&this._updateText("");this._player._switchLevel&&this._player._switchLevel(e)}else{for(var i=this._player._urls.length,r=this._player._currentPlayIndex,o=-1,n=0;n<i;n++)if(this._player._urls[n].Url==e){o=this._player._currentPlayIndex=n,u.set(c.SelectedStreamLevel,this._player._urls[n].definition,365);break}if(r!=o&&-1<o){var a=this._player.getCurrentTime();this._previousCurrentTime?"playing"!=this._player._status&&(a=this._previousCurrentTime):this._previousCurrentTime=a,this._previousCurrentTime=a;var s=this._player.autoplay||"pause"!=this._player._status;this._player.autoplay||0!=a||(s=!1),this._player._loadByUrlInner(e,a,s)}}var l=this;setTimeout(function(){l._player._switchSourcing=!1})},_updateText:function(e){var t=document.querySelector("#"+this.id()+" .selector-list .current"),i=document.querySelector("#"+this.id()+" .selector-list .current span"),r=d.get("Auto");i&&i.innerText&&-1<i.innerText.indexOf(r)&&(r+=e?"("+e+")":"",i.innerText=r,t&&(t.text=r))}});t.exports=o},{"../../../lang/index":11,"../../../lib/constants":15,"../../../lib/cookie":16,"../../../lib/dom":18,"../../../lib/event":19,"../../../lib/object":26,"../../../lib/util":33,"../../../player/base/event/eventtype":43,"./selector":114}],109:[function(e,t,i){var r=e("./selector"),a=e("../../../lib/object"),s=(e("../../../lib/util"),e("../../../lib/cookie"),e("../../../lib/dom")),o=(e("../../../lib/event"),e("./util"),e("../../../lang/index")),l=e("../../../player/base/event/eventtype"),n=r.extend({init:function(e,t){this.Name=o.get("AudioTrack"),this.Type="audio",this.Tooltip=o.get("AudioTrack_Switch_To"),r.call(this,e,t)},bindEvent:function(){this.bindCommonEvent();var o=this,n=document.querySelector("#"+o.id()+" .selector-list");document.querySelector("#"+o.id()+" .header");o._player.on(l.Private.ChangeURL,function(){o._hasGeneratedList=!1}),this._player.on(l.Player.AudioTrackSwitch,function(){s.addClass(n,"disabled")}),this._player.on(l.Player.AudioTrackSwitched,function(){s.removeClass(n,"disabled")}),o._player.on(l.Player.AudioTrackReady,function(e){o._hasGeneratedList||(o._clear(),(e=e.paramData)&&(a.each(e,function(e,t){var i=s.createEl.call(o,"li",{key:e.value,text:e.text}),r=s.createEl.call(o,"span",{key:e.value,text:e.text});r.innerText=e.text,i.appendChild(r),n.appendChild(i)}),o._hasGeneratedList=!0))})},execute:function(e){this._player._audioTrackService["switch"](e)}});t.exports=n},{"../../../lang/index":11,"../../../lib/cookie":16,"../../../lib/dom":18,"../../../lib/event":19,"../../../lib/object":26,"../../../lib/util":33,"../../../player/base/event/eventtype":43,"./selector":114,"./util":116}],110:[function(e,t,i){var r=e("../../component"),o=(e("../../../lib/dom"),e("../../../player/base/event/eventtype")),n=e("./list"),a=e("../../../lang/index"),s=e("../util"),l=r.extend({init:function(e,t){r.call(this,e,t),this.addClass(t.className||"prism-setting-btn"),this._settingList=new n(e,t),e.addChild(this._settingList,t)},createEl:function(){return r.prototype.createEl.call(this,"div")},bindEvent:function(){var e=this;this.on("click",function(){e._settingList.isOpened?e._player.trigger(o.Private.SettingListHide):e._player.trigger(o.Private.SettingListShow),e._player.trigger(o.Private.SelectorHide),e._player.trigger(o.Private.MarkerTextHide),e._player.trigger(o.Private.VolumeVisibilityChange,"")}),s.registerTooltipEvent.call(this,this.el(),a.get("Setting"))}});t.exports=l},{"../../../lang/index":11,"../../../lib/dom":18,"../../../player/base/event/eventtype":43,"../../component":94,"../util":121,"./list":113}],111:[function(e,t,i){var r=e("./selector"),s=e("../../../lib/object"),l=e("../../../lib/dom"),o=(e("../../../lib/event"),e("./util"),e("../../../lib/cookie")),n=e("../../../lib/constants"),a=e("../../../lang/index"),u=e("../../../player/base/event/eventtype"),c=r.extend({init:function(e,t){this.Name=a.get("Subtitle"),this.Type="cc",this.Tooltip=a.get("CC_Switch_To"),r.call(this,e,t)},bindEvent:function(){this.bindCommonEvent();var o=this;this._player.on(u.Private.CCStateChanged,function(e){var t=e.paramData.value,i=e.paramData.lang;"on"==t&&i?o._backCCText=i:"off"==t&&""==o._backCCText&&(o._backCCText=o._previousSelection.text);var r="Off";"on"==t&&(r=o._backCCText),o._player.trigger(u.Private.SelectorUpdateList,{type:"cc",text:r})})},generateList:function(o){var n=document.querySelector("#"+this.id()+" .selector-list"),e=this._player._ccService.tracks,a=this;s.each(e,function(e,t){var i=l.createEl.call(this,"li",{key:e.value,text:e.text}),r=l.createEl.call(this,"span",{key:e.value,text:e.text});e.text==o&&(l.addClass(i,"current"),a._previousSelection=i),r.innerText=e.text,i.appendChild(r),n.appendChild(i)})},execute:function(e){this._backCCText="",o.set(n.SelectedCC,e,365),this._player._ccService["switch"](e),this._player.trigger(u.Private.CCChanged,e)}});t.exports=c},{"../../../lang/index":11,"../../../lib/constants":15,"../../../lib/cookie":16,"../../../lib/dom":18,"../../../lib/event":19,"../../../lib/object":26,"../../../player/base/event/eventtype":43,"./selector":114,"./util":116}],112:[function(e,t,i){t.exports={CC:e("./cc"),Speed:e("./speed"),Quality:e("./Quality"),Audio:e("./audio")}},{"./Quality":108,"./audio":109,"./cc":111,"./speed":115}],113:[function(e,t,i){var a=e("../../component"),r=e("../../../lib/dom"),n=e("../../../lib/ua"),s=e("../../../lib/event"),l=e("../../../player/base/event/eventtype"),o=e("./export"),u=e("./util"),c=e("../../../lang/index"),d=a.extend({init:function(e,t){for(var i in this.isOpened=!1,a.call(this,e,t),this.addClass(t.className||"prism-setting-list"),o){var r=new o[i](e,t);e.addChild(r,t)}},createEl:function(){var e=a.prototype.createEl.call(this,"div"),t="<div class='prism-setting-item prism-setting-{type}' type={type}><div class='setting-content'><span class='setting-title'>{value}</span><span class='array'></span><span class='current-setting'></span></div></div>",i=t.replace(/{type}/g,"speed").replace("{value}",c.get("Speed")),r=t.replace(/{type}/g,"cc").replace("{value}",c.get("Subtitle")),o=t.replace(/{type}/g,"audio").replace("{value}",c.get("AudioTrack")),n=t.replace(/{type}/g,"quality").replace("{value}",c.get("Quality"));return e.innerHTML=i+r+o+n,e},bindEvent:function(){document.querySelector("#"+this.id()+" .prism-setting-speed .current-setting").innerText=c.get("Speed_1X_Text");var o=this,t=function(){o._player.trigger(l.Private.SettingListHide),o.isOpened=!1},i=function(e){e&&e.text&&(document.querySelector("#"+o.id()+" .prism-setting-"+e.type+" .current-setting").innerText=e.text)};this._player.on(l.Private.SettingListShow,function(e){o.isOpened=!0;e=e.paramData;i(e),r.css(o.el(),"display","block")}),this._player.on(l.Private.UpdateToSettingList,function(e){e=e.paramData;i(e)}),this._player.on(l.Private.SelectorUpdateList,function(e){e=e.paramData;i(e),o._player.trigger(l.Private.SelectorValueChange,e)}),this._player.on(l.Private.SettingListHide,function(){o.isOpened=!1,r.css(o.el(),"display","none")}),s.on(this.el(),"click",function(e){o._player.trigger(l.Private.SettingListHide);var t=e.srcElement?e.srcElement:e.target;if(t=u.findItemElementForList(t)){var i=t.getAttribute("type");o._player.trigger(l.Private.SelectorShow,{type:i})}});var e=n.IS_MOBILE?"touchleave":"mouseleave";s.on(this.el(),e,function(){t()}),s.on(this._player.tag,"click",function(e){e&&e.target==e.currentTarget&&t()}),s.on(this._player.tag,"touchstart",function(e){e&&e.target==e.currentTarget&&t()}),this._player.on(l.Private.QualityChange,function(e){var t=e.paramData;if(t.levelSwitch){var i=document.querySelector("#"+o.id()+" .prism-setting-quality .current-setting"),r=c.get("Auto");-1<i.innerText.indexOf(r)&&(i.innerText=r+(t.desc?"("+t.desc+")":""))}})}});t.exports=d},{"../../../lang/index":11,"../../../lib/dom":18,"../../../lib/event":19,"../../../lib/ua":31,"../../../player/base/event/eventtype":43,"../../component":94,"./export":112,"./util":116}],114:[function(e,t,i){var r=e("../../component"),o=(e("../../../lib/object"),e("../../../lib/util"),e("../../../lib/ua")),a=(e("../../../lib/cookie"),e("../../../lib/dom")),s=e("../../../lib/event"),l=e("./util"),u=(e("../../../lang/index"),e("../../../player/base/event/eventtype")),n=r.extend({init:function(e,t){this._hasGeneratedList=!1,this._previousSelection=null,this._backupSelector="",r.call(this,e,t),this.className=t.className?t.className:"prism-"+this.Type+"-selector prism-setting-selector",this.addClass(this.className)},createEl:function(){var e=r.prototype.createEl.call(this,"div");return e.innerHTML='<div class="header"><div class="left-array"></div><span>'+this.Name+'</span></div><ul class="selector-list"></ul>',e},bindEvent:function(){this.bindCommonEvent()},bindCommonEvent:function(){var n=this,e=document.querySelector("#"+n.id()+" .selector-list"),t=document.querySelector("#"+n.id()+" .header");this._player.on(u.Private.ChangeURL,function(){n._hasGeneratedList=!1}),s.on(t,"click",function(){n._player.trigger(u.Private.SelectorHide),n._player.trigger(u.Private.SettingListShow,{type:n.Type,text:n._previousSelection?n._previousSelection.text:""})}),s.on(e,"click",function(e){var t=e.srcElement?e.srcElement:e.target,i=t.key,r=t.text;if(void 0!==r){n._previousSelection&&a.removeClass(n._previousSelection,"current"),n._previousSelection=l.findliElementForSelector(t),a.addClass(n._previousSelection,"current"),n.execute&&n.execute(i);var o=n.Tooltip+"<span>"+r+"</span>";n._player.trigger(u.Private.Info_Show,{text:o,duration:1e3,align:"lb"})}}),n._player.on(u.Private.SelectorHide,function(){i()}),n._player.on(u.Private.SelectorValueChange,function(e){var t=e.paramData;if(t){if(t.type!=n.Type)return;var i=document.querySelectorAll("#"+n.id()+" .selector-list li");if(i){var r=i.length;0==r&&(n._backupSelector=t.text);for(var o=0;o<r;o++)if(i[o].text==t.text){n._previousSelection&&a.removeClass(n._previousSelection,"current"),a.addClass(i[o],"current"),n._previousSelection=i[o];break}}}}),n._player.on(u.Private.SelectorShow,function(e){if((e=e.paramData).type==n.Type){var t=document.querySelector("#"+n._player.id()+" .prism-"+e.type+"-selector");n._hasGeneratedList||(n._clear(),n.generateList(n._backupSelector),n._backupSelector="",n._hasGeneratedList=!0),a.css(t,"display","block")}});var i=function(){a.css(n.el(),"display","none"),n._player.trigger(u.Private.UpdateToSettingList,{type:n.Type,text:n._previousSelection?n._previousSelection.text:""})},r=o.IS_MOBILE?"touchleave":"mouseleave";s.on(this.el(),r,function(){i()}),s.on(this._player.tag,"click",function(e){e&&e.target==e.currentTarget&&i()}),s.on(this._player.tag,"touchstart",function(e){e&&e.target==e.currentTarget&&i()})},setSelected:function(e){},generateList:function(){},_clear:function(){document.querySelector("#"+this.id()+" .selector-list").innerHTML=""}});t.exports=n},{"../../../lang/index":11,"../../../lib/cookie":16,"../../../lib/dom":18,"../../../lib/event":19,"../../../lib/object":26,"../../../lib/ua":31,"../../../lib/util":33,"../../../player/base/event/eventtype":43,"../../component":94,"./util":116}],115:[function(e,t,i){var r=e("./selector"),a=e("../../../lib/object"),s=(e("../../../lib/util"),e("../../../lib/cookie"),e("../../../lib/dom")),l=(e("../../../lib/event"),e("./util"),e("../../../lib/constants")),u=e("../../../lang/index"),o=(e("../../../player/base/event/eventtype"),r.extend({init:function(e,t){this.Name=u.get("Speed"),this.Type="speed",this.Tooltip=u.get("Speed_Switch_To"),r.call(this,e,t)},generateList:function(){var o=document.querySelector("#"+this.id()+" .selector-list"),e=l.SpeedLevels,n=this;a.each(e,function(e,t){var i=s.createEl.call(this,"li",{key:e.key,text:e.text}),r=s.createEl.call(this,"span",{key:e.key,text:e.text});r.innerText=e.text,e.text==u.get("Speed_1X_Text")&&(s.addClass(i,"current"),n._previousSelection=i),i.appendChild(r),o.appendChild(i)})},execute:function(e){this._player.setSpeed(e)}}));t.exports=o},{"../../../lang/index":11,"../../../lib/constants":15,"../../../lib/cookie":16,"../../../lib/dom":18,"../../../lib/event":19,"../../../lib/object":26,"../../../lib/util":33,"../../../player/base/event/eventtype":43,"./selector":114,"./util":116}],116:[function(e,i,t){i.exports.findliElementForSelector=function(e){if(!e||"li"==e.tagName.toLowerCase())return e;var t=e.parentElement;return t&&"li"==t.tagName.toLowerCase()?t:null},i.exports.findliElementByKey=function(e,t){document.querySelectors(e);return null},i.exports.findItemElementForList=function(e){if(!e||-1<e.className.indexOf("prism-setting-item"))return e;var t=e.parentElement;return t&&(e=i.exports.findItemElementForList(t)),e}},{}],117:[function(e,t,i){var r=e("../component"),o=e("../../lib/dom"),f=e("../../lib/util"),n=e("../../lang/index"),_=e("../../player/base/event/eventtype"),a=e("./util"),s=r.extend({init:function(e,t){r.call(this,e,t),this.addClass(t.className||"prism-snapshot-btn")},createEl:function(){return r.prototype.createEl.call(this,"div")},bindEvent:function(){var h=this;this._player.on(_.Private.Snapshot_Hide,function(){o.css(h._el,"display","none")}),a.registerTooltipEvent.call(this,this.el(),n.get("Snapshot")),this.on("click",function(){h.trigger(_.Player.Snapshoting);var e=document.createElement("canvas"),t=h._player.tag,i=t.videoWidth,r=t.videoHeight,o=h._player._getSanpshotMatric();e.width=o.width||i,e.height=o.height||r;var n=h._player.getCurrentTime(),a=e.getContext("2d");a.save();var s=h._player.getImage();"vertical"==s?(a.translate(0,e.height),a.scale(1,-1)):"horizon"==s&&(a.translate(e.width,0),a.scale(-1,1)),a.drawImage(t,0,0,i,r),a.restore(),g(a,h._player.getOptions());var l="",u="";try{l=e.toDataURL("image/jpeg",o.rate||1)}catch(e){u=e}var c="",d="",p="";l&&(d=(c=l).substr(c.indexOf(",")+1),p=f.toBinary(d)),h.trigger(_.Player.Snapshoted,{time:n,base64:c,binary:p,error:u})})}}),g=function(e,t){var i=t.snapshotWatermark;i&&i.text&&(e.font=i.font,i.fillColor&&(e.fillStyle=i.fillColor,e.fillText(i.text,i.left,i.top)),i.strokeColor&&(e.strokeStyle=i.strokeColor,e.strokeText(i.text,i.left,i.top)),e.stroke())};t.exports=s},{"../../lang/index":11,"../../lib/dom":18,"../../lib/util":33,"../../player/base/event/eventtype":43,"../component":94,"./util":121}],118:[function(e,t,i){var r=e("../component"),c=(e("../../lib/util"),e("../../lib/dom")),o=e("../../lib/event"),n=(e("../../lib/ua"),e("../../lang/index"),e("../../player/base/event/eventtype")),a=r.extend({init:function(e,t){r.call(this,e,t),this.className=t.className?t.className:"prism-thumbnail",this.addClass(this.className)},createEl:function(){var e=r.prototype.createEl.call(this,"div");return e.innerHTML="<img></img><span></span>",e},bindEvent:function(){var u=this;o.on(this._el,"mousemove",function(e){e.preventDefault()}),o.on(this._el,"touchmove",function(e){e.preventDefault()}),u._player.on(n.Private.ThumbnailLoaded,function(e){var t=e.paramData;if(t&&0<t.length){var i=u._player._thumbnailService.makeUrl(t[0].text);u._player.log("THUMBNAILSTART",{tu:encodeURIComponent(i)});var r=(new Date).getTime();if(t[0].isBig)c.css(u.el(),"background","url("+i+")"),c.css(u.el(),"width",t[0].w+"px"),c.css(u.el(),"height",t[0].h+"px"),u._player.log("THUMBNAILCOMPLETE",{ftt:(new Date).getTime()-r});else{var o=document.querySelector("#"+u.id()+" img");o.onload=function(){var e=o.width,t=o.height;c.css(u.el(),"width",e+"px"),c.css(u.el(),"height",t+"px"),u._player.log("THUMBNAILCOMPLETE",{ftt:(new Date).getTime()-r})},o.src=i}}}),u._player.on(n.Private.ThumbnailShow,function(l){u._thumbnailShowHanlde&&clearTimeout(u._thumbnailShowHanlde),u._thumbnailShowHanlde=setTimeout(function(){var e=document.querySelector("#"+u.id()+" span"),t=l.paramData;if(e.innerText=t.formatTime,t){var i=u._player._thumbnailService.findAvailableCue(t.time);if(i)if(i.isBig){var r=u._player._thumbnailService.makeUrl(i.text);c.css(u.el(),"background","url("+r+")"),i.w,i.h;var o=-1*i.x+"px "+-1*i.y+"px";c.css(u.el(),"background-position",o)}else{var n=document.querySelector("#"+u.id()+" img");r=u._player._thumbnailService.makeUrl(i.text),n.src!=r&&(n.src=r)}else c.css(u.el(),"border","none"),c.css(e,"left","0px");c.css(u.el(),"display","block");var a=0,s=i?u.el().offsetWidth:e.offsetWidth;a=t.left+s>t.progressWidth?t.left-s:(a=t.left-s/2)<0?0:a,c.css(u.el(),"left",a+"px")}},30)}),u._player.on(n.Private.ThumbnailHide,function(e){u._thumbnailShowHanlde&&clearTimeout(u._thumbnailShowHanlde),c.css(u.el(),"display","none")})},_createSamllThumbnail:function(){},disposeUI:function(){this._thumbnailShowHanlde&&(clearTimeout(this._thumbnailShowHanlde),this._thumbnailShowHanlde=null)}});t.exports=a},{"../../lang/index":11,"../../lib/dom":18,"../../lib/event":19,"../../lib/ua":31,"../../lib/util":33,"../../player/base/event/eventtype":43,"../component":94}],119:[function(e,t,i){var r=e("../component"),o=e("../../lib/util"),n=e("../../player/base/event/eventtype"),a=r.extend({init:function(e,t){r.call(this,e,t),this.className=t.className?t.className:"prism-time-display",this.addClass(this.className)},createEl:function(){var e=r.prototype.createEl.call(this,"div");return e.innerHTML='<span class="current-time">00:00</span> <span class="time-bound">/</span> <span class="duration">00:00</span>',e},bindEvent:function(){var i=this;this._player.on(n.Video.DurationChange,function(){var e=o.formatTime(i._player.getDisplayDuration());e?(document.querySelector("#"+i.id()+" .time-bound").style.display="inline",document.querySelector("#"+i.id()+" .duration").style.display="inline",document.querySelector("#"+i.id()+" .duration").innerText=e):(document.querySelector("#"+i.id()+" .duration").style.display="none",document.querySelector("#"+i.id()+" .time-bound").style.display="none")}),this._player.on(n.Video.TimeUpdate,function(){var e=i._player.getCurrentTime(),t=o.formatTime(e);document.querySelector("#"+i.id()+" .current-time")&&(t?(document.querySelector("#"+i.id()+" .current-time").style.display="inline",document.querySelector("#"+i.id()+" .current-time").innerText=t):document.querySelector("#"+i.id()+" .current-time").style.display="none")})}});t.exports=a},{"../../lib/util":33,"../../player/base/event/eventtype":43,"../component":94}],120:[function(e,t,i){var r=e("../component"),s=e("../../lib/dom"),o=e("../../player/base/event/eventtype"),n=r.extend({init:function(e,t){r.call(this,e,t),this.className=t.className?t.className:"prism-tooltip",this.addClass(this.className)},createEl:function(){var e=r.prototype.createEl.call(this,"p");return e.innerText="\u63d0\u793a\u4fe1\u606f",e},bindEvent:function(){var a=this;a._player.on(o.Private.TooltipShow,function(e){var t=document.querySelector("#"+a.id()),i=e.paramData;t.innerText=i.text,s.css(t,"display","block");var r=t.offsetWidth,o=document.querySelector("#"+a._player.id()+" .prism-controlbar");if(o){var n=o.offsetWidth;i.left+r>n?s.css(t,"left",n-r+"px"):s.css(t,"left",i.left-(r-i.width)/2+"px")}}),a._player.on(o.Private.TooltipHide,function(e){var t=document.querySelector("#"+a.id());s.css(t,"display","none")})}});t.exports=n},{"../../lib/dom":18,"../../player/base/event/eventtype":43,"../component":94}],121:[function(e,t,i){var r=e("../../lib/event"),s=e("../../player/base/event/eventtype");t.exports.registerTooltipEvent=function(e,o){var n=this,a=function(){n._controlbarTooltipHandler&&(clearTimeout(n._controlbarTooltipHandler),n._controlbarTooltipHandler=null)};r.on(this.el(),"mouseover",function(e){a(),n._controlbarTooltipHandler=setTimeout(function(){n._player.trigger(s.Private.TooltipHide)},4e3);var t=n.el().offsetLeft,i=n.el().offsetWidth,r=o;"function"==typeof r&&(r=o.call(this)),n._player.trigger(s.Private.TooltipShow,{left:t,width:i,text:r})}),r.on(this.el(),"mouseout",function(){a(),n._player.trigger(s.Private.TooltipHide)})},t.exports.throttle=function(i,r){var o=Date.now();return function(){var e=arguments,t=Date.now();r<=t-o&&(i(e),o=t)}}},{"../../lib/event":19,"../../player/base/event/eventtype":43}],122:[function(e,t,i){var r=e("../component"),o=e("../../lib/dom"),n=e("../../lib/event"),a=e("../../player/base/event/eventtype"),s=e("./util"),l=e("../../lang/index"),u=e("./volumecontrol"),c=r.extend({init:function(e,t){r.call(this,e,t),this.addClass(t.className||"prism-volume");var i=new u(e,t);e.addChild(i,t)},createEl:function(){var e=r.prototype.createEl.call(this,"div");return e.innerHTML='<div class="volume-icon"><div class="short-horizontal"></div><div class="long-horizontal"></div></div>',e},bindEvent:function(){var i=this;this.icon=document.querySelector("#"+i.id()+"  .volume-icon"),s.registerTooltipEvent.call(this,this.el(),function(){return i._player.muted()||0==i._player.getVolume()?l.get("Muted"):l.get("Volume")}),n.on(this.icon,"click",function(e){var t=i.el().offsetLeft;i._player.trigger(a.Private.SettingListHide),i._player.trigger(a.Private.SelectorHide),i._player.trigger(a.Private.VolumeVisibilityChange,t),i._player.trigger(a.Private.MarkerTextHide)});var e=document.querySelector("#"+i.id()+"  .long-horizontal"),t=document.querySelector("#"+i.id()+"  .short-horizontal");n.on(this.el(),"mouseover",function(){o.removeClass(e,"volume-hover-animation"),setTimeout(function(){o.addClass(e,"volume-hover-animation")}),setTimeout(function(){o.removeClass(e,"volume-hover-animation"),o.addClass(t,"volume-hover-animation"),setTimeout(function(){o.removeClass(t,"volume-hover-animation"),o.addClass(e,"volume-hover-animation")},300)},300)})}});t.exports=c},{"../../lang/index":11,"../../lib/dom":18,"../../lib/event":19,"../../player/base/event/eventtype":43,"../component":94,"./util":121,"./volumecontrol":123}],123:[function(e,t,i){var r=e("../component"),o=e("../../lib/dom"),n=e("../../lib/event"),a=e("../../player/base/event/eventtype"),s=(e("./util"),e("../../lang/index"),r.extend({init:function(e,t){r.call(this,e,t),this.addClass(t.className||"prism-volume-control"),this._shown=!1},createEl:function(){var e=r.prototype.createEl.call(this,"div");return e.innerHTML='<div class="volume-range"><div class="volume-value"></div><div class="volume-cursor"></div></div>',e},bindEvent:function(){var r=this;this.icon=document.querySelector("#"+r._player.id()+"  .volume-icon"),this.control=document.querySelector("#"+r.id()),this.volumnValue=document.querySelector("#"+r.id()+"  .volume-value"),this.volumnRange=document.querySelector("#"+r.id()+"  .volume-range"),this.volumnCursor=document.querySelector("#"+r.id()+"  .volume-cursor"),this._player.on(a.Private.VolumeVisibilityChange,function(e){var t=e.paramData;if(!r._shown&&t){var i=r._player.getVolume();r._setVolumnUI(i),o.css(r.control,"display","block"),t&&o.css(r.control,"left",t-5+"px"),r._shown=!0}else o.css(r.control,"display","none"),r._shown=!1}),n.on(this.volumnRange,"click",function(e){var t=o.getPointerPosition(r.volumnRange,e).y;t<0||1<t||(t<0&&(t=0),1<t&&(t=1),r._setVolumnUI(t),r._setMuteUI(t),r._player.setVolume(t))}),n.on(this._player.tag,"click",function(e){e&&e.target==e.currentTarget&&o.css(r.control,"display","none")}),n.on(this._player.tag,"touchstart",function(e){e&&e.target==e.currentTarget&&o.css(r.control,"display","none")}),n.on(this.volumnCursor,"mousedown",function(e){r._onMouseDown(e)}),n.on(this.volumnCursor,"touchstart",function(e){r._onMouseDown(e)}),this._player.on(a.Private.VolumnChanged,function(e){var t=e.paramData;-1<t&&r._setVolumnUI(t),r._setMuteUI(t)}),n.on(this.control,"mouseleave",function(){o.css(r.control,"display","none"),r._shown=!1}),n.on(this.control,"mouseover",function(){o.addClass(r.control,"hover")}),r._rangeBottom=r._getBottom()},_getBottom:function(){if(window.getComputedStyle){var e=window.getComputedStyle(this.volumnRange,null).getPropertyValue("bottom");return parseFloat(e)}return 26},_onMouseDown:function(e){var t=this;e.preventDefault(),n.on(this.control,"mousemove",function(e){t._onMouseMove(e)}),n.on(this.control,"touchmove",function(e){t._onMouseMove(e)}),n.on(this._player.tag,"mouseup",function(e){t._onMouseUp(e)}),n.on(this._player.tag,"touchend",function(e){t._onMouseUp(e)}),n.on(this.control,"mouseup",function(e){t._onMouseUp(e)}),n.on(this.control,"touchend",function(e){t._onMouseUp(e)})},_onMouseUp:function(e){if(e.preventDefault(),this._offEvent(),this.volumnRange.offsetHeight){var t=(this.volumnValue.offsetHeight/this.volumnRange.offsetHeight).toFixed(2);this._player.setVolume(t),this._setMuteUI(t)}},_onMouseMove:function(e){e.preventDefault();var t=o.getPointerPosition(this.volumnRange,e).y;t<0||1<t||(t<0&&(t=0),1<t&&(t=1),this._setVolumnUI(t))},_getPosition:function(e){for(var t=this.volumnRange,i=0;t=t.offsetParent;)i+=t.offsetTop;var r=this.volumnRange.offsetHeight,o=this.volumnCursor.offsetHeight,n=e.touches?e.touches[0].pageY:e.pageY;return r<n-i&&(n=e.clientY),(r-(n-i)+o)/(r=this.volumnRange.offsetHeight)},_offEvent:function(){n.off(this._player.tag,"mouseup"),n.off(this._player.tag,"touchend"),n.off(this.control,"mousemove"),n.off(this.control,"touchmove"),n.off(this.control,"mouseup"),n.off(this.control,"touchend")},_setMuteUI:function(e){isNaN(e)||(0==e||-1==e?o.addClass(this.icon,"mute"):o.removeClass(this.icon,"mute"))},_setVolumnUI:function(e){isNaN(e)||(o.css(this.volumnValue,"height",100*e+"%"),1==e&&(e=.99),o.css(this.volumnCursor,"bottom",100*e+"%"))}}));t.exports=s},{"../../lang/index":11,"../../lib/dom":18,"../../lib/event":19,"../../player/base/event/eventtype":43,"../component":94,"./util":121}],124:[function(e,t,i){t.exports={H5Loading:e("./component/h5-loading"),bigPlayButton:e("./component/big-play-button"),controlBar:e("./component/controlbar"),progress:e("./component/progress"),playButton:e("./component/play-button"),liveDisplay:e("./component/live-display"),timeDisplay:e("./component/time-display"),fullScreenButton:e("./component/fullscreen-button"),volume:e("./component/volume"),snapshot:e("./component/snapshot"),errorDisplay:e("./component/error-display"),infoDisplay:e("./component/info-display"),liveShiftProgress:e("../commonui/liveshiftprogress"),liveShiftTimeDisplay:e("../commonui/livetimedisplay"),setting:e("./component/setting/button"),subtitle:e("./component/cc-button"),thumbnail:e("./component/thumbnail"),tooltip:e("./component/tooltip")}},{"../commonui/liveshiftprogress":3,"../commonui/livetimedisplay":4,"./component/big-play-button":95,"./component/cc-button":96,"./component/controlbar":97,"./component/error-display":99,"./component/fullscreen-button":100,"./component/h5-loading":101,"./component/info-display":102,"./component/live-display":103,"./component/play-button":105,"./component/progress":106,"./component/setting/button":110,"./component/snapshot":117,"./component/thumbnail":118,"./component/time-display":119,"./component/tooltip":120,"./component/volume":122}],125:[function(e,t,i){var r,o;r=this,o=function(){var c,i,e,t,r,d,o,n,a,s,l,u,p=p||(c=Math,i=Object.create||function(){function i(){}return function(e){var t;return i.prototype=e,t=new i,i.prototype=null,t}}(),t=(e={}).lib={},r=t.Base={extend:function(e){var t=i(this);return e&&t.mixIn(e),t.hasOwnProperty("init")&&this.init!==t.init||(t.init=function(){t.$super.init.apply(this,arguments)}),(t.init.prototype=t).$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},d=t.WordArray=r.extend({init:function(e,t){e=this.words=e||[],this.sigBytes=null!=t?t:4*e.length},toString:function(e){return(e||n).stringify(this)},concat:function(e){var t=this.words,i=e.words,r=this.sigBytes,o=e.sigBytes;if(this.clamp(),r%4)for(var n=0;n<o;n++){var a=i[n>>>2]>>>24-n%4*8&255;t[r+n>>>2]|=a<<24-(r+n)%4*8}else for(n=0;n<o;n+=4)t[r+n>>>2]=i[n>>>2];return this.sigBytes+=o,this},clamp:function(){var e=this.words,t=this.sigBytes;e[t>>>2]&=4294967295<<32-t%4*8,e.length=c.ceil(t/4)},clone:function(){var e=r.clone.call(this);return e.words=this.words.slice(0),e},random:function(e){for(var t,i=[],r=function(t){t=t;var i=987654321,r=4294967295;return function(){var e=((i=36969*(65535&i)+(i>>16)&r)<<16)+(t=18e3*(65535&t)+(t>>16)&r)&r;return e/=4294967296,(e+=.5)*(.5<c.random()?1:-1)}},o=0;o<e;o+=4){var n=r(4294967296*(t||c.random()));t=987654071*n(),i.push(4294967296*n()|0)}return new d.init(i,e)}}),o=e.enc={},n=o.Hex={stringify:function(e){for(var t=e.words,i=e.sigBytes,r=[],o=0;o<i;o++){var n=t[o>>>2]>>>24-o%4*8&255;r.push((n>>>4).toString(16)),r.push((15&n).toString(16))}return r.join("")},parse:function(e){for(var t=e.length,i=[],r=0;r<t;r+=2)i[r>>>3]|=parseInt(e.substr(r,2),16)<<24-r%8*4;return new d.init(i,t/2)}},a=o.Latin1={stringify:function(e){for(var t=e.words,i=e.sigBytes,r=[],o=0;o<i;o++){var n=t[o>>>2]>>>24-o%4*8&255;r.push(String.fromCharCode(n))}return r.join("")},parse:function(e){for(var t=e.length,i=[],r=0;r<t;r++)i[r>>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new d.init(i,t)}},s=o.Utf8={stringify:function(e){try{return decodeURIComponent(escape(a.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return a.parse(unescape(encodeURIComponent(e)))}},l=t.BufferedBlockAlgorithm=r.extend({reset:function(){this._data=new d.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=s.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(e){var t=this._data,i=t.words,r=t.sigBytes,o=this.blockSize,n=r/(4*o),a=(n=e?c.ceil(n):c.max((0|n)-this._minBufferSize,0))*o,s=c.min(4*a,r);if(a){for(var l=0;l<a;l+=o)this._doProcessBlock(i,l);var u=i.splice(0,a);t.sigBytes-=s}return new d.init(u,s)},clone:function(){var e=r.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0}),t.Hasher=l.extend({cfg:r.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){l.reset.call(this),this._doReset()},update:function(e){return this._append(e),this._process(),this},finalize:function(e){return e&&this._append(e),this._doFinalize()},blockSize:16,_createHelper:function(i){return function(e,t){return new i.init(t).finalize(e)}},_createHmacHelper:function(i){return function(e,t){return new u.HMAC.init(i,t).finalize(e)}}}),u=e.algo={},e);return p},"object"==typeof i?t.exports=i=o():"function"==typeof define&&define.amd?define([],o):r.CryptoJS=o()},{}],126:[function(e,t,i){var r,o;r=this,o=function(e){var t,l;return l=(t=e).lib.WordArray,t.enc.Base64={stringify:function(e){var t=e.words,i=e.sigBytes,r=this._map;e.clamp();for(var o=[],n=0;n<i;n+=3)for(var a=(t[n>>>2]>>>24-n%4*8&255)<<16|(t[n+1>>>2]>>>24-(n+1)%4*8&255)<<8|t[n+2>>>2]>>>24-(n+2)%4*8&255,s=0;s<4&&n+.75*s<i;s++)o.push(r.charAt(a>>>6*(3-s)&63));var l=r.charAt(64);if(l)for(;o.length%4;)o.push(l);return o.join("")},parse:function(e){var t=e.length,i=this._map,r=this._reverseMap;if(!r){r=this._reverseMap=[];for(var o=0;o<i.length;o++)r[i.charCodeAt(o)]=o}var n=i.charAt(64);if(n){var a=e.indexOf(n);-1!==a&&(t=a)}return function(e,t,i){for(var r=[],o=0,n=0;n<t;n++)if(n%4){var a=i[e.charCodeAt(n-1)]<<n%4*2,s=i[e.charCodeAt(n)]>>>6-n%4*2;r[o>>>2]|=(a|s)<<24-o%4*8,o++}return l.create(r,o)}(e,t,r)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},e.enc.Base64},"object"==typeof i?t.exports=i=o(e("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)},{"./core":125}],127:[function(e,t,i){var r,o;r=this,o=function(e){return e.enc.Utf8},"object"==typeof i?t.exports=i=o(e("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)},{"./core":125}],128:[function(e,t,i){var r,o;r=this,o=function(e){return e.HmacSHA1},"object"==typeof i?t.exports=i=o(e("./core"),e("./sha1"),e("./hmac")):"function"==typeof define&&define.amd?define(["./core","./sha1","./hmac"],o):o(r.CryptoJS)},{"./core":125,"./hmac":129,"./sha1":130}],129:[function(e,t,i){var r,o;r=this,o=function(e){var t,i,u;i=(t=e).lib.Base,u=t.enc.Utf8,t.algo.HMAC=i.extend({init:function(e,t){e=this._hasher=new e.init,"string"==typeof t&&(t=u.parse(t));var i=e.blockSize,r=4*i;t.sigBytes>r&&(t=e.finalize(t)),t.clamp();for(var o=this._oKey=t.clone(),n=this._iKey=t.clone(),a=o.words,s=n.words,l=0;l<i;l++)a[l]^=1549556828,s[l]^=909522486;o.sigBytes=n.sigBytes=r,this.reset()},reset:function(){var e=this._hasher;e.reset(),e.update(this._iKey)},update:function(e){return this._hasher.update(e),this},finalize:function(e){var t=this._hasher,i=t.finalize(e);return t.reset(),t.finalize(this._oKey.clone().concat(i))}})},"object"==typeof i?t.exports=i=o(e("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)},{"./core":125}],130:[function(e,t,i){var r,o;r=this,o=function(e){var t,i,r,o,n,d,a;return i=(t=e).lib,r=i.WordArray,o=i.Hasher,n=t.algo,d=[],a=n.SHA1=o.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(e,t){for(var i=this._hash.words,r=i[0],o=i[1],n=i[2],a=i[3],s=i[4],l=0;l<80;l++){if(l<16)d[l]=0|e[t+l];else{var u=d[l-3]^d[l-8]^d[l-14]^d[l-16];d[l]=u<<1|u>>>31}var c=(r<<5|r>>>27)+s+d[l];c+=l<20?1518500249+(o&n|~o&a):l<40?1859775393+(o^n^a):l<60?(o&n|o&a|n&a)-1894007588:(o^n^a)-899497514,s=a,a=n,n=o<<30|o>>>2,o=r,r=c}i[0]=i[0]+r|0,i[1]=i[1]+o|0,i[2]=i[2]+n|0,i[3]=i[3]+a|0,i[4]=i[4]+s|0},_doFinalize:function(){var e=this._data,t=e.words,i=8*this._nDataBytes,r=8*e.sigBytes;return t[r>>>5]|=128<<24-r%32,t[14+(64+r>>>9<<4)]=Math.floor(i/4294967296),t[15+(64+r>>>9<<4)]=i,e.sigBytes=4*t.length,this._process(),this._hash},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}}),t.SHA1=o._createHelper(a),t.HmacSHA1=o._createHmacHelper(a),e.SHA1},"object"==typeof i?t.exports=i=o(e("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(r.CryptoJS)},{"./core":125}]},{},[6]);
\ No newline at end of file
diff --git a/src/plugins/auth/index.js b/src/plugins/auth/index.js
new file mode 100644
index 0000000..7e14fb0
--- /dev/null
+++ b/src/plugins/auth/index.js
@@ -0,0 +1,25 @@
+/**
+ * @description 鉴权指令
+ * 当传入的权限当前用户没有时,会移除该组件
+ * 用例:<Tag v-auth>text</Tag> 或者:<Tag v-auth="'user:编辑'">text</Tag>
+ * */
+import store from '@/store'
+
+export default {
+    inserted (el, binding, vnode) {
+        let btnText = ''
+        if(binding.value){
+            btnText = binding.value
+        }else{
+            btnText = `${vnode.context.$route.path}:${el.innerText}`
+        }
+        const btnPermissions = store.state.auth.btns
+
+        if (btnText && btnPermissions && btnPermissions.length) {
+            const isPermission = btnPermissions.includes(btnText)
+            if (!isPermission) {
+                el.parentNode && el.parentNode.removeChild(el)
+            }
+        }
+    }
+}
diff --git a/src/plugins/filters/index.js b/src/plugins/filters/index.js
new file mode 100644
index 0000000..4eb253f
--- /dev/null
+++ b/src/plugins/filters/index.js
@@ -0,0 +1,12 @@
+/**
+ * @description 返回缺省值
+ * 传入的如果是null,就返回'--'
+ * 用例:<Tag :default="val">text</Tag> 或者:<Tag>{{val | default}}</Tag>
+ * */
+const defaultShow = (val) => {
+    return val == null ? '--' : val
+}
+
+module.exports = {
+    defaultShow
+}
\ No newline at end of file
diff --git a/src/plugins/index.js b/src/plugins/index.js
new file mode 100644
index 0000000..c81b9a1
--- /dev/null
+++ b/src/plugins/index.js
@@ -0,0 +1,14 @@
+/**
+ * 插件
+ * */
+
+import directiveAuth from '@/plugins/auth';
+import throttle from '@/plugins/throttle';
+
+export default {
+    async install (Vue, options) {
+        // 指令
+        Vue.directive('auth', directiveAuth);
+        Vue.directive('throttle', throttle);
+    }
+}
\ No newline at end of file
diff --git a/src/plugins/requests/index.js b/src/plugins/requests/index.js
new file mode 100644
index 0000000..ff509cc
--- /dev/null
+++ b/src/plugins/requests/index.js
@@ -0,0 +1,141 @@
+import axios from 'axios'
+import util from '@/libs/util'
+import router from '@/router/index'
+import Setting from '@/setting'
+
+const service = axios.create({
+    baseURL: Setting.apiBaseURL,
+    timeout: 10000000
+})
+
+// post请求头
+service.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8'
+
+// 请求拦截器
+service.interceptors.request.use(config => {
+    util.getToken()
+    let token = util.local.get(Setting.tokenKey)
+    if(token) config.headers.token = token
+    return config
+},err => {
+    util.errorMsg({
+        message: '退出登陆',
+        onClose: function () {
+            router.push({name: '/login'})
+        }
+    })
+    return Promise.reject(err)
+})
+
+// 响应拦截器
+service.interceptors.response.use(
+    response => {
+        const res = response.data
+        if(res.status == 200 || res.status == 10000) {
+            return Promise.resolve(res).catch(e => {})
+        }else if(!res.status){
+            return Promise.resolve(res).catch(e => {})
+        }else {
+            util.errorMsg(res.errmessage)
+            return Promise.reject(res)
+        }
+    },
+    // 服务器状态码不是200的情况
+    error => {
+        if (error.response.status) {
+            switch (error.response.status) {
+                // 401: 未登录
+                // 未登录则跳转登录页面,并携带当前页面的路径
+                // 在登录成功后返回当前页面,这一步需要在登录页操作。
+                case 401:
+                    util.local.remove(Setting.storeKey)
+                    util.local.remove(Setting.tokenKey)
+                    util.errorMsg('登录过期,请重新登录')
+                    setTimeout(() => {
+                        router.replace({
+                            path: '/login',
+                            query: {
+                                redirect: router.currentRoute.fullPath
+                            }
+                        })
+                    }, 1000)
+                    break
+                case 500:
+                    util.errorMsg('网络错误')
+                    break
+                // 403 token过期
+                // 登录过期对用户进行提示
+                // 清除本地token和清空vuex中token对象
+                // 跳转登录页面
+                case 403:
+                    util.local.remove(Setting.storeKey)
+                    util.local.remove(Setting.tokenKey)
+                    util.errorMsg('登录过期,请重新登录')
+                    // 清除token
+                    // store.commit('loginSuccess', null);
+                    // 跳转登录页面,并将要浏览的页面fullPath传过去,登录成功后跳转需要访问的页面
+                    setTimeout(() => {
+                        router.replace({
+                            path: '/login',
+                            query: {
+                                redirect: router.currentRoute.fullPath
+                            }
+                        })
+                    }, 1000)
+                    break
+                // 404请求不存在
+                case 404:
+                    util.errorMsg('网络请求不存在!')
+                break
+                // 其他错误,直接抛出错误提示
+                default:
+                    util.errorMsg(error.response.data.message)
+                    Promise.reject(res)
+            }
+            return Promise.reject(error.response)
+        }
+    }
+);
+
+function get(url, params){
+    return new Promise((resolve, reject) =>{
+        service.get(url, {params: params}).then(res => {
+            resolve(res)
+        }).catch(err => {
+            reject(err)
+        })
+    })
+}
+
+function post(url, params){
+    return new Promise((resolve, reject) =>{
+        service.post(url,params).then(res => {
+            resolve(res)
+        }).catch(err => {
+            reject(err.data)
+        })
+    })
+}
+
+function del(url, params){
+    return new Promise((resolve, reject) =>{
+        service.delete(url, {
+            params
+        }).then(res => {
+            resolve(res)
+        }).catch(err => {
+            reject(err.data)
+        })
+    })
+}
+
+function put(url, params){
+    return new Promise((resolve, reject) =>{
+        service.put(url, params).then(res => {
+            resolve(res)
+        }).catch(err => {
+            reject(err.data)
+        })
+    })
+}
+export { get,post,del,put }
\ No newline at end of file
diff --git a/src/plugins/throttle/index.js b/src/plugins/throttle/index.js
new file mode 100644
index 0000000..7f286b3
--- /dev/null
+++ b/src/plugins/throttle/index.js
@@ -0,0 +1,18 @@
+/**
+ * @description 节流指令
+ * 限制连续快速点击按钮
+ * 用例:<Tag v-throttle>text</Tag>
+ * */
+
+export default{
+    inserted (el, binding, vnode) {
+        el.addEventListener('click', () => {
+            if (!el.disabled) {
+                el.disabled = true
+                setTimeout(() => {
+                    el.disabled = false
+                }, binding.value || 1000)
+            }
+        })
+    }
+}
\ No newline at end of file
diff --git a/src/router/index.js b/src/router/index.js
new file mode 100644
index 0000000..6601291
--- /dev/null
+++ b/src/router/index.js
@@ -0,0 +1,22 @@
+import Vue from 'vue'
+import Router from 'vue-router'
+import routes from './routes'
+import Setting from '@/setting'
+
+Vue.use(Router)
+
+const createRouter = () => new Router({
+    mode: Setting.routerMode,
+    base: process.env.BASE_URL,
+    scrollBehavior: () => ({ y: 0 }),
+    routes
+})
+
+export function resetRouter () {
+    const newRouter = createRouter()
+    router.matcher = newRouter.matcher
+}
+
+let router = createRouter()
+
+export default router
\ No newline at end of file
diff --git a/src/router/modules/ass.js b/src/router/modules/ass.js
new file mode 100644
index 0000000..d7ea696
--- /dev/null
+++ b/src/router/modules/ass.js
@@ -0,0 +1,23 @@
+import BasicLayout from '@/layouts/home'
+
+const meta = {}
+
+const pre = 'ass-'
+
+export default {
+    path: '/ass',
+    name: 'ass',
+    redirect: {
+        name: `${pre}list`
+    },
+    meta,
+    component: BasicLayout,
+    children: [
+        {
+            name: `${pre}list`,
+            path: `list`,
+            component: () => import('@/pages/ass/list'),
+            meta: { title: '考核列表' }
+        },
+    ]
+};
\ No newline at end of file
diff --git a/src/router/modules/index.js b/src/router/modules/index.js
new file mode 100644
index 0000000..ec9fd1d
--- /dev/null
+++ b/src/router/modules/index.js
@@ -0,0 +1,23 @@
+import BasicLayout from '@/layouts/home';
+
+const meta = {};
+
+const pre = 'index-';
+
+export default {
+    path: '/index',
+    name: 'index',
+    redirect: {
+        name: `${pre}list`
+    },
+    meta,
+    component: BasicLayout,
+    children: [
+        {
+            name: `${pre}list`,
+            path: `list`,
+            component: () => import('@/pages/index/list'),
+            meta: { title: '首页' }
+        },
+    ]
+};
diff --git a/src/router/modules/preview.js b/src/router/modules/preview.js
new file mode 100644
index 0000000..7fcaf35
--- /dev/null
+++ b/src/router/modules/preview.js
@@ -0,0 +1,23 @@
+import BasicLayout from '@/layouts/home'
+
+const meta = {}
+
+const pre = 'preview-'
+
+export default {
+    path: '/preview',
+    name: 'preview',
+    redirect: {
+        name: `${pre}list`
+    },
+    meta,
+    component: BasicLayout,
+    children: [
+        {
+            name: `${pre}list`,
+            path: `list`,
+            component: () => import('@/pages/preview/list'),
+            meta: { title: '课前预习' }
+        },
+    ]
+};
\ No newline at end of file
diff --git a/src/router/modules/record.js b/src/router/modules/record.js
new file mode 100644
index 0000000..e33367b
--- /dev/null
+++ b/src/router/modules/record.js
@@ -0,0 +1,28 @@
+import BasicLayout from '@/layouts/home'
+
+const meta = {}
+
+const pre = 'record-'
+
+export default {
+    path: '/record',
+    name: 'record',
+    redirect: {
+        name: `${pre}list`
+    },
+    meta,
+    component: BasicLayout,
+    children: [
+        {
+            name: `${pre}list`,
+            path: `list`,
+            component: () => import('@/pages/record/list'),
+            meta: { title: '实验记录' }
+        },{
+            name: `${pre}show`,
+            path: `show`,
+            component: () => import('@/pages/record/show'),
+            meta: { title: '查看报告' }
+        },
+    ]
+};
\ No newline at end of file
diff --git a/src/router/modules/setting.js b/src/router/modules/setting.js
new file mode 100644
index 0000000..2559db6
--- /dev/null
+++ b/src/router/modules/setting.js
@@ -0,0 +1,23 @@
+import BasicLayout from '@/layouts/home'
+
+const meta = {}
+
+const pre = 'setting-'
+
+export default {
+    path: '/setting',
+    name: 'setting',
+    redirect: {
+        name: `${pre}person`
+    },
+    meta,
+    component: BasicLayout,
+    children: [
+        {
+            name: `${pre}person`,
+            path: `person`,
+            component: () => import('@/pages/setting/person'),
+            meta: { title: '个人中心' }
+        },
+    ]
+};
\ No newline at end of file
diff --git a/src/router/modules/station.js b/src/router/modules/station.js
new file mode 100644
index 0000000..b8d4bbb
--- /dev/null
+++ b/src/router/modules/station.js
@@ -0,0 +1,23 @@
+import BasicLayout from '@/layouts/home'
+
+const meta = {}
+
+const pre = 'station-'
+
+export default {
+    path: '/station',
+    name: 'station',
+    redirect: {
+        name: `${pre}list`
+    },
+    meta,
+    component: BasicLayout,
+    children: [
+        {
+            name: `${pre}list`,
+            path: `list`,
+            component: () => import('@/pages/station/list'),
+            meta: { title: '实验台' }
+        },
+    ]
+};
\ No newline at end of file
diff --git a/src/router/permission.js b/src/router/permission.js
new file mode 100644
index 0000000..e90d86e
--- /dev/null
+++ b/src/router/permission.js
@@ -0,0 +1,27 @@
+import router from './index'
+import Setting from '@/setting'
+import util from '@/libs/util'
+
+router.beforeEach((to, from, next) => {
+    document.title = Setting.titleSuffix
+    const role = util.local.get(Setting.tokenKey)
+    if (!role && to.path !== '/login') {
+        next('/login')
+    } else if(role && to.path == '/login') {
+        next('/index')
+    } else {
+        let mg = from.query.mg
+        if(mg){
+            if(!to.query.mg){
+                next({
+                    path: to.path,
+                    query: {mg}
+                })
+            }else{
+                next()
+            }
+        }else{
+            next()
+        }
+    }
+});
\ No newline at end of file
diff --git a/src/router/routes.js b/src/router/routes.js
new file mode 100644
index 0000000..94e940e
--- /dev/null
+++ b/src/router/routes.js
@@ -0,0 +1,80 @@
+import index from './modules/index'
+import preview from './modules/preview'
+import station from './modules/station'
+import ass from './modules/ass'
+import record from './modules/record'
+import setting from './modules/setting'
+
+import BasicLayout from '@/layouts/home'
+
+const frameIn = [
+    {
+        path: '/',
+        redirect: '/login',
+    },
+    {
+        path: '/index',
+        redirect: '/preview',
+    },
+    {
+        path: '/',
+        component: () => BasicLayout,
+        meta: { title: '首页' },
+        children: []
+    },
+    index,
+    preview,
+    station,
+    ass,
+    record,
+    setting
+]
+
+/**
+ * 在主框架之外显示
+ */
+
+const frameOut = [
+    // 登录
+    {
+        path: '/login',
+        name: 'login',
+        meta: {
+            title: '登录'
+        },
+        component: () => import('@/pages/account/login')
+    }
+];
+
+/**
+ * 错误页面
+ */
+
+const errorPage = [
+    {
+        path: '/403',
+        name: '403',
+        meta: {
+            title: '403'
+        },
+        component: () => import('@/pages/exception/error/403')
+    },
+    {
+        path: '*',
+        name: '404',
+        meta: {
+            title: '404'
+        },
+        component: () => import('@/pages/exception/error/404')
+    }
+];
+
+// 导出需要显示菜单的
+export const frameInRoutes = frameIn;
+
+// 重新组织后导出
+export default [
+    ...frameIn,
+    ...frameOut,
+    ...errorPage
+];
\ No newline at end of file
diff --git a/src/setting.env.js b/src/setting.env.js
new file mode 100644
index 0000000..d41b26b
--- /dev/null
+++ b/src/setting.env.js
@@ -0,0 +1,21 @@
+/**
+ * 开发配置
+ * */
+
+const env = process.env.NODE_ENV;
+
+const Setting = {
+    // 是否使用 Mock 的数据,默认 开发环境为 true,生产环境为 false
+    isMock: true,
+    // 部署应用包时的基本 URL
+    publicPath: env === 'development' ? './' : '',
+    // 生产环境构建文件的目录名
+    outputDir: 'dist',
+    // 放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录。
+    assetsDir: 'static',
+    // 开发环境每次保存时 lint 代码,会将 lint 错误输出为编译警告
+    // true || false || error
+    lintOnSave: true,
+};
+
+module.exports = Setting;
diff --git a/src/setting.js b/src/setting.js
new file mode 100644
index 0000000..8d3332a
--- /dev/null
+++ b/src/setting.js
@@ -0,0 +1,148 @@
+/**
+ * 业务配置
+ * */
+
+const isDev = process.env.NODE_ENV === 'development'
+const url = location.host
+const isHh = location.host.includes('10.196.131.73') //是否是河海版本
+const isBeta = process.env.NODE_ENV === 'development' || location.host.includes('liuwanr.cn') //是否是职站测试
+
+const Setting = {
+    /**
+     * 基础配置
+     * */
+    // 网页标题的后缀
+    titleSuffix: isHh ? '学生端' : '职站',
+    // 路由模式,可选值为 history 或 hash
+    routerMode: 'hash',
+    // 页面切换时,是否显示模拟的进度条
+    showProgressBar: true,
+    // 接口请求地址
+    apiBaseURL: (isDev || url.includes('liuwanr.cn')) ? 'http://www.liuwanr.cn/' : (url.includes('10.196.131.73') ? 'http://10.196.131.73/' : 'http://www.occupationlab.com/'),
+    // 是否是河海版本
+    isHh,
+    // 学校id,河海为729,职站为2105
+    schoolId: isHh ? 729 : 2105,
+    // 默认系统id
+    systemId: 1,
+    // 子系统列表.改的时候留意要改的是哪个环境,别影响到了其他环境
+    systemList: isHh ? [{
+        id: 1,
+        label: 'Python程序设计教学系统'
+    },{
+        id: 4,
+        label: '经济金融建模实验教学系统'
+    },{
+        id: 6,
+        label: '金融随机过程实验教学系统'
+    },{
+        id: 7,
+        label: '量化投资策略建模实验教学系统'
+    },{
+        id: 8,
+        label: '大数据分析实验教学系统'
+    }] : (isBeta ? [{
+        id: 1,
+        label: 'Python程序设计教学系统'
+    }
+    // 下面这两个是川大和科大子系统,目前没有在职站开启,只有在科大川大才会开放对应的子系统
+    // ,{
+    //     id: 2,
+    //     label: '跨国仿真系统'
+    // },{
+    //     id: 3,
+    //     label: '期权期货系统'
+    // }
+    ,{
+        id: 4,
+        label: '经济金融建模实验教学系统'
+    },{
+        id: 5,
+        label: 'Python可视化实验教学系统'
+    },{
+        id: 6,
+        label: '金融随机过程实验教学系统'
+    },{
+        id: 7,
+        label: '量化投资策略建模实验教学系统'
+    },{
+        id: 8,
+        label: '大数据分析实验教学系统'
+    },{
+        id: 9,
+        label: 'Python数据清洗教学实验系统'
+    },{
+        id: 10,
+        label: 'Python数据采集(爬虫)教学实验系统'
+    }] : [{
+        id: 1,
+        label: 'Python程序设计教学系统'
+    },{
+        id: 4,
+        label: '经济金融建模实验教学系统'
+    },{
+        id: 5,
+        label: 'Python可视化实验教学系统'
+    },{
+        id: 6,
+        label: '金融随机过程实验教学系统'
+    },{
+        id: 7,
+        label: '量化投资策略建模实验教学系统'
+    },{
+        id: 8,
+        label: '大数据分析实验教学系统'
+    },{
+        id: 9,
+        label: 'Python数据清洗教学实验系统'
+    },{
+        id: 10,
+        label: 'Python数据采集(爬虫)教学实验系统'
+    }]),
+    // 长时间未操作,自动退出登录时间
+    autoLogoutTime: 3600000,
+    // 接口请求返回错误时,弹窗的持续时间,单位:秒
+    modalDuration: 3,
+    // 接口请求返回错误时,弹窗的类型,可选值为 Message 或 Notice
+    errorModalType: 'Message',
+    // Cookies 默认保存时间,单位:天
+    cookiesExpires: 1,
+    // token在localStorage的时间(毫秒)
+    tokenExpires: 1296000000,
+    /**
+     * 免登录保存的token的key
+     */
+    tokenKey: 'oc_client_token',
+    /**
+     * sessionStorage里state的key
+     */
+    storeKey: 'oc_client_store',
+    /**
+     * 默认密码
+     */
+    initialPassword: '111aaa',
+    /**
+    * 多语言配置
+    * */
+    i18n: {
+        // 默认语言
+        default: 'zh',
+        // 是否根据用户电脑配置自动设置语言(仅第一次有效)
+        auto: false
+    },
+    /**
+     * 布局配置
+     * */
+    layout: {
+        
+    },
+    /**
+     * 功能配置
+     * */
+    // 相同路由,不同参数间进行切换,是否强力更新
+    sameRouteForceUpdate: false,
+    // 是否使用动态路由
+    dynamicRoute: false,
+};
+
+export default Setting;
diff --git a/src/store/getters.js b/src/store/getters.js
new file mode 100644
index 0000000..9afd359
--- /dev/null
+++ b/src/store/getters.js
@@ -0,0 +1,4 @@
+const getters = {
+    
+}
+export default getters
\ No newline at end of file
diff --git a/src/store/index.js b/src/store/index.js
new file mode 100644
index 0000000..5371a5c
--- /dev/null
+++ b/src/store/index.js
@@ -0,0 +1,25 @@
+import Vue from 'vue';
+import Vuex from 'vuex';
+import getters from './getters'
+
+Vue.use(Vuex);
+
+// https://webpack.js.org/guides/dependency-management/#requirecontext
+const modulesFiles = require.context('./modules', true, /\.js$/)
+
+// you do not need `import app from './modules/app'`
+// it will auto require all vuex module from modules file
+const modules = modulesFiles.keys().reduce((modules, modulePath) => {
+  // set './app.js' => 'app'
+  const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1')
+  const value = modulesFiles(modulePath)
+  modules[moduleName] = value.default
+  return modules
+}, {})
+
+const store = new Vuex.Store({
+    modules,
+    getters
+})
+
+export default store
\ No newline at end of file
diff --git a/src/store/modules/layout.js b/src/store/modules/layout.js
new file mode 100644
index 0000000..535ebc4
--- /dev/null
+++ b/src/store/modules/layout.js
@@ -0,0 +1,24 @@
+/**
+ * 布局管理
+ * */
+
+ // 是否IE
+function isIE() {
+    if (!!window.ActiveXObject || "ActiveXObject" in window) return true
+    return false
+}
+
+export default {
+    namespaced: true,
+    state: {
+        isIE: isIE()
+    },
+    mutations: {
+        SET_IE: (state, val) => {
+            state.isIE = val
+        },
+    },
+    actions: {
+        
+    }
+}
\ No newline at end of file
diff --git a/src/store/modules/project.js b/src/store/modules/project.js
new file mode 100644
index 0000000..0374181
--- /dev/null
+++ b/src/store/modules/project.js
@@ -0,0 +1,26 @@
+/**
+ * 项目、系统相关
+ * */
+ export default {
+    namespaced: true,
+    state: {
+        lastSystemId: 1,
+        lastRecordType: 'practice'
+    },
+    mutations: {
+        SET_SYSTEM_ID: (state, systemId) => {
+            state.lastSystemId = systemId
+        },
+        SET_RECORD: (state, type) => {
+            state.lastRecordType = type
+        },
+    },
+    actions: {
+        setSystemId({ state,commit },systemId) {
+            commit('SET_SYSTEM_ID',systemId)
+        },
+        setRecord({ state,commit },type) {
+            commit('SET_RECORD',type)
+        },
+    }
+}
\ No newline at end of file
diff --git a/src/store/modules/user.js b/src/store/modules/user.js
new file mode 100644
index 0000000..a7f5f6a
--- /dev/null
+++ b/src/store/modules/user.js
@@ -0,0 +1,82 @@
+
+import Setting from '@/setting'
+import util from '@/libs/util'
+import {post,get,del,put} from '@/plugins/requests/index.js'
+import api from '@/api'
+import addRoutes from '@/libs/route/addRoutes'
+
+/**
+ * 用户信息
+ * */
+export default {
+    namespaced: true,
+    state: {
+        avatar: 'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png',
+        userId: '',
+        studentId: '',
+        userName: '',
+        schoolId: '',
+        roleId: '',
+        dataTime: ''
+    },
+    mutations: {
+        SET_INFO: (state, info) => {
+            if(info.avatar) state.avatar = info.avatar
+            state.userId = info.userId
+            state.studentId = info.studentId
+            state.schoolId = info.schoolId
+            state.userName = info.userName
+            state.roleId = info.roleId
+            state.dataTime = info.dataTime
+        },
+        SET_AVATAR: (state, avatar) => {
+            state.avatar = avatar
+        },
+        SET_USERNAME: (state, userName) => {
+            state.userName = userName
+        },
+    },
+    actions: {
+        login({ state,commit }, userInfo) {
+            const { account, password, source } = userInfo
+            return new Promise((resolve, reject) => {
+                get(api.logins,{
+                    account,
+                    password,
+                    source,
+                }).then(res => {
+                    if(res.status == 200){
+                        let data = res.message.retvalue
+                        res.message.listValue && Setting.dynamicRoute && addRoutes(res.message.listValue)
+                        util.local.set(Setting.tokenKey,data.token,Setting.tokenExpires)
+                        util.successMsg('登录成功')
+                        commit('SET_INFO',data)
+                        resolve()
+                    }else{
+                        util.errorMsg(res.errmessage)
+                        reject(res)
+                    }
+                }).catch(error => {
+                    reject(error)
+                })
+            })
+        },
+        logout({ commit, state, dispatch }) {
+            return new Promise((resolve, reject) => {
+                util.local.remove(Setting.storeKey)
+                util.local.remove(Setting.tokenKey)
+                location.reload()
+                resolve()
+            })
+        },
+        setAvatar({ state,commit },avatar) {
+            commit('SET_AVATAR',avatar)
+        },
+        setInfo({ state,commit },info) {
+            commit('SET_INFO',info)
+        },
+        setUserName({ state,commit },userName) {
+            commit('SET_USERNAME',userName)
+        },
+    }
+}
\ No newline at end of file
diff --git a/src/styles/common.scss b/src/styles/common.scss
new file mode 100644
index 0000000..0272d6d
--- /dev/null
+++ b/src/styles/common.scss
@@ -0,0 +1,248 @@
+@import "./default/index.scss";
+
+@font-face{
+    font-family: youshe;
+    src: url('font/YouSheBiaoTiHei.ttf');
+}
+
+[v-cloak] {
+    display: none;
+}
+
+.flex-between{
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+}
+
+::-webkit-scrollbar {
+    width: 8px;
+    height: 8px;
+}
+::-webkit-scrollbar-thumb {
+    width: 5px;
+    border-radius: 6px;
+    background: rgba(142,123,253,.75);
+}
+
+.p-title{
+    padding-left: 5px;
+    margin-bottom: 24px;
+    line-height: 1;
+    font-size: 14px;
+    color: #585858;
+    border-left: 3px solid $--color-primary;
+}
+
+.el-input{
+    .el-input__inner{
+        border-color: rgba(0, 0, 0, 0.15);
+    }
+}
+
+.filter{
+    display: inline-flex;
+    align-items: center;
+    flex: 1;
+    li{
+        display: inline-flex;
+        align-items: center;
+        margin-right: 30px;
+        label{
+            margin-right: 10px;
+            font-size: 14px;
+            line-height: 14px;
+            color: rgba(0,0,0,.65);
+            white-space: nowrap;
+        }
+        .el-radio{
+            margin-right: 10px!important;
+            .el-radio__input{
+                display: none!important;
+            }
+        }
+    }
+}
+.page{
+    position: relative;
+    padding: 24px;
+    background-color: #fff;
+    border-radius: 8px;
+    .tool{
+        display: flex;
+        justify-content: space-between;
+        margin-bottom: 24px;
+        
+        .single-choice{
+            dl {
+                display: flex;
+                line-height: 30px;
+                dt {
+                    color: rgba(0,0,0,.65);
+                    font-size: 14px;
+                    white-space: nowrap;
+                }
+                dd {
+                    display: inline-flex;
+                    align-items: center;
+                    flex-wrap: wrap;
+                    span {
+                        padding: 0 10px;
+                        margin: 0 10px;
+                        color: #333;
+                        font-size: 14px;
+                        line-height: 1.8;
+                        white-space: nowrap;
+
+                        cursor: pointer;
+                        &:hover {
+                            color: $--color-primary;
+                        }
+                        &.active {
+                            border-radius: 4px;
+                            color: #fff;
+                            background-color: $--color-primary;
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+.pagination {
+    margin: 20px 0;
+    text-align: center;
+    button,.number{
+        color: rgba(0,0,0,.65) !important;
+        background-color: transparent !important;
+        border: 1px solid rgba(0, 0, 0, 0.15) !important;
+        border-radius: 4px !important;
+    }
+    button i{
+        color: #333;
+    }
+    .active{
+        color: #fff !important;
+        background-color: $--color-primary !important;
+    }
+}
+
+.el-table{
+    border-radius: 8px;
+    border: 1px solid rgba(0, 0, 0, 0.06);
+    border-bottom: 0;
+    th{
+        background: $--color-primary !important;
+        .cell{
+            color: #fff;
+            font-size: 14px;
+            font-weight: normal;
+            .el-checkbox{
+                &:before{
+                    opacity: 1;
+                }
+            }
+        }
+    }
+}
+
+.el-message{
+    padding: 11px 20px;
+    .el-message__icon{
+        font-size: 16px;
+    }
+    .el-message__content{
+        font-size: 14px;
+        color: rgba(0, 0, 0, 0.65);
+    }
+    .el-icon-close{
+        font-size: 14px;
+        color: #92998d;
+    }
+    .el-message--success{
+        border: 1px solid #B7EB8F;
+        background: #F6FFED;
+        .el-message__icon{
+            color: #00c700;
+        }
+    }
+    .el-message--warning{
+        border: 1px solid #FFE58F;
+        background: #FFFBE6;
+        .el-message__icon{
+            color: #ffa900;
+        }
+    }
+}
+
+.el-message-box{
+    padding-bottom: 24px;
+    .el-message-box__header{
+        padding: 32px 32px 12px 50px;
+        span{
+            font-size: 16px;
+            color: rgba(0, 0, 0, 0.85);
+            font-weight: 500;
+        }
+    }
+    .el-message-box__status{
+        top: -30px;
+    }
+    .el-message-box__status + .el-message-box__message{
+        font-size: 14px;
+        color: rgba(0, 0, 0, 0.65);
+    }
+    .el-message-box__btns{
+        padding-right: 32px;
+        &.el-icon-warning{
+            color: #ffa900;
+        }
+    }
+    &:not(.normal){
+        .el-button--primary{
+            color: #606266;
+            background: #fff;
+            border-color: #DCDFE6;
+            &:hover{
+                color: $--color-primary;
+                border-color: #efbdbb;
+                background-color: #fae9e8;
+            }
+        }
+    }
+}
+
+.el-dialog__wrapper{
+    .el-dialog{
+        border-radius: 4px;
+        .el-dialog__header{
+            border-bottom: 1px solid rgba(0, 0, 0, 0.06);
+            .el-dialog__title{
+                font-size: 16px;
+                color: rgba(0, 0, 0, 0.85);
+            }
+        }
+        .el-dialog__footer{
+            padding: 10px 16px;
+            border-top: 1px solid rgba(0, 0, 0, 0.06);
+            .el-button{
+                font-size: 14px;
+                border-radius: 4px;
+                border-color: rgba(0, 0, 0, 0.15);
+            }
+        }
+    }
+}
+
+.el-tooltip__popper{
+    width: 300px;
+}
+
+@media(max-width: 1600px){
+    .el-table{
+        .el-switch__label--right.is-active{
+            left: 8px;
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/styles/default/index.scss b/src/styles/default/index.scss
new file mode 100644
index 0000000..4419db2
--- /dev/null
+++ b/src/styles/default/index.scss
@@ -0,0 +1,7 @@
+/* 改变主题色变量 */
+
+$--color-primary: #9076FF;
+
+/* 改变 icon 字体路径变量,必需 */
+$--font-path: '~element-ui/lib/theme-chalk/fonts';
+@import "~element-ui/packages/theme-chalk/src/index";
\ No newline at end of file
diff --git a/src/styles/font/YouSheBiaoTiHei.ttf b/src/styles/font/YouSheBiaoTiHei.ttf
new file mode 100644
index 0000000..3729151
Binary files /dev/null and b/src/styles/font/YouSheBiaoTiHei.ttf differ
diff --git a/src/styles/font/icon/demo.css b/src/styles/font/icon/demo.css
new file mode 100644
index 0000000..a67054a
--- /dev/null
+++ b/src/styles/font/icon/demo.css
@@ -0,0 +1,539 @@
+/* Logo 字体 */
+@font-face {
+  font-family: "iconfont logo";
+  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
+  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
+}
+
+.logo {
+  font-family: "iconfont logo";
+  font-size: 160px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+/* tabs */
+.nav-tabs {
+  position: relative;
+}
+
+.nav-tabs .nav-more {
+  position: absolute;
+  right: 0;
+  bottom: 0;
+  height: 42px;
+  line-height: 42px;
+  color: #666;
+}
+
+#tabs {
+  border-bottom: 1px solid #eee;
+}
+
+#tabs li {
+  cursor: pointer;
+  width: 100px;
+  height: 40px;
+  line-height: 40px;
+  text-align: center;
+  font-size: 16px;
+  border-bottom: 2px solid transparent;
+  position: relative;
+  z-index: 1;
+  margin-bottom: -1px;
+  color: #666;
+}
+
+
+#tabs .active {
+  border-bottom-color: #f00;
+  color: #222;
+}
+
+.tab-container .content {
+  display: none;
+}
+
+/* 页面布局 */
+.main {
+  padding: 30px 100px;
+  width: 960px;
+  margin: 0 auto;
+}
+
+.main .logo {
+  color: #333;
+  text-align: left;
+  margin-bottom: 30px;
+  line-height: 1;
+  height: 110px;
+  margin-top: -50px;
+  overflow: hidden;
+  *zoom: 1;
+}
+
+.main .logo a {
+  font-size: 160px;
+  color: #333;
+}
+
+.helps {
+  margin-top: 40px;
+}
+
+.helps pre {
+  padding: 20px;
+  margin: 10px 0;
+  border: solid 1px #e7e1cd;
+  background-color: #fffdef;
+  overflow: auto;
+}
+
+.icon_lists {
+  width: 100% !important;
+  overflow: hidden;
+  *zoom: 1;
+}
+
+.icon_lists li {
+  width: 100px;
+  margin-bottom: 10px;
+  margin-right: 20px;
+  text-align: center;
+  list-style: none !important;
+  cursor: default;
+}
+
+.icon_lists li .code-name {
+  line-height: 1.2;
+}
+
+.icon_lists .icon {
+  display: block;
+  height: 100px;
+  line-height: 100px;
+  font-size: 42px;
+  margin: 10px auto;
+  color: #333;
+  -webkit-transition: font-size 0.25s linear, width 0.25s linear;
+  -moz-transition: font-size 0.25s linear, width 0.25s linear;
+  transition: font-size 0.25s linear, width 0.25s linear;
+}
+
+.icon_lists .icon:hover {
+  font-size: 100px;
+}
+
+.icon_lists .svg-icon {
+  /* 通过设置 font-size 来改变图标大小 */
+  width: 1em;
+  /* 图标和文字相邻时,垂直对齐 */
+  vertical-align: -0.15em;
+  /* 通过设置 color 来改变 SVG 的颜色/fill */
+  fill: currentColor;
+  /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
+      normalize.css 中也包含这行 */
+  overflow: hidden;
+}
+
+.icon_lists li .name,
+.icon_lists li .code-name {
+  color: #666;
+}
+
+/* markdown 样式 */
+.markdown {
+  color: #666;
+  font-size: 14px;
+  line-height: 1.8;
+}
+
+.highlight {
+  line-height: 1.5;
+}
+
+.markdown img {
+  vertical-align: middle;
+  max-width: 100%;
+}
+
+.markdown h1 {
+  color: #404040;
+  font-weight: 500;
+  line-height: 40px;
+  margin-bottom: 24px;
+}
+
+.markdown h2,
+.markdown h3,
+.markdown h4,
+.markdown h5,
+.markdown h6 {
+  color: #404040;
+  margin: 1.6em 0 0.6em 0;
+  font-weight: 500;
+  clear: both;
+}
+
+.markdown h1 {
+  font-size: 28px;
+}
+
+.markdown h2 {
+  font-size: 22px;
+}
+
+.markdown h3 {
+  font-size: 16px;
+}
+
+.markdown h4 {
+  font-size: 14px;
+}
+
+.markdown h5 {
+  font-size: 12px;
+}
+
+.markdown h6 {
+  font-size: 12px;
+}
+
+.markdown hr {
+  height: 1px;
+  border: 0;
+  background: #e9e9e9;
+  margin: 16px 0;
+  clear: both;
+}
+
+.markdown p {
+  margin: 1em 0;
+}
+
+.markdown>p,
+.markdown>blockquote,
+.markdown>.highlight,
+.markdown>ol,
+.markdown>ul {
+  width: 80%;
+}
+
+.markdown ul>li {
+  list-style: circle;
+}
+
+.markdown>ul li,
+.markdown blockquote ul>li {
+  margin-left: 20px;
+  padding-left: 4px;
+}
+
+.markdown>ul li p,
+.markdown>ol li p {
+  margin: 0.6em 0;
+}
+
+.markdown ol>li {
+  list-style: decimal;
+}
+
+.markdown>ol li,
+.markdown blockquote ol>li {
+  margin-left: 20px;
+  padding-left: 4px;
+}
+
+.markdown code {
+  margin: 0 3px;
+  padding: 0 5px;
+  background: #eee;
+  border-radius: 3px;
+}
+
+.markdown strong,
+.markdown b {
+  font-weight: 600;
+}
+
+.markdown>table {
+  border-collapse: collapse;
+  border-spacing: 0px;
+  empty-cells: show;
+  border: 1px solid #e9e9e9;
+  width: 95%;
+  margin-bottom: 24px;
+}
+
+.markdown>table th {
+  white-space: nowrap;
+  color: #333;
+  font-weight: 600;
+}
+
+.markdown>table th,
+.markdown>table td {
+  border: 1px solid #e9e9e9;
+  padding: 8px 16px;
+  text-align: left;
+}
+
+.markdown>table th {
+  background: #F7F7F7;
+}
+
+.markdown blockquote {
+  font-size: 90%;
+  color: #999;
+  border-left: 4px solid #e9e9e9;
+  padding-left: 0.8em;
+  margin: 1em 0;
+}
+
+.markdown blockquote p {
+  margin: 0;
+}
+
+.markdown .anchor {
+  opacity: 0;
+  transition: opacity 0.3s ease;
+  margin-left: 8px;
+}
+
+.markdown .waiting {
+  color: #ccc;
+}
+
+.markdown h1:hover .anchor,
+.markdown h2:hover .anchor,
+.markdown h3:hover .anchor,
+.markdown h4:hover .anchor,
+.markdown h5:hover .anchor,
+.markdown h6:hover .anchor {
+  opacity: 1;
+  display: inline-block;
+}
+
+.markdown>br,
+.markdown>p>br {
+  clear: both;
+}
+
+
+.hljs {
+  display: block;
+  background: white;
+  padding: 0.5em;
+  color: #333333;
+  overflow-x: auto;
+}
+
+.hljs-comment,
+.hljs-meta {
+  color: #969896;
+}
+
+.hljs-string,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-strong,
+.hljs-emphasis,
+.hljs-quote {
+  color: #df5000;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-type {
+  color: #a71d5d;
+}
+
+.hljs-literal,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-attribute {
+  color: #0086b3;
+}
+
+.hljs-section,
+.hljs-name {
+  color: #63a35c;
+}
+
+.hljs-tag {
+  color: #333333;
+}
+
+.hljs-title,
+.hljs-attr,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-selector-attr,
+.hljs-selector-pseudo {
+  color: #795da3;
+}
+
+.hljs-addition {
+  color: #55a532;
+  background-color: #eaffea;
+}
+
+.hljs-deletion {
+  color: #bd2c00;
+  background-color: #ffecec;
+}
+
+.hljs-link {
+  text-decoration: underline;
+}
+
+/* 代码高亮 */
+/* PrismJS 1.15.0
+https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
+/**
+ * prism.js default theme for JavaScript, CSS and HTML
+ * Based on dabblet (http://dabblet.com)
+ * @author Lea Verou
+ */
+code[class*="language-"],
+pre[class*="language-"] {
+  color: black;
+  background: none;
+  text-shadow: 0 1px white;
+  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+  text-align: left;
+  white-space: pre;
+  word-spacing: normal;
+  word-break: normal;
+  word-wrap: normal;
+  line-height: 1.5;
+
+  -moz-tab-size: 4;
+  -o-tab-size: 4;
+  tab-size: 4;
+
+  -webkit-hyphens: none;
+  -moz-hyphens: none;
+  -ms-hyphens: none;
+  hyphens: none;
+}
+
+pre[class*="language-"]::-moz-selection,
+pre[class*="language-"] ::-moz-selection,
+code[class*="language-"]::-moz-selection,
+code[class*="language-"] ::-moz-selection {
+  text-shadow: none;
+  background: #b3d4fc;
+}
+
+pre[class*="language-"]::selection,
+pre[class*="language-"] ::selection,
+code[class*="language-"]::selection,
+code[class*="language-"] ::selection {
+  text-shadow: none;
+  background: #b3d4fc;
+}
+
+@media print {
+
+  code[class*="language-"],
+  pre[class*="language-"] {
+    text-shadow: none;
+  }
+}
+
+/* Code blocks */
+pre[class*="language-"] {
+  padding: 1em;
+  margin: .5em 0;
+  overflow: auto;
+}
+
+:not(pre)>code[class*="language-"],
+pre[class*="language-"] {
+  background: #f5f2f0;
+}
+
+/* Inline code */
+:not(pre)>code[class*="language-"] {
+  padding: .1em;
+  border-radius: .3em;
+  white-space: normal;
+}
+
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+  color: slategray;
+}
+
+.token.punctuation {
+  color: #999;
+}
+
+.namespace {
+  opacity: .7;
+}
+
+.token.property,
+.token.tag,
+.token.boolean,
+.token.number,
+.token.constant,
+.token.symbol,
+.token.deleted {
+  color: #905;
+}
+
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+  color: #690;
+}
+
+.token.operator,
+.token.entity,
+.token.url,
+.language-css .token.string,
+.style .token.string {
+  color: #9a6e3a;
+  background: hsla(0, 0%, 100%, .5);
+}
+
+.token.atrule,
+.token.attr-value,
+.token.keyword {
+  color: #07a;
+}
+
+.token.function,
+.token.class-name {
+  color: #DD4A68;
+}
+
+.token.regex,
+.token.important,
+.token.variable {
+  color: #e90;
+}
+
+.token.important,
+.token.bold {
+  font-weight: bold;
+}
+
+.token.italic {
+  font-style: italic;
+}
+
+.token.entity {
+  cursor: help;
+}
diff --git a/src/styles/font/icon/demo_index.html b/src/styles/font/icon/demo_index.html
new file mode 100644
index 0000000..f13c801
--- /dev/null
+++ b/src/styles/font/icon/demo_index.html
@@ -0,0 +1,446 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8"/>
+  <title>IconFont Demo</title>
+  <link rel="shortcut icon" href="https://img.alicdn.com/tps/i4/TB1_oz6GVXXXXaFXpXXJDFnIXXX-64-64.ico" type="image/x-icon"/>
+  <link rel="stylesheet" href="https://g.alicdn.com/thx/cube/1.3.2/cube.min.css">
+  <link rel="stylesheet" href="demo.css">
+  <link rel="stylesheet" href="iconfont.css">
+  <script src="iconfont.js"></script>
+  <!-- jQuery -->
+  <script src="https://a1.alicdn.com/oss/uploads/2018/12/26/7bfddb60-08e8-11e9-9b04-53e73bb6408b.js"></script>
+  <!-- 代码高亮 -->
+  <script src="https://a1.alicdn.com/oss/uploads/2018/12/26/a3f714d0-08e6-11e9-8a15-ebf944d7534c.js"></script>
+</head>
+<body>
+  <div class="main">
+    <h1 class="logo"><a href="https://www.iconfont.cn/" title="iconfont 首页" target="_blank">&#xe86b;</a></h1>
+    <div class="nav-tabs">
+      <ul id="tabs" class="dib-box">
+        <li class="dib active"><span>Unicode</span></li>
+        <li class="dib"><span>Font class</span></li>
+        <li class="dib"><span>Symbol</span></li>
+      </ul>
+      
+      <a href="https://www.iconfont.cn/manage/index?manage_type=myprojects&projectId=1540265" target="_blank" class="nav-more">查看项目</a>
+      
+    </div>
+    <div class="tab-container">
+      <div class="content unicode" style="display: block;">
+          <ul class="icon_lists dib-box">
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe63d;</span>
+                <div class="name">已勾选32</div>
+                <div class="code-name">&amp;#xe63d;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe63e;</span>
+                <div class="name">未勾选32</div>
+                <div class="code-name">&amp;#xe63e;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe64a;</span>
+                <div class="name">未勾选40</div>
+                <div class="code-name">&amp;#xe64a;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe64b;</span>
+                <div class="name">已勾选40</div>
+                <div class="code-name">&amp;#xe64b;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe626;</span>
+                <div class="name">实 向右箭头-01</div>
+                <div class="code-name">&amp;#xe626;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe625;</span>
+                <div class="name">实 向下箭头-01</div>
+                <div class="code-name">&amp;#xe625;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe72d;</span>
+                <div class="name">加号-填充</div>
+                <div class="code-name">&amp;#xe72d;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe769;</span>
+                <div class="name">42指向上、上箭头</div>
+                <div class="code-name">&amp;#xe769;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe76b;</span>
+                <div class="name">44指向下、下箭头</div>
+                <div class="code-name">&amp;#xe76b;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe6e9;</span>
+                <div class="name">群蜂删除-充</div>
+                <div class="code-name">&amp;#xe6e9;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe614;</span>
+                <div class="name">qq</div>
+                <div class="code-name">&amp;#xe614;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe68a;</span>
+                <div class="name">微信-36</div>
+                <div class="code-name">&amp;#xe68a;</div>
+              </li>
+          
+          </ul>
+          <div class="article markdown">
+          <h2 id="unicode-">Unicode 引用</h2>
+          <hr>
+
+          <p>Unicode 是字体在网页端最原始的应用方式,特点是:</p>
+          <ul>
+            <li>兼容性最好,支持 IE6+,及所有现代浏览器。</li>
+            <li>支持按字体的方式去动态调整图标大小,颜色等等。</li>
+            <li>但是因为是字体,所以不支持多色。只能使用平台里单色的图标,就算项目里有多色图标也会自动去色。</li>
+          </ul>
+          <blockquote>
+            <p>注意:新版 iconfont 支持多色图标,这些多色图标在 Unicode 模式下将不能使用,如果有需求建议使用symbol 的引用方式</p>
+          </blockquote>
+          <p>Unicode 使用步骤如下:</p>
+          <h3 id="-font-face">第一步:拷贝项目下面生成的 <code>@font-face</code></h3>
+<pre><code class="language-css"
+>@font-face {
+  font-family: 'iconfont';
+  src: url('iconfont.eot');
+  src: url('iconfont.eot?#iefix') format('embedded-opentype'),
+      url('iconfont.woff2') format('woff2'),
+      url('iconfont.woff') format('woff'),
+      url('iconfont.ttf') format('truetype'),
+      url('iconfont.svg#iconfont') format('svg');
+}
+</code></pre>
+          <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
+<pre><code class="language-css"
+>.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+</code></pre>
+          <h3 id="-">第三步:挑选相应图标并获取字体编码,应用于页面</h3>
+<pre>
+<code class="language-html"
+>&lt;span class="iconfont"&gt;&amp;#x33;&lt;/span&gt;
+</code></pre>
+          <blockquote>
+            <p>"iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。</p>
+          </blockquote>
+          </div>
+      </div>
+      <div class="content font-class">
+        <ul class="icon_lists dib-box">
+          
+          <li class="dib">
+            <span class="icon iconfont icon-yigouxuan"></span>
+            <div class="name">
+              已勾选32
+            </div>
+            <div class="code-name">.icon-yigouxuan
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-weigouxuan"></span>
+            <div class="name">
+              未勾选32
+            </div>
+            <div class="code-name">.icon-weigouxuan
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-weigouxuan1"></span>
+            <div class="name">
+              未勾选40
+            </div>
+            <div class="code-name">.icon-weigouxuan1
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-yigouxuan1"></span>
+            <div class="name">
+              已勾选40
+            </div>
+            <div class="code-name">.icon-yigouxuan1
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-shixiangyoujiantou-"></span>
+            <div class="name">
+              实 向右箭头-01
+            </div>
+            <div class="code-name">.icon-shixiangyoujiantou-
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-shixiangxiajiantou-"></span>
+            <div class="name">
+              实 向下箭头-01
+            </div>
+            <div class="code-name">.icon-shixiangxiajiantou-
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-jiahao"></span>
+            <div class="name">
+              加号-填充
+            </div>
+            <div class="code-name">.icon-jiahao
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-up"></span>
+            <div class="name">
+              42指向上、上箭头
+            </div>
+            <div class="code-name">.icon-up
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-down"></span>
+            <div class="name">
+              44指向下、下箭头
+            </div>
+            <div class="code-name">.icon-down
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-delete"></span>
+            <div class="name">
+              群蜂删除-充
+            </div>
+            <div class="code-name">.icon-delete
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-qq"></span>
+            <div class="name">
+              qq
+            </div>
+            <div class="code-name">.icon-qq
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-weixin"></span>
+            <div class="name">
+              微信-36
+            </div>
+            <div class="code-name">.icon-weixin
+            </div>
+          </li>
+          
+        </ul>
+        <div class="article markdown">
+        <h2 id="font-class-">font-class 引用</h2>
+        <hr>
+
+        <p>font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。</p>
+        <p>与 Unicode 使用方式相比,具有如下特点:</p>
+        <ul>
+          <li>兼容性良好,支持 IE8+,及所有现代浏览器。</li>
+          <li>相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。</li>
+          <li>因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。</li>
+          <li>不过因为本质上还是使用的字体,所以多色图标还是不支持的。</li>
+        </ul>
+        <p>使用步骤如下:</p>
+        <h3 id="-fontclass-">第一步:引入项目下面生成的 fontclass 代码:</h3>
+<pre><code class="language-html">&lt;link rel="stylesheet" href="./iconfont.css"&gt;
+</code></pre>
+        <h3 id="-">第二步:挑选相应图标并获取类名,应用于页面:</h3>
+<pre><code class="language-html">&lt;span class="iconfont icon-xxx"&gt;&lt;/span&gt;
+</code></pre>
+        <blockquote>
+          <p>"
+            iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。</p>
+        </blockquote>
+      </div>
+      </div>
+      <div class="content symbol">
+          <ul class="icon_lists dib-box">
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-yigouxuan"></use>
+                </svg>
+                <div class="name">已勾选32</div>
+                <div class="code-name">#icon-yigouxuan</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-weigouxuan"></use>
+                </svg>
+                <div class="name">未勾选32</div>
+                <div class="code-name">#icon-weigouxuan</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-weigouxuan1"></use>
+                </svg>
+                <div class="name">未勾选40</div>
+                <div class="code-name">#icon-weigouxuan1</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-yigouxuan1"></use>
+                </svg>
+                <div class="name">已勾选40</div>
+                <div class="code-name">#icon-yigouxuan1</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-shixiangyoujiantou-"></use>
+                </svg>
+                <div class="name">实 向右箭头-01</div>
+                <div class="code-name">#icon-shixiangyoujiantou-</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-shixiangxiajiantou-"></use>
+                </svg>
+                <div class="name">实 向下箭头-01</div>
+                <div class="code-name">#icon-shixiangxiajiantou-</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-jiahao"></use>
+                </svg>
+                <div class="name">加号-填充</div>
+                <div class="code-name">#icon-jiahao</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-up"></use>
+                </svg>
+                <div class="name">42指向上、上箭头</div>
+                <div class="code-name">#icon-up</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-down"></use>
+                </svg>
+                <div class="name">44指向下、下箭头</div>
+                <div class="code-name">#icon-down</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-delete"></use>
+                </svg>
+                <div class="name">群蜂删除-充</div>
+                <div class="code-name">#icon-delete</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-qq"></use>
+                </svg>
+                <div class="name">qq</div>
+                <div class="code-name">#icon-qq</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-weixin"></use>
+                </svg>
+                <div class="name">微信-36</div>
+                <div class="code-name">#icon-weixin</div>
+            </li>
+          
+          </ul>
+          <div class="article markdown">
+          <h2 id="symbol-">Symbol 引用</h2>
+          <hr>
+
+          <p>这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇<a href="">文章</a>
+            这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:</p>
+          <ul>
+            <li>支持多色图标了,不再受单色限制。</li>
+            <li>通过一些技巧,支持像字体那样,通过 <code>font-size</code>, <code>color</code> 来调整样式。</li>
+            <li>兼容性较差,支持 IE9+,及现代浏览器。</li>
+            <li>浏览器渲染 SVG 的性能一般,还不如 png。</li>
+          </ul>
+          <p>使用步骤如下:</p>
+          <h3 id="-symbol-">第一步:引入项目下面生成的 symbol 代码:</h3>
+<pre><code class="language-html">&lt;script src="./iconfont.js"&gt;&lt;/script&gt;
+</code></pre>
+          <h3 id="-css-">第二步:加入通用 CSS 代码(引入一次就行):</h3>
+<pre><code class="language-html">&lt;style&gt;
+.icon {
+  width: 1em;
+  height: 1em;
+  vertical-align: -0.15em;
+  fill: currentColor;
+  overflow: hidden;
+}
+&lt;/style&gt;
+</code></pre>
+          <h3 id="-">第三步:挑选相应图标并获取类名,应用于页面:</h3>
+<pre><code class="language-html">&lt;svg class="icon" aria-hidden="true"&gt;
+  &lt;use xlink:href="#icon-xxx"&gt;&lt;/use&gt;
+&lt;/svg&gt;
+</code></pre>
+          </div>
+      </div>
+
+    </div>
+  </div>
+  <script>
+  $(document).ready(function () {
+      $('.tab-container .content:first').show()
+
+      $('#tabs li').click(function (e) {
+        var tabContent = $('.tab-container .content')
+        var index = $(this).index()
+
+        if ($(this).hasClass('active')) {
+          return
+        } else {
+          $('#tabs li').removeClass('active')
+          $(this).addClass('active')
+
+          tabContent.hide().eq(index).fadeIn()
+        }
+      })
+    })
+  </script>
+</body>
+</html>
diff --git a/src/styles/font/icon/iconfont.css b/src/styles/font/icon/iconfont.css
new file mode 100644
index 0000000..255baba
--- /dev/null
+++ b/src/styles/font/icon/iconfont.css
@@ -0,0 +1,71 @@
+@font-face {font-family: "iconfont";
+  src: url('iconfont.eot?t=1589437921018'); /* IE9 */
+  src: url('iconfont.eot?t=1589437921018#iefix') format('embedded-opentype'), /* IE6-IE8 */
+  url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAdgAAsAAAAADwwAAAcTAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCESgqOeIt2ATYCJAM0CxwABCAFhG0HgTMbpQxRlHBSFNlX2JThXqSJ4cz0aLyxzNkVgYOP2N97wQhUeQbPDZA1QByDeHha+9+5M7PrD1FpdI8mCSqJLulDJPFDxCQTvUQS6Qtka3ukU0/kuK8wfBBwMr1kmeTIb8hUohVh6lTeCHDCrRPPf5v6f+sQfS+QqgmpiZLNw+ZI6zMXZGL3nXY47elJFnjALaE4zjzyjJN773yuzM/7H4oZ9NV+v/q1g1ddvP1QmE5JlPRM7uAv5klMk0vWTBWTLpoJEUIja6hWSkNhOklN/ds4n0BvhyLMuZ6hKdArLC1Q4a4iG0Gfi1JaHEMbXtfsW8S8SpsepzuAJ+HLx28hoSepMmvby3e6LdC2EN2eV0ykW36MR/MlQFiJjGNAEej7WvtLgB6aM6evXtwH1glnTloW1snRYnBhky+LxyuL9glaGNmaDbRsJYR1tl+seImrgUGtEtLc//GMeo1WR9QYfUSrp7nohWgXDRrJBqpBcoAqkGagAGkBSiADQBlkEKiAbAI/N/mCYHoWi1HDEgWoBbGjlg7M/OpbgEMgnUf0fxab8kjK0tvq8cZ6/dpKwk4bNsXFx4bHR4RHcty4LVnR4xp/2TFxDN42tgefhUpEMeeqppXCU50JyT/gkVCD+EiEgl56LOkMN+6cAfyKs3dvomHU7fvnq96Uc/duIXMMqWmhNRoax1m8jNWfPorp2jlqumvHrolfe/2TcuIPCt3K589dhUNiT5OSEh4KoM9Jp1vK2GMnFjDdyaeFMrd06ki1gn9CmEz3OErpebmp+GzyAN+lMLw6dwkKh6Ve5dOnzp4W0+Y25TTfhHB10isXpxIB5GHDKcggnof+NCpCD+okAFyTPNGuRVgahmhLjZo1rnqnMlpD0ORJSluuY6jT+gPWHtaIeDKOaoradNDPruOQzulPGcBtz0C2YdbLrSFPIMGTrcNRDGC3YnJOm1JLceYK2sCWY5lqxICXIEU0gki2nkPFUteBwoqLMyTdKE7ZlOzE3yHfdSyOU2shl8RoxPJlx1bQ6C0Li3DLg+Sdi+c5evEkhtF3rBdfXpe0IiNcfW27+x6u5U4vs8zZZdu1R7Gblyc6AV9OB4Xp65HRDqcvw0Pi1DGbddntOKzYgkbhXJq+Y4bRVqszl746KdRPFV5FxSUb6XmKomd1yCb0nJbpz+aOIZskx0phXx8sHfNKyRjPsM8LGU/xJ9Qrv2JugdVBkBg/ZpUIDvpN0jfHD550XPKNDgkKEZ46l4dwq0sOxIecJlX2pxxA8GTwkCGMFqxVFf5PRZplCky9uCIQL/s/RFabTYZNkhtkQXFR28vKXwKUP5rZbFg+s3VAFTu5dBZG4G07t5tHuM2cFirh2BisrHKYoE8lzO1h/LkwjSD+VZF0qs1hQVK+d0xHOLN80q4B/P9utxQDmGt4DaEKE6Lc5lnI6VxDf/35owQHCAuKw95VG6l1bvXPY3J1slpepPBXdCx8EM+ubbd2tV48b2UtWLtYb89PZhvg2jsq5+zkBdIVVTFHfhEwNv0CxNiT02LKVxGSus1dt9VsXDZulogOJB1AkGQVg4e833uzaWatx7bPrLKyhBeBqlC3xGqNoe3MVQHmDmBs4jm+xFjW/sjcAgOiPOFawwe3bUeTa20vGNZgbV6tCtL/qEL/fmiFLjqCCDpZdQpkdKgx6tSuzlCdqnrMFsLMhWn9sKH4ezmjmvpp9Selw9oCS0Vtcbox4f967yYpc1lNwUzPAUT3N0R32yz0bof5Wblw2jzkuw4VkWFptzoKckHRUwszvHJS8IgkAfys2IvKr/LtZBa1LzvfHBmFD6/V9enLD7LLJD2tz7n3E8BkFcwVyA/DL8P0fCpXAdLntBfy9tQCpuUP2QBAWkwyYccYGYFWWc/HS8Of6pVNf1r8p8n48bn+wPLzm5gyWoneAh3ivzATiiRKljoz8hQTN3S0itSojpnbgvjFod7uBf2Rtsa7dej63gKVRdenkDS2Q9baZyzWY1AZnIBa6yT0juo9eLCWhhOlwxFrCYRVjkKywhfIVrlrLNa3UNngB9RWBQe9mxF1zMGBUFCnRoyUWLBpCStm1SU5sRRFFSeI7HUYtawUeswQzaNk4PKSsmJBL3ERbY4dPD65glIJS5rqxD3kYsThULFbU23ETEuslLobSkuluh1LzKoTkLM0hBH1A1pgJku2CjOVizQ+hUrPP4GQeTkYaS0tarYzCI2HMnusXImyHsZe3dWrxb1U9/CRVaBMggS79TUqJ6yHSSAcdq4Kc9evZUOYUSWsI7LdGpQy7Ul99ZL1qfObT4CedX+zSJGjRBV1NNFGF30MMcYsVugeKLLqDXiNLuQnSQjRvRwtrRzlsSoBxeiSl1SvLVQoF1FcZj0Jqi46odWosl43b1H9Lp2FOAgl7OKibs6cgOICAA==') format('woff2'),
+  url('iconfont.woff?t=1589437921018') format('woff'),
+  url('iconfont.ttf?t=1589437921018') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
+  url('iconfont.svg?t=1589437921018#iconfont') format('svg'); /* iOS 4.1- */
+}
+
+.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-yigouxuan:before {
+  content: "\e63d";
+}
+
+.icon-weigouxuan:before {
+  content: "\e63e";
+}
+
+.icon-weigouxuan1:before {
+  content: "\e64a";
+}
+
+.icon-yigouxuan1:before {
+  content: "\e64b";
+}
+
+.icon-shixiangyoujiantou-:before {
+  content: "\e626";
+}
+
+.icon-shixiangxiajiantou-:before {
+  content: "\e625";
+}
+
+.icon-jiahao:before {
+  content: "\e72d";
+}
+
+.icon-up:before {
+  content: "\e769";
+}
+
+.icon-down:before {
+  content: "\e76b";
+}
+
+.icon-delete:before {
+  content: "\e6e9";
+}
+
+.icon-qq:before {
+  content: "\e614";
+  font-size: 60px;
+  color: #22aaf8;
+  margin-left: 32px;
+}
+
+.icon-weixin:before {
+  content: "\e68a";
+  font-size: 60px;
+  color: #10b747;
+  margin-right: 32px;
+}
+
diff --git a/src/styles/font/icon/iconfont.eot b/src/styles/font/icon/iconfont.eot
new file mode 100644
index 0000000..743624c
Binary files /dev/null and b/src/styles/font/icon/iconfont.eot differ
diff --git a/src/styles/font/icon/iconfont.js b/src/styles/font/icon/iconfont.js
new file mode 100644
index 0000000..04b61c2
--- /dev/null
+++ b/src/styles/font/icon/iconfont.js
@@ -0,0 +1 @@
+!function(n){var t,c='<svg><symbol id="icon-yigouxuan" viewBox="0 0 1024 1024"><path d="M196.923077 0h630.153846a196.923077 196.923077 0 0 1 196.923077 196.923077v630.153846a196.923077 196.923077 0 0 1-196.923077 196.923077H196.923077a196.923077 196.923077 0 0 1-196.923077-196.923077V196.923077a196.923077 196.923077 0 0 1 196.923077-196.923077z m0 78.769231a118.153846 118.153846 0 0 0-118.153846 118.153846v630.153846a118.153846 118.153846 0 0 0 118.153846 118.153846h630.153846a118.153846 118.153846 0 0 0 118.153846-118.153846V196.923077a118.153846 118.153846 0 0 0-118.153846-118.153846H196.923077z m584.900923 258.205538a36.509538 36.509538 0 0 1 1.260308 51.633231l-299.480616 313.107692c-0.118154 0.157538-0.393846 0.236308-0.630154 0.472616l-0.393846 0.551384c-2.166154 2.126769-4.726154 3.229538-7.207384 4.726154-1.575385 0.866462-2.796308 2.166154-4.411077 2.835692a35.800615 35.800615 0 0 1-27.490462 0.07877c-1.260308-0.512-2.284308-1.614769-3.544615-2.284308-2.756923-1.457231-5.592615-2.835692-8.034462-5.12-0.196923-0.157538-0.275692-0.433231-0.512-0.669538-0.196923-0.118154-0.393846-0.196923-0.551384-0.354462l-150.843077-156.593231a36.430769 36.430769 0 0 1 0.945231-51.633231 36.391385 36.391385 0 0 1 51.63323 0.945231l124.455385 129.102769 273.092923-285.61723a36.548923 36.548923 0 0 1 51.712-1.181539z"  ></path></symbol><symbol id="icon-weigouxuan" viewBox="0 0 1024 1024"><path d="M196.923077 78.769231a118.153846 118.153846 0 0 0-118.153846 118.153846v630.153846a118.153846 118.153846 0 0 0 118.153846 118.153846h630.153846a118.153846 118.153846 0 0 0 118.153846-118.153846V196.923077a118.153846 118.153846 0 0 0-118.153846-118.153846H196.923077z m0-78.769231h630.153846a196.923077 196.923077 0 0 1 196.923077 196.923077v630.153846a196.923077 196.923077 0 0 1-196.923077 196.923077H196.923077a196.923077 196.923077 0 0 1-196.923077-196.923077V196.923077a196.923077 196.923077 0 0 1 196.923077-196.923077z"  ></path></symbol><symbol id="icon-weigouxuan1" viewBox="0 0 1024 1024"><path d="M256 128a128 128 0 0 0-128 128v512a128 128 0 0 0 128 128h512a128 128 0 0 0 128-128V256a128 128 0 0 0-128-128H256z m0-51.2h512a179.2 179.2 0 0 1 179.2 179.2v512a179.2 179.2 0 0 1-179.2 179.2H256a179.2 179.2 0 0 1-179.2-179.2V256a179.2 179.2 0 0 1 179.2-179.2z"  ></path></symbol><symbol id="icon-yigouxuan1" viewBox="0 0 1024 1024"><path d="M796.912941 297.562353L407.491765 692.705882l-156.611765-172.272941a30.177882 30.177882 0 0 0-44.574118 40.658824L361.411765 734.569412a60.235294 60.235294 0 0 0 85.232941 3.915294l2.409412-2.409412 390.927058-396.348235a30.117647 30.117647 0 1 0-43.068235-42.164706z"  ></path><path d="M813.176471 0H210.823529a210.823529 210.823529 0 0 0-210.823529 210.823529v602.352942a210.823529 210.823529 0 0 0 210.823529 210.823529h602.352942a210.823529 210.823529 0 0 0 210.823529-210.823529V210.823529a210.823529 210.823529 0 0 0-210.823529-210.823529z m150.588235 813.176471a150.588235 150.588235 0 0 1-150.588235 150.588235H210.823529a150.588235 150.588235 0 0 1-150.588235-150.588235V210.823529a150.588235 150.588235 0 0 1 150.588235-150.588235h602.352942a150.588235 150.588235 0 0 1 150.588235 150.588235z"  ></path></symbol><symbol id="icon-shixiangyoujiantou-" viewBox="0 0 1024 1024"><path d="M701.44 512L322.56 796.587V227.413L701.44 512z"  ></path></symbol><symbol id="icon-shixiangxiajiantou-" viewBox="0 0 1024 1024"><path d="M512 701.44L227.413 322.56h569.174L512 701.44z"  ></path></symbol><symbol id="icon-jiahao" viewBox="0 0 1024 1024"><path d="M512 32C246.4 32 32 246.4 32 512s214.4 480 480 480 480-214.4 480-480S777.6 32 512 32z m256 512h-224v224c0 19.2-12.8 32-32 32s-32-12.8-32-32v-224H256c-19.2 0-32-12.8-32-32s12.8-32 32-32h224V256c0-19.2 12.8-32 32-32s32 12.8 32 32v224h224c19.2 0 32 12.8 32 32s-12.8 32-32 32z"  ></path></symbol><symbol id="icon-up" viewBox="0 0 1024 1024"><path d="M508.4 450.1l1.8-1.8-1.8 1.8zM508.2 448.1l2.2 2.2c-0.7-0.8-1.4-1.5-2.2-2.2zM511.1 411l1.8 1.8-1.8-1.8z" fill="#FFFFFF" ></path><path d="M510.9 413l2.2-2.2c-0.8 0.7-1.5 1.4-2.2 2.2z" fill="#FFFFFF" ></path><path d="M544 374.7v336c0 17.6-14.4 32-32 32s-32-14.4-32-32v-336c0-17.6 14.4-32 32-32s32 14.4 32 32z" fill="" ></path><path d="M511.9 281.3c-8.3 0-15.8 3.1-21.5 8.3l-2.2 2.2-21.5 21.5L291 489c-12.4 12.4-12.4 32.8 0 45.3 12.4 12.4 32.8 12.4 45.3 0L512 358.5l175.8 175.7c12.4 12.4 32.8 12.4 45.3 0 12.4-12.4 12.4-32.8-0.1-45.2L557.3 313.3l-21.8-21.8-1.8-1.8c-5.7-5.3-13.4-8.5-21.8-8.4z" fill="" ></path></symbol><symbol id="icon-down" viewBox="0 0 1024 1024"><path d="M515.6 573.9l-1.8 1.8 1.8-1.8zM515.8 575.9l-2.2-2.2c0.7 0.8 1.4 1.5 2.2 2.2zM512.9 613l-1.8-1.8 1.8 1.8zM513.1 611l-2.2 2.2c0.8-0.7 1.5-1.4 2.2-2.2z" fill="#FFFFFF" ></path><path d="M480 649.3v-336c0-17.6 14.4-32 32-32s32 14.4 32 32v336c0 17.6-14.4 32-32 32s-32-14.4-32-32z" fill="" ></path><path d="M512.1 742.7c8.3 0 15.8-3.1 21.5-8.3l2.2-2.2 21.5-21.5L733 535c12.4-12.4 12.4-32.8 0-45.3-12.4-12.4-32.8-12.4-45.3 0L512 665.5 336.2 489.8c-12.4-12.4-32.8-12.4-45.3 0-12.4 12.4-12.4 32.8 0.1 45.2l175.7 175.7 21.8 21.8 1.8 1.8c5.7 5.3 13.4 8.5 21.8 8.4z" fill="" ></path></symbol><symbol id="icon-delete" viewBox="0 0 1025 1024"><path d="M512.019034 0C229.689856 0 0 229.689856 0 512.019034c0 282.306337 229.689856 511.980966 512.019034 511.980966 282.321564 0 512.01142-229.67463 512.01142-511.980966C1024.030454 229.689856 794.340597 0 512.019034 0zM713.257467 721.030788c-0.007613 22.109428-17.92965 40.107599-39.955331 40.107599L352.936215 761.138388c-22.02568 0-39.940104-17.990558-39.940104-40.107599L312.996111 402.088581c0-7.704801 6.265861-13.978275 13.978275-13.978275 7.704801 0 13.970661 6.273474 13.970661 13.978275l0 318.942208c0 6.70744 5.382702 12.158663 11.991167 12.158663l320.365921 0c6.608465 0 11.991167-5.451223 11.991167-12.158663L685.293303 402.088581c0-7.704801 6.265861-13.978275 13.978275-13.978275s13.978275 6.273474 13.978275 13.978275L713.249853 721.030788zM431.956104 679.979123 431.956104 402.088581c0-7.704801 6.265861-13.978275 13.970661-13.978275 7.712414 0 13.978275 6.273474 13.978275 13.978275l0 277.882928c0 7.712414-6.265861 13.978275-13.978275 13.978275C438.229578 693.949784 431.956104 687.683923 431.956104 679.979123zM566.340924 679.979123 566.340924 402.088581c0-7.704801 6.265861-13.978275 13.978275-13.978275 7.704801 0 13.970661 6.273474 13.970661 13.978275l0 277.882928c0 7.712414-6.265861 13.978275-13.970661 13.978275C572.606785 693.949784 566.340924 687.683923 566.340924 679.979123zM762.059614 346.997732 615.554197 346.997732c-3.730585 0-7.240381-1.454167-9.882244-4.09603l-52.08354-52.08354L471.987569 290.818162l-62.17896 52.844884c-2.497208 2.139377-5.717693 3.334687-9.044766 3.334687L261.978453 346.997732c-7.712414 0-13.978275-6.273474-13.978275-13.978275s6.265861-13.978275 13.978275-13.978275l133.653931 0 62.171347-52.844884c2.535275-2.14699 5.748147-3.327073 9.05238-3.327073l92.518517 0c3.730585 0 7.240381 1.454167 9.882244 4.09603l52.08354 52.08354 140.711589 0c7.712414 0 13.978275 6.265861 13.978275 13.970661C776.037889 340.724258 769.764415 346.997732 762.059614 346.997732z"  ></path></symbol><symbol id="icon-qq" viewBox="0 0 1024 1024"><path d="M512 1024C229.226667 1024 0 794.773333 0 512 0 229.226667 229.226667 0 512 0 794.773333 0 1024 229.226667 1024 512 1024 794.773333 794.773333 1024 512 1024ZM693.333333 458.666667C689.024 438.634667 682.666667 426.666667 682.666667 426.666667 682.666667 426.666667 682.944 397.333333 650.666667 330.666667 618.389333 264 522.666667 256 522.666667 256L512 256C512 256 416.277333 264 384 330.666667 351.722667 397.333333 352 426.666667 352 426.666667 352 426.666667 345.642667 438.634667 341.333333 458.666667 337.024 478.698667 341.333333 490.666667 341.333333 490.666667 341.333333 490.666667 286.656 546.421333 288 586.666667 289.344 626.912 299.221333 652.544 320 629.333333 340.778667 606.122667 341.333333 608 341.333333 608 341.333333 608 340.970667 625.333333 352 640 363.029333 654.666667 373.333333 661.333333 373.333333 661.333333 373.333333 661.333333 317.386667 689.034667 330.666667 725.333333 343.946667 761.632 384.874667 768.288 416 768 447.125333 767.712 512 746.666667 512 746.666667L522.666667 746.666667C522.666667 746.666667 587.541333 767.712 618.666667 768 649.792 768.288 690.72 761.632 704 725.333333 717.28 689.034667 661.333333 661.333333 661.333333 661.333333 661.333333 661.333333 671.637333 654.666667 682.666667 640 693.696 625.333333 693.333333 608 693.333333 608 693.333333 608 693.888 606.122667 714.666667 629.333333 735.445333 652.544 745.322667 626.912 746.666667 586.666667 748.010667 546.421333 693.333333 490.666667 693.333333 490.666667 693.333333 490.666667 697.642667 478.698667 693.333333 458.666667Z"  ></path></symbol><symbol id="icon-weixin" viewBox="0 0 1024 1024"><path d="M512 1024C229.2 1024 0 794.8 0 512S229.2 0 512 0s512 229.2 512 512-229.2 512-512 512z m105.6-582.1c-91.1 0-164.9 63.6-164.9 139.3 0 81.5 73.8 145.1 164.9 148.6 25.8-3.5 50.1-8.7 73.3-18.6l45.8 27.9-9.2-46.4c32.6-26.8 54.9-65.4 54.9-111.4 0.1-75.7-73.7-139.4-164.8-139.4z m-54.9 111.4c-17.2 0-27.5-10.4-27.5-27.9 0-8.2 10.3-18.6 27.5-18.6 8.1 0 18.3 10.4 18.3 18.6 0 17.5-10.2 27.9-18.3 27.9z m109.9 0c-8 0-18.3-10.4-18.3-27.9 0-8.2 10.3-18.6 18.3-18.6 17.2 0 27.5 10.4 27.5 18.6 0 17.5-10.2 27.9-27.5 27.9z m-55-130c2.5 3.1 5.9 3.4 9.2 0-13.7-77.2-94-139.3-192.4-139.3C328.6 284 242 358.9 242 451.1c0 53 28.3 99.9 73.3 130l-18.3 65 64.1-37.1c25.5 5.2 49.4 9.5 73.3 9.3 4 0.2 6.8 0 9.2 0-3-12-5-24.4-9.2-37.1 4.2-85.6 84-154.8 183.2-157.9z m-109.9-55.7c17.2 0 27.5 10.4 27.5 18.6 0 17.5-10.3 27.9-27.5 27.9-8 0-18.3-10.4-18.3-27.9 0-8.2 10.2-18.6 18.3-18.6z m-174.1 18.5c0-8.2 10.3-18.6 18.3-18.6 17.2 0 27.5 10.4 27.5 18.6 0 17.5-10.3 27.9-27.5 27.9-8 0-18.3-10.4-18.3-27.9z"  ></path></symbol></svg>',a=(t=document.getElementsByTagName("script"))[t.length-1].getAttribute("data-injectcss");if(a&&!n.__iconfont__svg__cssinject__){n.__iconfont__svg__cssinject__=!0;try{document.write("<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>")}catch(t){console&&console.log(t)}}!function(t){if(document.addEventListener)if(~["complete","loaded","interactive"].indexOf(document.readyState))setTimeout(t,0);else{var a=function(){document.removeEventListener("DOMContentLoaded",a,!1),t()};document.addEventListener("DOMContentLoaded",a,!1)}else document.attachEvent&&(o=t,i=n.document,l=!1,(c=function(){try{i.documentElement.doScroll("left")}catch(t){return void setTimeout(c,50)}e()})(),i.onreadystatechange=function(){"complete"==i.readyState&&(i.onreadystatechange=null,e())});function e(){l||(l=!0,o())}var o,i,l,c}(function(){var t,a,e,o,i,l;(t=document.createElement("div")).innerHTML=c,c=null,(a=t.getElementsByTagName("svg")[0])&&(a.setAttribute("aria-hidden","true"),a.style.position="absolute",a.style.width=0,a.style.height=0,a.style.overflow="hidden",e=a,(o=document.body).firstChild?(i=e,(l=o.firstChild).parentNode.insertBefore(i,l)):o.appendChild(e))})}(window);
\ No newline at end of file
diff --git a/src/styles/font/icon/iconfont.json b/src/styles/font/icon/iconfont.json
new file mode 100644
index 0000000..fc5a6c1
--- /dev/null
+++ b/src/styles/font/icon/iconfont.json
@@ -0,0 +1,93 @@
+{
+  "id": "1540265",
+  "name": "education",
+  "font_family": "iconfont",
+  "css_prefix_text": "icon-",
+  "description": "",
+  "glyphs": [
+    {
+      "icon_id": "2716513",
+      "name": "已勾选32",
+      "font_class": "yigouxuan",
+      "unicode": "e63d",
+      "unicode_decimal": 58941
+    },
+    {
+      "icon_id": "2716516",
+      "name": "未勾选32",
+      "font_class": "weigouxuan",
+      "unicode": "e63e",
+      "unicode_decimal": 58942
+    },
+    {
+      "icon_id": "2892929",
+      "name": "未勾选40",
+      "font_class": "weigouxuan1",
+      "unicode": "e64a",
+      "unicode_decimal": 58954
+    },
+    {
+      "icon_id": "2892954",
+      "name": "已勾选40",
+      "font_class": "yigouxuan1",
+      "unicode": "e64b",
+      "unicode_decimal": 58955
+    },
+    {
+      "icon_id": "5979965",
+      "name": "实 向右箭头-01",
+      "font_class": "shixiangyoujiantou-",
+      "unicode": "e626",
+      "unicode_decimal": 58918
+    },
+    {
+      "icon_id": "5979966",
+      "name": "实 向下箭头-01",
+      "font_class": "shixiangxiajiantou-",
+      "unicode": "e625",
+      "unicode_decimal": 58917
+    },
+    {
+      "icon_id": "8349103",
+      "name": "加号-填充",
+      "font_class": "jiahao",
+      "unicode": "e72d",
+      "unicode_decimal": 59181
+    },
+    {
+      "icon_id": "6129078",
+      "name": "42指向上、上箭头",
+      "font_class": "up",
+      "unicode": "e769",
+      "unicode_decimal": 59241
+    },
+    {
+      "icon_id": "6129081",
+      "name": "44指向下、下箭头",
+      "font_class": "down",
+      "unicode": "e76b",
+      "unicode_decimal": 59243
+    },
+    {
+      "icon_id": "410692",
+      "name": "群蜂删除-充",
+      "font_class": "delete",
+      "unicode": "e6e9",
+      "unicode_decimal": 59113
+    },
+    {
+      "icon_id": "468193",
+      "name": "qq",
+      "font_class": "qq",
+      "unicode": "e614",
+      "unicode_decimal": 58900
+    },
+    {
+      "icon_id": "7009153",
+      "name": "微信-36",
+      "font_class": "weixin",
+      "unicode": "e68a",
+      "unicode_decimal": 59018
+    }
+  ]
+}
diff --git a/src/styles/font/icon/iconfont.svg b/src/styles/font/icon/iconfont.svg
new file mode 100644
index 0000000..0ea2980
--- /dev/null
+++ b/src/styles/font/icon/iconfont.svg
@@ -0,0 +1,62 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<!--
+2013-9-30: Created.
+-->
+<svg>
+<metadata>
+Created by iconfont
+</metadata>
+<defs>
+
+<font id="iconfont" horiz-adv-x="1024" >
+  <font-face
+    font-family="iconfont"
+    font-weight="500"
+    font-stretch="normal"
+    units-per-em="1024"
+    ascent="896"
+    descent="-128"
+  />
+    <missing-glyph />
+    
+    <glyph glyph-name="yigouxuan" unicode="&#58941;" d="M196.923077 896h630.153846a196.923077 196.923077 0 0 0 196.923077-196.923077v-630.153846a196.923077 196.923077 0 0 0-196.923077-196.923077H196.923077a196.923077 196.923077 0 0 0-196.923077 196.923077V699.076923a196.923077 196.923077 0 0 0 196.923077 196.923077z m0-78.769231a118.153846 118.153846 0 0 1-118.153846-118.153846v-630.153846a118.153846 118.153846 0 0 1 118.153846-118.153846h630.153846a118.153846 118.153846 0 0 1 118.153846 118.153846V699.076923a118.153846 118.153846 0 0 1-118.153846 118.153846H196.923077z m584.900923-258.205538a36.509538 36.509538 0 0 0 1.260308-51.633231l-299.480616-313.107692c-0.118154-0.157538-0.393846-0.236308-0.630154-0.472616l-0.393846-0.551384c-2.166154-2.126769-4.726154-3.229538-7.207384-4.726154-1.575385-0.866462-2.796308-2.166154-4.411077-2.835692a35.800615 35.800615 0 0 0-27.490462-0.07877c-1.260308 0.512-2.284308 1.614769-3.544615 2.284308-2.756923 1.457231-5.592615 2.835692-8.034462 5.12-0.196923 0.157538-0.275692 0.433231-0.512 0.669538-0.196923 0.118154-0.393846 0.196923-0.551384 0.354462l-150.843077 156.593231a36.430769 36.430769 0 0 0 0.945231 51.633231 36.391385 36.391385 0 0 0 51.63323-0.945231l124.455385-129.102769 273.092923 285.61723a36.548923 36.548923 0 0 0 51.712 1.181539z"  horiz-adv-x="1024" />
+
+    
+    <glyph glyph-name="weigouxuan" unicode="&#58942;" d="M196.923077 817.230769a118.153846 118.153846 0 0 1-118.153846-118.153846v-630.153846a118.153846 118.153846 0 0 1 118.153846-118.153846h630.153846a118.153846 118.153846 0 0 1 118.153846 118.153846V699.076923a118.153846 118.153846 0 0 1-118.153846 118.153846H196.923077z m0 78.769231h630.153846a196.923077 196.923077 0 0 0 196.923077-196.923077v-630.153846a196.923077 196.923077 0 0 0-196.923077-196.923077H196.923077a196.923077 196.923077 0 0 0-196.923077 196.923077V699.076923a196.923077 196.923077 0 0 0 196.923077 196.923077z"  horiz-adv-x="1024" />
+
+    
+    <glyph glyph-name="weigouxuan1" unicode="&#58954;" d="M256 768a128 128 0 0 1-128-128v-512a128 128 0 0 1 128-128h512a128 128 0 0 1 128 128V640a128 128 0 0 1-128 128H256z m0 51.2h512a179.2 179.2 0 0 0 179.2-179.2v-512a179.2 179.2 0 0 0-179.2-179.2H256a179.2 179.2 0 0 0-179.2 179.2V640a179.2 179.2 0 0 0 179.2 179.2z"  horiz-adv-x="1024" />
+
+    
+    <glyph glyph-name="yigouxuan1" unicode="&#58955;" d="M796.912941 598.437647L407.491765 203.294118l-156.611765 172.272941a30.177882 30.177882 0 0 1-44.574118-40.658824L361.411765 161.430588a60.235294 60.235294 0 0 1 85.232941-3.915294l2.409412 2.409412 390.927058 396.348235a30.117647 30.117647 0 1 1-43.068235 42.164706zM813.176471 896H210.823529a210.823529 210.823529 0 0 1-210.823529-210.823529v-602.352942a210.823529 210.823529 0 0 1 210.823529-210.823529h602.352942a210.823529 210.823529 0 0 1 210.823529 210.823529V685.176471a210.823529 210.823529 0 0 1-210.823529 210.823529z m150.588235-813.176471a150.588235 150.588235 0 0 0-150.588235-150.588235H210.823529a150.588235 150.588235 0 0 0-150.588235 150.588235V685.176471a150.588235 150.588235 0 0 0 150.588235 150.588235h602.352942a150.588235 150.588235 0 0 0 150.588235-150.588235z"  horiz-adv-x="1024" />
+
+    
+    <glyph glyph-name="shixiangyoujiantou-" unicode="&#58918;" d="M701.44 384L322.56 99.413V668.587L701.44 384z"  horiz-adv-x="1024" />
+
+    
+    <glyph glyph-name="shixiangxiajiantou-" unicode="&#58917;" d="M512 194.56L227.413 573.44h569.174L512 194.56z"  horiz-adv-x="1024" />
+
+    
+    <glyph glyph-name="jiahao" unicode="&#59181;" d="M512 864C246.4 864 32 649.6 32 384s214.4-480 480-480 480 214.4 480 480S777.6 864 512 864z m256-512h-224v-224c0-19.2-12.8-32-32-32s-32 12.8-32 32v224H256c-19.2 0-32 12.8-32 32s12.8 32 32 32h224V640c0 19.2 12.8 32 32 32s32-12.8 32-32v-224h224c19.2 0 32-12.8 32-32s-12.8-32-32-32z"  horiz-adv-x="1024" />
+
+    
+    <glyph glyph-name="up" unicode="&#59241;" d="M508.4 445.9l1.8 1.8-1.8-1.8zM508.2 447.9l2.2-2.2c-0.7 0.8-1.4 1.5-2.2 2.2zM511.1 485l1.8-1.8-1.8 1.8zM510.9 483l2.2 2.2c-0.8-0.7-1.5-1.4-2.2-2.2zM544 521.3v-336c0-17.6-14.4-32-32-32s-32 14.4-32 32v336c0 17.6 14.4 32 32 32s32-14.4 32-32zM511.9 614.7c-8.3 0-15.8-3.1-21.5-8.3l-2.2-2.2-21.5-21.5L291 407c-12.4-12.4-12.4-32.8 0-45.3 12.4-12.4 32.8-12.4 45.3 0L512 537.5l175.8-175.7c12.4-12.4 32.8-12.4 45.3 0 12.4 12.4 12.4 32.8-0.1 45.2L557.3 582.7l-21.8 21.8-1.8 1.8c-5.7 5.3-13.4 8.5-21.8 8.4z"  horiz-adv-x="1024" />
+
+    
+    <glyph glyph-name="down" unicode="&#59243;" d="M515.6 322.1l-1.8-1.8 1.8 1.8zM515.8 320.1l-2.2 2.2c0.7-0.8 1.4-1.5 2.2-2.2zM512.9 283l-1.8 1.8 1.8-1.8zM513.1 285l-2.2-2.2c0.8 0.7 1.5 1.4 2.2 2.2zM480 246.70000000000005v336c0 17.6 14.4 32 32 32s32-14.4 32-32v-336c0-17.6-14.4-32-32-32s-32 14.4-32 32zM512.1 153.29999999999995c8.3 0 15.8 3.1 21.5 8.3l2.2 2.2 21.5 21.5L733 361c12.4 12.4 12.4 32.8 0 45.3-12.4 12.4-32.8 12.4-45.3 0L512 230.5 336.2 406.2c-12.4 12.4-32.8 12.4-45.3 0-12.4-12.4-12.4-32.8 0.1-45.2l175.7-175.7 21.8-21.8 1.8-1.8c5.7-5.3 13.4-8.5 21.8-8.4z"  horiz-adv-x="1024" />
+
+    
+    <glyph glyph-name="delete" unicode="&#59113;" d="M512.019034 896C229.689856 896 0 666.310144 0 383.98096599999997c0-282.306337 229.689856-511.980966 512.019034-511.980966 282.321564 0 512.01142 229.67463 512.01142 511.980966C1024.030454 666.310144 794.340597 896 512.019034 896zM713.257467 174.96921199999997c-0.007613-22.109428-17.92965-40.107599-39.955331-40.107599L352.936215 134.86161200000004c-22.02568 0-39.940104 17.990558-39.940104 40.107599L312.996111 493.911419c0 7.704801 6.265861 13.978275 13.978275 13.978275 7.704801 0 13.970661-6.273474 13.970661-13.978275l0-318.942208c0-6.70744 5.382702-12.158663 11.991167-12.158663l320.365921 0c6.608465 0 11.991167 5.451223 11.991167 12.158663L685.293303 493.911419c0 7.704801 6.265861 13.978275 13.978275 13.978275s13.978275-6.273474 13.978275-13.978275L713.249853 174.96921199999997zM431.956104 216.02087700000004L431.956104 493.911419c0 7.704801 6.265861 13.978275 13.970661 13.978275 7.712414 0 13.978275-6.273474 13.978275-13.978275l0-277.882928c0-7.712414-6.265861-13.978275-13.978275-13.978275C438.229578 202.05021599999998 431.956104 208.31607699999995 431.956104 216.02087700000004zM566.340924 216.02087700000004L566.340924 493.911419c0 7.704801 6.265861 13.978275 13.978275 13.978275 7.704801 0 13.970661-6.273474 13.970661-13.978275l0-277.882928c0-7.712414-6.265861-13.978275-13.970661-13.978275C572.606785 202.05021599999998 566.340924 208.31607699999995 566.340924 216.02087700000004zM762.059614 549.002268L615.554197 549.002268c-3.730585 0-7.240381 1.454167-9.882244 4.09603l-52.08354 52.08354L471.987569 605.181838l-62.17896-52.844884c-2.497208-2.139377-5.717693-3.334687-9.044766-3.334687L261.978453 549.002268c-7.712414 0-13.978275 6.273474-13.978275 13.978275s6.265861 13.978275 13.978275 13.978275l133.653931 0 62.171347 52.844884c2.535275 2.14699 5.748147 3.327073 9.05238 3.327073l92.518517 0c3.730585 0 7.240381-1.454167 9.882244-4.09603l52.08354-52.08354 140.711589 0c7.712414 0 13.978275-6.265861 13.978275-13.970661C776.037889 555.275742 769.764415 549.002268 762.059614 549.002268z"  horiz-adv-x="1025" />
+
+    
+    <glyph glyph-name="qq" unicode="&#58900;" d="M512-128C229.226667-128 0 101.22666700000002 0 384 0 666.773333 229.226667 896 512 896 794.773333 896 1024 666.773333 1024 384 1024 101.22666700000002 794.773333-128 512-128ZM693.333333 437.333333C689.024 457.365333 682.666667 469.333333 682.666667 469.333333 682.666667 469.333333 682.944 498.666667 650.666667 565.333333 618.389333 632 522.666667 640 522.666667 640L512 640C512 640 416.277333 632 384 565.333333 351.722667 498.666667 352 469.333333 352 469.333333 352 469.333333 345.642667 457.365333 341.333333 437.333333 337.024 417.301333 341.333333 405.333333 341.333333 405.333333 341.333333 405.333333 286.656 349.578667 288 309.33333300000004 289.344 269.08799999999997 299.221333 243.45600000000002 320 266.66666699999996 340.778667 289.877333 341.333333 288 341.333333 288 341.333333 288 340.970667 270.66666699999996 352 256 363.029333 241.33333300000004 373.333333 234.66666699999996 373.333333 234.66666699999996 373.333333 234.66666699999996 317.386667 206.965333 330.666667 170.66666699999996 343.946667 134.36800000000005 384.874667 127.71199999999999 416 128 447.125333 128.288 512 149.33333300000004 512 149.33333300000004L522.666667 149.33333300000004C522.666667 149.33333300000004 587.541333 128.288 618.666667 128 649.792 127.71199999999999 690.72 134.36800000000005 704 170.66666699999996 717.28 206.965333 661.333333 234.66666699999996 661.333333 234.66666699999996 661.333333 234.66666699999996 671.637333 241.33333300000004 682.666667 256 693.696 270.66666699999996 693.333333 288 693.333333 288 693.333333 288 693.888 289.877333 714.666667 266.66666699999996 735.445333 243.45600000000002 745.322667 269.08799999999997 746.666667 309.33333300000004 748.010667 349.578667 693.333333 405.333333 693.333333 405.333333 693.333333 405.333333 697.642667 417.301333 693.333333 437.333333Z"  horiz-adv-x="1024" />
+
+    
+    <glyph glyph-name="weixin" unicode="&#59018;" d="M512-128C229.2-128 0 101.20000000000005 0 384S229.2 896 512 896s512-229.2 512-512-229.2-512-512-512z m105.6 582.1c-91.1 0-164.9-63.6-164.9-139.3 0-81.5 73.8-145.1 164.9-148.6 25.8 3.5 50.1 8.7 73.3 18.6l45.8-27.9-9.2 46.4c32.6 26.8 54.9 65.4 54.9 111.4 0.1 75.7-73.7 139.4-164.8 139.4z m-54.9-111.4c-17.2 0-27.5 10.4-27.5 27.9 0 8.2 10.3 18.6 27.5 18.6 8.1 0 18.3-10.4 18.3-18.6 0-17.5-10.2-27.9-18.3-27.9z m109.9 0c-8 0-18.3 10.4-18.3 27.9 0 8.2 10.3 18.6 18.3 18.6 17.2 0 27.5-10.4 27.5-18.6 0-17.5-10.2-27.9-27.5-27.9z m-55 130c2.5-3.1 5.9-3.4 9.2 0-13.7 77.2-94 139.3-192.4 139.3C328.6 612 242 537.1 242 444.9c0-53 28.3-99.9 73.3-130l-18.3-65 64.1 37.1c25.5-5.2 49.4-9.5 73.3-9.3 4-0.2 6.8 0 9.2 0-3 12-5 24.4-9.2 37.1 4.2 85.6 84 154.8 183.2 157.9z m-109.9 55.7c17.2 0 27.5-10.4 27.5-18.6 0-17.5-10.3-27.9-27.5-27.9-8 0-18.3 10.4-18.3 27.9 0 8.2 10.2 18.6 18.3 18.6z m-174.1-18.5c0 8.2 10.3 18.6 18.3 18.6 17.2 0 27.5-10.4 27.5-18.6 0-17.5-10.3-27.9-27.5-27.9-8 0-18.3 10.4-18.3 27.9z"  horiz-adv-x="1024" />
+
+    
+
+
+  </font>
+</defs></svg>
diff --git a/src/styles/font/icon/iconfont.ttf b/src/styles/font/icon/iconfont.ttf
new file mode 100644
index 0000000..a9d1c1c
Binary files /dev/null and b/src/styles/font/icon/iconfont.ttf differ
diff --git a/src/styles/font/icon/iconfont.woff b/src/styles/font/icon/iconfont.woff
new file mode 100644
index 0000000..ba2e0b9
Binary files /dev/null and b/src/styles/font/icon/iconfont.woff differ
diff --git a/src/styles/font/icon/iconfont.woff2 b/src/styles/font/icon/iconfont.woff2
new file mode 100644
index 0000000..3e9817b
Binary files /dev/null and b/src/styles/font/icon/iconfont.woff2 differ
diff --git a/src/styles/font/iconfont.css b/src/styles/font/iconfont.css
new file mode 100644
index 0000000..fe8fbef
--- /dev/null
+++ b/src/styles/font/iconfont.css
@@ -0,0 +1,3 @@
+[class*=" icon-"], [class^=icon-] {
+    font-family: iconfont!important;
+}
\ No newline at end of file
diff --git a/src/styles/index.scss b/src/styles/index.scss
new file mode 100644
index 0000000..adbf797
--- /dev/null
+++ b/src/styles/index.scss
@@ -0,0 +1,6 @@
+@import "./default/index.scss";
+@import "./font/iconfont.css";
+@import "./font/icon/iconfont.css";
+@import "./lib/index.scss";
+@import "./layout/index.scss";
+@import "./common.scss";
\ No newline at end of file
diff --git a/src/styles/layout/index.scss b/src/styles/layout/index.scss
new file mode 100644
index 0000000..450a447
--- /dev/null
+++ b/src/styles/layout/index.scss
@@ -0,0 +1,16 @@
+@import "lib/var";
+@import "var";
+html,
+body,
+#app,
+.wrapper {
+    width: 100%;
+    height: 100%;
+}
+
+body {
+    min-width: 1280px;
+    font-family: 'PingFang SC', "Helvetica Neue", Helvetica, "microsoft yahei", arial, STHeiTi, sans-serif;
+    font-size: 14px;
+    background: rgba(0, 0, 0, 0.02);
+}
\ No newline at end of file
diff --git a/src/styles/lib/_background.scss b/src/styles/lib/_background.scss
new file mode 100644
index 0000000..3cbcf57
--- /dev/null
+++ b/src/styles/lib/_background.scss
@@ -0,0 +1,7 @@
+@import "var";
+
+@each $name, $color in $bg-colors {
+  .bg-#{$name} {
+    background-color: $color;
+  }
+}
diff --git a/src/styles/lib/_border.scss b/src/styles/lib/_border.scss
new file mode 100644
index 0000000..1e241d3
--- /dev/null
+++ b/src/styles/lib/_border.scss
@@ -0,0 +1,78 @@
+@import "var";
+
+.border {
+  border: 1px solid $color-border;
+}
+
+// vertical
+.b-v {
+  border-top: 1px solid $color-border;
+  border-bottom: 1px solid $color-border;
+}
+
+// horizontal
+.b-h {
+  border-left: 1px solid $color-border;
+  border-right: 1px solid $color-border;
+}
+
+// border double
+.b-double {
+  border: double $color-border;
+}
+
+.b-w-thin {
+  border-width: 0.55px;
+}
+
+.b-round {
+  border-radius: 50%;
+}
+
+.b-none {
+  border: none;
+}
+
+@each $side in left, right, top, bottom {
+  .b-#{str-slice($side, 0, 1)} {
+    border-#{$side}: 1px solid $color-border;
+  }
+}
+
+// border-style
+@each $style in dotted, dashed {
+  .border-#{$style} {
+    border: 1px $style $color-border
+  }
+  .b-v-#{$style} {
+    border-top: 1px $style $color-border;
+    border-bottom: 1px $style $color-border;
+  }
+  .b-h-#{$style} {
+    border-left: 1px $style $color-border;
+    border-right: 1px $style $color-border;
+  }
+  @each $side in left, right, top, bottom {
+    .b-#{str-slice($side, 0, 1)}-#{$style} {
+      border-#{$side}: 1px $style $color-border;
+    }
+  }
+}
+
+@for $size from 0 through $border-width-through {
+  .b-#{$size} {
+    border-width: #{$size}px;
+  }
+}
+
+@for $size from 0 through $border-radius-through {
+  .b-radius-#{$size}, .b-r-#{$size} {
+    border-radius: #{$size}px;
+  }
+}
+
+@each $name, $color in $border-colors {
+  .b-#{$name} {
+    border-color: $color;
+  }
+}
\ No newline at end of file
diff --git a/src/styles/lib/_box.scss b/src/styles/lib/_box.scss
new file mode 100644
index 0000000..d7a07b9
--- /dev/null
+++ b/src/styles/lib/_box.scss
@@ -0,0 +1,56 @@
+@import "var";
+
+/**
+ *  margin padding
+ *  @each 循环多次保证优先级
+ */
+
+.m-auto {
+  margin-left: auto;
+  margin-right: auto;
+}
+
+@each $size in $box-sizes {
+  .m-#{$size}, .margin-#{$size} {
+    margin: #{$size}px;
+  }
+  @if $size >= 0 {
+    .p-#{$size}, .padding-#{$size} {
+      padding: #{$size}px;
+    }
+  }
+}
+
+@each $size in $box-sizes {
+  .m-h-#{$size} {
+    margin-left: #{$size}px;
+    margin-right: #{$size}px;
+  }
+  .m-v-#{$size} {
+    margin-top: #{$size}px;
+    margin-bottom: #{$size}px;
+  }
+  @if $size >= 0 {
+    .p-h-#{$size} {
+      padding-left: #{$size}px;
+      padding-right: #{$size}px;
+    }
+    .p-v-#{$size} {
+      padding-top: #{$size}px;
+      padding-bottom: #{$size}px;
+    }
+  }
+}
+
+@each $size in $box-sizes {
+  @each $side in top right bottom left {
+    .m-#{str-slice($side, 0, 1)}-#{$size} {
+      margin-#{$side}: #{$size}px;
+    }
+    @if $size >= 0 {
+      .p-#{str-slice($side, 0, 1)}-#{$size} {
+        padding-#{$side}: #{$size}px;
+      }
+    }
+  }
+}
diff --git a/src/styles/lib/_cursor.scss b/src/styles/lib/_cursor.scss
new file mode 100644
index 0000000..2bfba77
--- /dev/null
+++ b/src/styles/lib/_cursor.scss
@@ -0,0 +1,5 @@
+@each $type in default, auto, crosshair, pointer, move, text, wait, help {
+  .cursor-#{$type} {
+    cursor: $type;
+  }
+}
\ No newline at end of file
diff --git a/src/styles/lib/_display.scss b/src/styles/lib/_display.scss
new file mode 100644
index 0000000..a03ed93
--- /dev/null
+++ b/src/styles/lib/_display.scss
@@ -0,0 +1,15 @@
+@import "var";
+
+@each $type in inherit, none, inline, inline-block, block, table, inline-table, table-cell {
+  .d-#{$type} {
+    display: #{$type};
+  }
+}
+
+.hide {
+  display: none;
+}
+
+.show {
+  display: block
+}
diff --git a/src/styles/lib/_flex.scss b/src/styles/lib/_flex.scss
new file mode 100644
index 0000000..8e8494b
--- /dev/null
+++ b/src/styles/lib/_flex.scss
@@ -0,0 +1,54 @@
+.flex {
+  display: flex;
+}
+
+.flex-column {
+  display: flex;
+  flex-direction: column;
+}
+
+.j-start {
+  justify-content: flex-start;
+}
+.j-end {
+  justify-content: flex-end;
+}
+.j-center {
+  justify-content: center;
+}
+.j-between {
+  justify-content: space-between;
+}
+.j-around {
+  justify-content: space-around;
+}
+
+.a-start {
+  align-items: flex-start;
+}
+
+.a-center {
+  align-items: center;
+}
+
+.a-end {
+  align-items: flex-end;
+}
+
+@each $type in nowrap, wrap, wrap-reverse {
+  .flex-#{$type} {
+    flex-wrap: $type;
+  }
+}
+
+@each $size in 1, 2, 3 {
+  .flex-#{$size} {
+    flex: $size;
+  }
+}
+
+@for $i from 0 through 3 {
+  .flex-s-#{$i} {
+    flex-shrink: $i;
+  }
+}
\ No newline at end of file
diff --git a/src/styles/lib/_float.scss b/src/styles/lib/_float.scss
new file mode 100644
index 0000000..570b643
--- /dev/null
+++ b/src/styles/lib/_float.scss
@@ -0,0 +1,16 @@
+.cl {
+  &:before, &:after {
+    content: ' ';
+    display: table;
+  }
+  &:after {
+    clear: both;
+  }
+}
+.fl {
+  float: left;
+}
+
+.fr {
+  float: right;
+}
\ No newline at end of file
diff --git a/src/styles/lib/_font-size.scss b/src/styles/lib/_font-size.scss
new file mode 100644
index 0000000..30c1646
--- /dev/null
+++ b/src/styles/lib/_font-size.scss
@@ -0,0 +1,41 @@
+@import "var";
+
+@for $size from 0 through $font-size-em-through {
+  .fs-em-#{$size} {
+    font-size: #{$size}em;
+  }
+  @if $size <= $font-size-em-decimal-through {
+    @for $i from 0 to 10 {
+      .fs-em-#{$size}_#{$i} {
+        font-size: #{$size}#{'.'}#{$i}em;
+      }
+    }
+  } @else {
+    .fs-em-#{$size}_5 {
+      font-size: #{$size}#{'.5'}em;
+    }
+  }
+}
+
+@for $size from 0 through $font-size-rem-through {
+  .fs-rem-#{$size} {
+    font-size: #{$size}rem;
+  }
+  @if $size <= $font-size-rem-decimal-through {
+    @for $i from 0 to 10 {
+      .fs-rem-#{$size}_#{$i} {
+        font-size: #{$size}#{'.'}#{$i}rem;
+      }
+    }
+  } @else {
+    .fs-rem-#{$size}_5 {
+      font-size: #{$size}#{'.5'}rem;
+    }
+  }
+}
+
+@for $size from 12 through $font-size-px-through {
+  .fs-#{$size} {
+    font-size: #{$size}px;
+  }
+}
diff --git a/src/styles/lib/_font-weight.scss b/src/styles/lib/_font-weight.scss
new file mode 100644
index 0000000..564f821
--- /dev/null
+++ b/src/styles/lib/_font-weight.scss
@@ -0,0 +1,17 @@
+.bold {
+  font-weight: bold;
+}
+
+.normal {
+  font-weight: normal;
+}
+
+.lighter {
+  font-weight: lighter;
+}
+
+@each $weight in 100, 200, 300, 400, 500, 600, 700, 800, 900 {
+  .fw-#{$weight} {
+    font-weight: $weight;
+  }
+}
diff --git a/src/styles/lib/_line-height.scss b/src/styles/lib/_line-height.scss
new file mode 100644
index 0000000..4cfd3b1
--- /dev/null
+++ b/src/styles/lib/_line-height.scss
@@ -0,0 +1,24 @@
+@import "var";
+
+@for $size from 0 through $line-height-through {
+  .l-h-#{$size} {
+    line-height: #{$size}em;
+  }
+  @if $size <= $line-height-decimal-through {
+    @for $i from 0 to 10 {
+      .l-h-#{$size}_#{$i} {
+        line-height: #{$size}#{'.'}#{$i}em;
+      }
+    }
+  } @else {
+    .l-h-#{$size}_5 {
+      line-height: #{$size}#{'.5'}em;
+    }
+  }
+}
+
+@for $size from 0 through $line-height-px-through {
+  .lh-#{$size} {
+    line-height: #{$size}px;
+  }
+}
diff --git a/src/styles/lib/_link.scss b/src/styles/lib/_link.scss
new file mode 100644
index 0000000..aedde39
--- /dev/null
+++ b/src/styles/lib/_link.scss
@@ -0,0 +1,13 @@
+@import "var";
+
+@each $name, $color in $text-colors {
+  .link-#{$name} {
+    color: $color;
+    text-decoration: none;
+    cursor: pointer;
+    &:hover, &:active, &:focus {
+      color: darken($color, 10%);
+      text-decoration: underline;
+    }
+  }
+}
\ No newline at end of file
diff --git a/src/styles/lib/_overflow.scss b/src/styles/lib/_overflow.scss
new file mode 100644
index 0000000..a82ffc4
--- /dev/null
+++ b/src/styles/lib/_overflow.scss
@@ -0,0 +1,11 @@
+@each $type in visible, hidden, scroll, auto, inherit {
+  .o-#{$type} {
+    overflow: $type;
+  }
+  .o-x-#{$type} {
+    overflow-x: $type;
+  }
+  .o-y-#{$type} {
+    overflow-y: $type;
+  }
+}
diff --git a/src/styles/lib/_position.scss b/src/styles/lib/_position.scss
new file mode 100644
index 0000000..d9796b5
--- /dev/null
+++ b/src/styles/lib/_position.scss
@@ -0,0 +1,16 @@
+
+@import "var";
+
+@each $type in static, relative, absolute, fixed, sticky {
+  .#{$type} {
+    position: $type;
+  }
+}
+
+@each $size in $box-sizes {
+  @each $side in top, right, bottom, left {
+    .#{$side}-#{$size} {
+      #{$side}: #{$size}px;
+    }
+  }
+}
diff --git a/src/styles/lib/_reset.scss b/src/styles/lib/_reset.scss
new file mode 100644
index 0000000..a7864e8
--- /dev/null
+++ b/src/styles/lib/_reset.scss
@@ -0,0 +1,379 @@
+@import "var";
+// reset 初始化浏览器样式
+* {
+  box-sizing: border-box;
+  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+
+*:before,
+*:after {
+  box-sizing: border-box;
+}
+
+html {
+  -ms-text-size-adjust: 100%;
+  -webkit-text-size-adjust: 100%;
+}
+
+body,
+div,
+dl,
+dt,
+dd,
+ul,
+ol,
+li,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+form,
+fieldset,
+legend,
+input,
+textarea,
+p,
+blockquote,
+th,
+td,
+hr,
+button,
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+menu,
+nav,
+section {
+  margin: 0;
+  padding: 0;
+}
+
+button,
+input,
+select,
+textarea {
+  font-family: inherit;
+  font-size: inherit;
+  line-height: inherit;
+}
+
+input::-ms-clear,
+input::-ms-reveal {
+  display: none;
+}
+
+ol,ul{
+  li{
+    list-style: none;
+  }
+}
+h1 {
+  font-size: 2em;
+  margin: 0.67em 0;
+}
+
+article,
+aside,
+footer,
+header,
+nav,
+section {
+  display: block;
+}
+
+figcaption,
+figure,
+main {
+  display: block;
+}
+
+figure {
+  margin: 1em 40px;
+}
+
+li:focus {
+  outline-width: 0;
+}
+
+i{
+  font-style: normal;
+}
+
+/**
+ * 1. Remove the gray background on active links in IE 10.
+ * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.
+ */
+
+a {
+  background-color: transparent;
+  -webkit-text-decoration-skip: objects;
+  text-decoration: none;
+  color: inherit;
+}
+
+a:active {
+  color: inherit;
+}
+
+a:active,
+a:hover,
+a:focus {
+  outline-width: 0;
+}
+
+abbr[title] {
+  border-bottom: none;
+  text-decoration: underline;
+  text-decoration: underline dotted;
+}
+
+/**
+ * Prevent the duplicate application of `bolder` by the next rule in Safari 6.
+ */
+
+b,
+strong {
+  font-weight: inherit;
+}
+
+/**
+  * Add the correct font weight in Chrome, Edge, and Safari.
+  */
+
+b,
+strong {
+  font-weight: bolder;
+}
+
+pre,
+code,
+kbd,
+samp {
+  font-family: monospace, monospace;
+  font-size: 1em;
+}
+
+dfn {
+  font-style: italic;
+}
+
+mark {
+  background-color: #ff0;
+  color: #000;
+}
+
+small {
+  font-size: 80%;
+}
+
+sub,
+sup {
+  font-size: 75%;
+  line-height: 0;
+  position: relative;
+  vertical-align: baseline;
+}
+
+sub {
+  bottom: -0.25em;
+}
+
+sup {
+  top: -0.5em;
+}
+
+audio,
+video {
+  display: inline-block;
+}
+
+audio:not([controls]) {
+  display: none;
+  height: 0;
+}
+
+img {
+  border-style: none;
+  vertical-align: middle;
+}
+
+svg:not(:root) {
+  overflow: hidden;
+}
+
+button,
+input,
+optgroup,
+select,
+textarea {
+  font-size: 100%;
+  line-height: 1.15;
+  margin: 0;
+}
+
+button,
+input {
+  overflow: visible;
+}
+
+button,
+select {
+  text-transform: none;
+}
+
+button:focus{
+  outline: none;
+}
+
+button,
+html [type="button"],
+[type="reset"],
+[type="submit"] {
+  -webkit-appearance: button;
+}
+
+button::-moz-focus-inner,
+[type="button"]::-moz-focus-inner,
+[type="reset"]::-moz-focus-inner,
+[type="submit"]::-moz-focus-inner {
+  border-style: none;
+  padding: 0;
+}
+
+/**
+ * Restore the focus styles unset by the previous rule.
+ */
+
+button:-moz-focusring,
+[type="button"]:-moz-focusring,
+[type="reset"]:-moz-focusring,
+[type="submit"]:-moz-focusring {
+  outline: 1px dotted ButtonText;
+}
+
+/**
+ * Change the border, margin, and padding in all browsers (opinionated).
+ */
+
+fieldset {
+  border: 1px solid #c0c0c0;
+  margin: 0 2px;
+  padding: 0.35em 0.625em 0.75em;
+}
+
+/**
+ * 1. Correct the text wrapping in Edge and IE.
+ * 2. Correct the color inheritance from `fieldset` elements in IE.
+ * 3. Remove the padding so developers are not caught out when they zero out
+ *    `fieldset` elements in all browsers.
+ */
+
+legend {
+  box-sizing: border-box; /* 1 */
+  color: inherit; /* 2 */
+  display: table; /* 1 */
+  max-width: 100%; /* 1 */
+  padding: 0; /* 3 */
+  white-space: normal; /* 1 */
+}
+
+/**
+ * 1. Add the correct display in IE 9-.
+ * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.
+ */
+
+progress {
+  display: inline-block; /* 1 */
+  vertical-align: baseline; /* 2 */
+}
+
+/**
+ * Remove the default vertical scrollbar in IE.
+ */
+
+textarea {
+  overflow: auto;
+  resize: vertical;
+}
+
+/**
+ * 1. Add the correct box sizing in IE 10-.
+ * 2. Remove the padding in IE 10-.
+ */
+
+[type="checkbox"],
+[type="radio"] {
+  box-sizing: border-box; /* 1 */
+  padding: 0; /* 2 */
+}
+
+/**
+ * Correct the cursor style of increment and decrement buttons in Chrome.
+ */
+
+[type="number"]::-webkit-inner-spin-button,
+[type="number"]::-webkit-outer-spin-button {
+  height: auto;
+}
+
+/**
+ * 1. Correct the odd appearance in Chrome and Safari.
+ * 2. Correct the outline style in Safari.
+ */
+
+[type="search"] {
+  -webkit-appearance: textfield; /* 1 */
+  outline-offset: -2px; /* 2 */
+}
+
+/**
+ * Remove the inner padding and cancel buttons in Chrome and Safari on macOS.
+ */
+
+[type="search"]::-webkit-search-cancel-button,
+[type="search"]::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+
+/**
+ * 1. Correct the inability to style clickable types in iOS and Safari.
+ * 2. Change font properties to `inherit` in Safari.
+ */
+
+::-webkit-file-upload-button {
+  -webkit-appearance: button; /* 1 */
+  font: inherit; /* 2 */
+}
+
+/*
+ * Add the correct display in IE 9-.
+ * 1. Add the correct display in Edge, IE, and Firefox.
+ */
+
+details, /* 1 */
+menu {
+  display: block;
+}
+
+/*
+ * Add the correct display in all browsers.
+ */
+
+summary {
+  display: list-item;
+}
+
+/**
+ * Add the correct display in IE 9-.
+ */
+
+canvas {
+  display: inline-block;
+}
diff --git a/src/styles/lib/_size.scss b/src/styles/lib/_size.scss
new file mode 100644
index 0000000..3d83a27
--- /dev/null
+++ b/src/styles/lib/_size.scss
@@ -0,0 +1,53 @@
+@import "var";
+
+.w-full {
+  width: 100%;
+}
+
+.h-full {
+  height: 100%;
+}
+
+@for $percent from 0 to 100 {
+  .w-p-#{$percent} {
+    width: #{$percent}#{'%'};
+  }
+  .h-p-#{$percent} {
+    height: #{$percent}#{'%'};
+  }
+}
+
+
+@for $i from 1 through 30 {
+  .h-#{$i} {
+    height: #{$i}px;
+  }
+}
+
+@for $i from 1 through 30 {
+  .w-#{$i} {
+    width: #{$i}px;
+  }
+}
+
+
+@each $i in $sizes {
+  .w-#{$i} {
+    width: #{$i}px;
+  }
+  .h-#{$i} {
+    height: #{$i}px;
+  }
+  .max-w-#{$i} {
+    max-width: #{$i}px;
+  }
+  .max-h-#{$i} {
+    max-height: #{$i}px;
+  }
+  .min-w-#{$i} {
+    min-width: #{$i}px;
+  }
+  .min-h-#{$i} {
+    min-height: #{$i}px;
+  }
+}
diff --git a/src/styles/lib/_style.scss b/src/styles/lib/_style.scss
new file mode 100644
index 0000000..4b81d96
--- /dev/null
+++ b/src/styles/lib/_style.scss
@@ -0,0 +1,3 @@
+html {
+  font-family: 'PingFang SC', "Helvetica Neue", Helvetica, "microsoft yahei", arial, STHeiTi, sans-serif;
+}
diff --git a/src/styles/lib/_text-align.scss b/src/styles/lib/_text-align.scss
new file mode 100644
index 0000000..d3c3081
--- /dev/null
+++ b/src/styles/lib/_text-align.scss
@@ -0,0 +1,8 @@
+/**
+  * 任何的版本的 Internet Explorer (包括 IE8)都不支持属性值 "inherit"
+  */
+@each $type in left, right, center, justify, inherit {
+  .text-#{$type} {
+    text-align: #{$type};
+  }
+}
diff --git a/src/styles/lib/_text-color.scss b/src/styles/lib/_text-color.scss
new file mode 100644
index 0000000..625937e
--- /dev/null
+++ b/src/styles/lib/_text-color.scss
@@ -0,0 +1,7 @@
+@import "var";
+
+@each $name, $color in $text-colors {
+  .text-#{$name} {
+    color: $color;
+  }
+}
diff --git a/src/styles/lib/_var.scss b/src/styles/lib/_var.scss
new file mode 100644
index 0000000..71d5045
--- /dev/null
+++ b/src/styles/lib/_var.scss
@@ -0,0 +1,80 @@
+// 颜色 size范围
+$color-black: #333 !default;
+$color-white: #ffffff !default;
+$color-grey: #888 !default;
+$color-green: #19be6b !default;
+$color-blue: #61c3ff !default;
+$color-yellow: #ff9900 !default;
+$color-red: #f35958 !default;
+
+$color-title: #17233d !default;
+$color-content: #515a6e !default;
+$color-disabled: #c5c8ce !default;
+
+$bg-grey:#f0f0f0 !default;
+$bg-white: #ffffff !default;
+$bg-black: #393D49 !default;
+
+$color-border: #dcdfe6 !default;
+
+// 主题背景色
+$bg-colors: (
+  'white': $bg-white,
+  'black': $bg-black,
+  'grey': $bg-grey,
+  'green': $color-green,
+  'blue': $color-blue,
+  'yellow': $color-yellow,
+  'red': $color-red,
+) !default;
+
+// 文本颜色
+$text-colors: (
+  'white': $color-white,
+  'black': $color-black,
+  'grey': $color-grey,
+  'green': $color-green,
+  'blue': $color-blue,
+  'yellow': $color-yellow,
+  'red': $color-red,
+  'title': $color-title,
+  'content': $color-content,
+  'disabled': $color-disabled
+) !default;
+
+// 边框颜色
+$border-colors: (
+  'white': $color-white,
+  'black': $color-black,
+  'grey': $color-border,
+  'green': $color-green,
+  'blue': $color-blue,
+  'yellow': $color-yellow,
+  'red': $color-red
+) !default;
+
+// border
+$border-width-through: 20 !default;
+$border-radius-through: 20 !default;
+
+// margin padding left right top bottom
+$box-sizes: (
+  -20, -15, -12, -10, -8, -6, -5, -4, -3, -2, -1,
+  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 20, 25, 30, 35, 40, 50, 60, 80, 100) !default;
+
+// width height
+$sizes: (
+  40, 50, 60, 70, 80, 90, 100,
+  120, 150, 200, 250, 300, 400, 500, 600, 800, 1000, 1200) !default;
+
+// font-size
+$font-size-em-through: 10 !default;
+$font-size-em-decimal-through: 5 !default;
+$font-size-rem-through: 10 !default;
+$font-size-rem-decimal-through: 5 !default;
+$font-size-px-through: 80 !default;
+
+// line-height
+$line-height-through: 20 !default;
+$line-height-decimal-through: 5 !default;
+$line-height-px-through: 100 !default;
diff --git a/src/styles/lib/_vertical-align.scss b/src/styles/lib/_vertical-align.scss
new file mode 100644
index 0000000..53ab691
--- /dev/null
+++ b/src/styles/lib/_vertical-align.scss
@@ -0,0 +1,7 @@
+$types: (baseline, sub, super, top, text-top, middle, bottom, text-bottom, inherit);
+
+@each $type in $types {
+  .v-a-#{$type} {
+    vertical-align: $type;
+  }
+}
diff --git a/src/styles/lib/_visibility.scss b/src/styles/lib/_visibility.scss
new file mode 100644
index 0000000..2bbcd8a
--- /dev/null
+++ b/src/styles/lib/_visibility.scss
@@ -0,0 +1,7 @@
+.visible {
+  visibility: visible;
+}
+
+.hidden {
+  visibility: hidden;
+}
\ No newline at end of file
diff --git a/src/styles/lib/_white-space.scss b/src/styles/lib/_white-space.scss
new file mode 100644
index 0000000..affca1f
--- /dev/null
+++ b/src/styles/lib/_white-space.scss
@@ -0,0 +1,5 @@
+@each $type in normal, nowrap, pre, pre-wrap, pre-line {
+  .text-#{$type} {
+    white-space: $type;
+  }
+}
\ No newline at end of file
diff --git a/src/styles/lib/index.scss b/src/styles/lib/index.scss
new file mode 100644
index 0000000..6003530
--- /dev/null
+++ b/src/styles/lib/index.scss
@@ -0,0 +1,28 @@
+/*!
+* quickly-css
+* Github: https://gitee.com/zj1024/quickly-css
+* Author: zhangjing
+*/
+@import "reset";
+
+@import "background";
+@import "border";
+@import "box";
+@import "cursor";
+@import "display";
+@import "flex";
+@import "float";
+@import "font-size";
+@import "font-weight";
+@import "line-height";
+@import "link";
+@import "overflow";
+@import "position";
+@import "size";
+@import "text-align";
+@import "text-color";
+@import "vertical-align";
+@import "visibility";
+@import "white-space";
+
+@import "style";
\ No newline at end of file
diff --git a/src/styles/var.scss b/src/styles/var.scss
new file mode 100644
index 0000000..978ada7
--- /dev/null
+++ b/src/styles/var.scss
@@ -0,0 +1,25 @@
+$main-color: #9076FF;
+$inner-width: 1440px;
+
+@mixin ellipsis {
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+}
+@mixin mul-ellipsis($num) {
+    display: -webkit-box;
+    -webkit-box-orient: vertical;
+    -webkit-line-clamp: $num;
+    text-overflow: ellipsis;
+    overflow: hidden;
+}
+
+.ellipsis{
+    @include ellipsis();
+}
+.mul-ellipsis2{
+    @include mul-ellipsis(2);
+}
+.mul-ellipsis3{
+    @include mul-ellipsis(3);
+}
\ No newline at end of file
diff --git a/vue.config.js b/vue.config.js
new file mode 100644
index 0000000..7292c8b
--- /dev/null
+++ b/vue.config.js
@@ -0,0 +1,19 @@
+const Setting = require('./src/setting.env')
+
+// 使用等比适配插件
+module.exports = {
+  lintOnSave: true,
+  css: {
+    loaderOptions: {
+      sass: {
+        prependData: `@import "@/styles/var.scss";`
+      },
+    }
+  },
+  publicPath: Setting.publicPath,
+  outputDir: Setting.outputDir,
+  assetsDir: Setting.assetsDir,
+  devServer: {
+    port: 8099 // 固定端口
+  }
+}
\ No newline at end of file