Browse Source

250611 代码版本统一

ymz 3 weeks ago
parent
commit
183dbce355
100 changed files with 44260 additions and 0 deletions
  1. 13 0
      .editorconfig
  2. 3 0
      .eslintignore
  3. 40 0
      .eslintrc.js
  4. 22 0
      .gitignore
  5. 9 0
      .prettierrc.json
  6. 5 0
      README.md
  7. BIN
      dist.zip
  8. 13 0
      env/.env.development
  9. 6 0
      env/.env.production
  10. 20 0
      index.html
  11. 24820 0
      package-lock.json
  12. 95 0
      package.json
  13. 8 0
      shims-uni.d.ts
  14. 24 0
      src/App.vue
  15. 89 0
      src/components/dateSelect/k-bottom-button/KBottomButton.vue
  16. 115 0
      src/components/dateSelect/k-bottom-popup/KBottomPopup.vue
  17. 728 0
      src/components/dateSelect/k-date-picker/KDatePicker.vue
  18. 444 0
      src/components/dateSelect/k-date-picker/day.js
  19. 23 0
      src/components/dateSelect/k-date-picker/utils.js
  20. 45 0
      src/components/noData/index.vue
  21. 147 0
      src/components/sharePopup/index.vue
  22. 89 0
      src/components/tabber/index.vue
  23. 150 0
      src/components/table/tableData.vue
  24. 123 0
      src/components/table/tableDetail.vue
  25. 221 0
      src/components/uploadImg/index.vue
  26. 0 0
      src/config/index.ts
  27. 37 0
      src/constants/provinces.ts
  28. 6 0
      src/constants/rolesType.ts
  29. 9 0
      src/custom.d.ts
  30. 8 0
      src/env.d.ts
  31. 6 0
      src/hooks/useGetLoginStatus.ts
  32. 17 0
      src/hooks/useLoginout.ts
  33. 6 0
      src/hooks/useUpdatedUserInfo.ts
  34. 26 0
      src/main.ts
  35. 104 0
      src/manifest.json
  36. 1 0
      src/mp_ecard_sdk/constants/log.js
  37. 1 0
      src/mp_ecard_sdk/globalConfig.js
  38. 0 0
      src/mp_ecard_sdk/index.css
  39. 1 0
      src/mp_ecard_sdk/index.js
  40. 1 0
      src/mp_ecard_sdk/index/index.js
  41. 44 0
      src/mp_ecard_sdk/index/index.vue
  42. 91 0
      src/mp_ecard_sdk/main.js
  43. 110 0
      src/mp_ecard_sdk/protocol/eid/eid.vue
  44. 195 0
      src/mp_ecard_sdk/protocol/privacy/privacy.vue
  45. 173 0
      src/mp_ecard_sdk/protocol/service/service.vue
  46. 47 0
      src/mp_ecard_sdk/protocol/userAccredit/userAccredit.vue
  47. 6 0
      src/mp_ecard_sdk/utils/getParameterByName.js
  48. 1 0
      src/mp_ecard_sdk/utils/http.js
  49. 1 0
      src/mp_ecard_sdk/utils/validate.js
  50. 68 0
      src/pages-sub-admin/managementByObjectives/index.vue
  51. 9 0
      src/pages-sub-admin/managementByObjectives/taskList.ts
  52. 813 0
      src/pages-sub-admin/objectivesAdd/index.vue
  53. 466 0
      src/pages-sub-admin/objectivesDetailList/index.vue
  54. 177 0
      src/pages-sub-admin/objectivesList/components/approvalFlowchart.vue
  55. 487 0
      src/pages-sub-admin/objectivesList/index.vue
  56. 79 0
      src/pages-sub-admin/serviceManagement/index.vue
  57. 41 0
      src/pages-sub-admin/serviceManagement/taskList.ts
  58. 47 0
      src/pages-sub-mine/agreement/index.vue
  59. 129 0
      src/pages-sub-mine/auth/constants/index.ts
  60. 289 0
      src/pages-sub-mine/auth/hook/useAutnFn.ts
  61. 50 0
      src/pages-sub-mine/auth/hook/useRadio.ts
  62. 390 0
      src/pages-sub-mine/auth/index.vue
  63. 97 0
      src/pages-sub-mine/bind-card/index.vue
  64. 92 0
      src/pages-sub-mine/changePassword/index.vue
  65. 101 0
      src/pages-sub-mine/feedback/index.vue
  66. 306 0
      src/pages-sub-mine/forgotPassword/index.vue
  67. 220 0
      src/pages-sub-mine/integral-rules/index.vue
  68. 84 0
      src/pages-sub-mine/quiz/index.vue
  69. 184 0
      src/pages-sub-mine/quizDetail/index.vue
  70. 289 0
      src/pages-sub-mine/task-completion-records/index.vue
  71. 168 0
      src/pages-sub-mine/user-info/index.vue
  72. 208 0
      src/pages-sub-packages/agreement/huiqiyun.vue
  73. 195 0
      src/pages-sub-packages/agreement/jinyuan.vue
  74. 184 0
      src/pages-sub-packages/agreement/olading.vue
  75. 70 0
      src/pages-sub-packages/agreement/personalInfoAuth.vue
  76. 4085 0
      src/pages-sub-packages/agreement/platformUsers.vue
  77. 385 0
      src/pages-sub-packages/agreement/privacyPolicy.vue
  78. 224 0
      src/pages-sub-packages/agreement/taxhelper.vue
  79. 187 0
      src/pages-sub-packages/agreement/xintaizi.vue
  80. 225 0
      src/pages-sub-packages/agreement/zhengqizhixing.vue
  81. 175 0
      src/pages-sub-packages/get-task/component/cardItem.vue
  82. 289 0
      src/pages-sub-packages/get-task/detail.vue
  83. 270 0
      src/pages-sub-packages/get-task/index.vue
  84. 568 0
      src/pages-sub-packages/task-history/index.vue
  85. 153 0
      src/pages-sub-packages/task-list/index.vue
  86. 416 0
      src/pages-sub-service-mangement/assignPoints/index.vue
  87. 88 0
      src/pages-sub-service-mangement/assignPointsAdd/components/TableData.vue
  88. 112 0
      src/pages-sub-service-mangement/assignPointsAdd/components/treeList.ts
  89. 209 0
      src/pages-sub-service-mangement/assignPointsAdd/detail.vue
  90. 581 0
      src/pages-sub-service-mangement/assignPointsAdd/index.vue
  91. 131 0
      src/pages-sub-service-mangement/generateReport/index.vue
  92. 404 0
      src/pages-sub-service-mangement/quickAudit/index.vue
  93. 155 0
      src/pages-sub-service-mangement/quickAuditCard/components/cardList.vue
  94. 146 0
      src/pages-sub-service-mangement/quickAuditCard/index.vue
  95. 381 0
      src/pages-sub-service-mangement/serviceDelivery/index.vue
  96. 125 0
      src/pages-sub-service-mangement/serviceDeliveryAdd/components/TableData.vue
  97. 134 0
      src/pages-sub-service-mangement/serviceDeliveryAdd/components/taskTree.vue
  98. 112 0
      src/pages-sub-service-mangement/serviceDeliveryAdd/components/treeList.ts
  99. 667 0
      src/pages-sub-service-mangement/serviceDeliveryAdd/index.vue
  100. 652 0
      src/pages-sub-service-mangement/serviceReviewed/index.vue

+ 13 - 0
.editorconfig

@@ -0,0 +1,13 @@
+# editorconfig.org
+root = true
+
+[*]
+indent_style = space
+indent_size = 2
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.md]
+trim_trailing_whitespace = false

+ 3 - 0
.eslintignore

@@ -0,0 +1,3 @@
+node_modules/
+dist/
+src/**/*

+ 40 - 0
.eslintrc.js

@@ -0,0 +1,40 @@
+module.exports = {
+  env: {
+    browser: true,
+    es2021: true
+  },
+  extends: [
+    'plugin:vue/vue3-essential',
+    'eslint:recommended',
+    '@vue/eslint-config-typescript',
+    '@vue/eslint-config-prettier/skip-formatting',
+    'plugin:prettier/recommended'
+  ],
+  overrides: [
+    {
+      env: {
+        browser: true,
+        node: true,
+        es6: true
+      },
+      files: ['.eslintrc.{js,cjs}'],
+      parserOptions: {
+        sourceType: 'script'
+      }
+    }
+  ],
+  globals: {
+    wx: true
+  },
+  parserOptions: {
+    ecmaVersion: 'latest',
+    sourceType: 'module'
+  },
+  plugins: ['vue'],
+  rules: {
+    'vue/multi-word-component-names': 'off',
+    'element-plus/icons-vue/some-rule': 'off',
+    'prettier/prettier': ['error', { endOfLine: 'auto' }]
+  },
+  ignorePatterns: ['src/mp_ecard_sdk']
+}

+ 22 - 0
.gitignore

@@ -0,0 +1,22 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+.DS_Store
+dist
+*.local
+
+# Editor directories and files
+.idea
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+*.code-workspace

+ 9 - 0
.prettierrc.json

@@ -0,0 +1,9 @@
+{
+  "$schema": "https://json.schemastore.org/prettierrc",
+  "semi": false,
+  "tabWidth": 2,
+  "singleQuote": true,
+  "printWidth": 100,
+  "trailingComma": "none",
+  "endOfLine": "auto"
+}

+ 5 - 0
README.md

@@ -0,0 +1,5 @@
+# JY_2_MP
+
+营销行为小助手小程序 unipp
+
+VITE + VUE3 + TS + Pinnia + uv-ui

BIN
dist.zip


+ 13 - 0
env/.env.development

@@ -0,0 +1,13 @@
+NODE_ENV=development
+
+# pre环境
+# VITE_APP_URL=https://mic.freerr.cn
+# VITE_APP_URL=http://10.144.62.235:9999
+# 生产
+VITE_APP_URL=https://cnbg.yaoyi.net
+# VITE_APP_URL=https://mic.cnbg.com.cn
+# 中生测试
+# VITE_APP_URL=https://mic-t.cnbg.com.cn
+
+
+

+ 6 - 0
env/.env.production

@@ -0,0 +1,6 @@
+NODE_ENV=production
+# VITE_APP_URL=https://cnbg.yaoyi.net
+# h5地址
+VITE_APP_URL=https://mic.cnbg.com.cn
+# 测试环境
+# VITE_APP_URL=https://mic-t.cnbg.com.cn

+ 20 - 0
index.html

@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8" />
+    <script>
+      var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
+        CSS.supports('top: constant(a)'))
+      document.write(
+        '<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
+        (coverSupport ? ', viewport-fit=cover' : '') + '" />')
+    </script>
+    <title></title>
+    <!--preload-links-->
+    <!--app-context-->
+  </head>
+  <body>
+    <div id="app"><!--app-html--></div>
+    <script type="module" src="/src/main.ts"></script>
+  </body>
+</html>

+ 24820 - 0
package-lock.json

@@ -0,0 +1,24820 @@
+{
+  "name": "uni-preset-vue",
+  "version": "0.0.0",
+  "lockfileVersion": 2,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "uni-preset-vue",
+      "version": "0.0.0",
+      "dependencies": {
+        "@climblee/uv-ui": "^1.1.15",
+        "@dcloudio/uni-app": "3.0.0-3081220230817001",
+        "@dcloudio/uni-app-plus": "3.0.0-3081220230817001",
+        "@dcloudio/uni-components": "3.0.0-3081220230817001",
+        "@dcloudio/uni-h5": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-alipay": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-baidu": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-jd": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-kuaishou": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-lark": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-qq": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-toutiao": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-weixin": "3.0.0-3081220230817001",
+        "@dcloudio/uni-quickapp-webview": "3.0.0-3081220230817001",
+        "@dcloudio/uni-ui": "^1.4.28",
+        "dayjs": "^1.11.10",
+        "eslint-config-prettier": "^9.0.0",
+        "eslint-plugin-prettier": "^5.0.1",
+        "heic2any": "^0.0.4",
+        "pinia-plugin-persistedstate": "^3.2.0",
+        "prettier": "^3.0.3",
+        "qs": "^6.11.2",
+        "sass": "^1.69.3",
+        "sass-loader": "^13.3.2",
+        "vue": "^3.2.45",
+        "vue-i18n": "^9.1.9"
+      },
+      "devDependencies": {
+        "@dcloudio/types": "^3.4.1",
+        "@dcloudio/uni-automator": "3.0.0-3081220230817001",
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-stacktracey": "3.0.0-3081220230817001",
+        "@dcloudio/vite-plugin-uni": "3.0.0-3081220230817001",
+        "@types/node": "^20.10.1",
+        "@types/qs": "^6.9.9",
+        "@typescript-eslint/eslint-plugin": "^6.8.0",
+        "@vitejs/plugin-vue-jsx": "^3.0.2",
+        "@vue/eslint-config-prettier": "^8.0.0",
+        "@vue/eslint-config-typescript": "^12.0.0",
+        "@vue/runtime-core": "^3.2.45",
+        "@vue/tsconfig": "^0.1.3",
+        "eslint": "^8.51.0",
+        "eslint-config-standard-with-typescript": "^39.1.1",
+        "eslint-plugin-import": "^2.28.1",
+        "eslint-plugin-n": "^16.2.0",
+        "eslint-plugin-promise": "^6.1.1",
+        "eslint-plugin-vue": "^9.17.0",
+        "pinia": "^2.0.36",
+        "typescript": "^5.2.2",
+        "vite": "4.1.5",
+        "vue-tsc": "^1.0.24"
+      }
+    },
+    "node_modules/@aashutoshrathi/word-wrap": {
+      "version": "1.2.6",
+      "resolved": "https://registry.npmmirror.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
+      "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/@ampproject/remapping": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.1.tgz",
+      "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
+      "dependencies": {
+        "@jridgewell/gen-mapping": "^0.3.0",
+        "@jridgewell/trace-mapping": "^0.3.9"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@babel/code-frame": {
+      "version": "7.23.5",
+      "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.23.5.tgz",
+      "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
+      "dependencies": {
+        "@babel/highlight": "^7.23.4",
+        "chalk": "^2.4.2"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/compat-data": {
+      "version": "7.23.5",
+      "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.23.5.tgz",
+      "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/core": {
+      "version": "7.23.9",
+      "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.23.9.tgz",
+      "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==",
+      "dependencies": {
+        "@ampproject/remapping": "^2.2.0",
+        "@babel/code-frame": "^7.23.5",
+        "@babel/generator": "^7.23.6",
+        "@babel/helper-compilation-targets": "^7.23.6",
+        "@babel/helper-module-transforms": "^7.23.3",
+        "@babel/helpers": "^7.23.9",
+        "@babel/parser": "^7.23.9",
+        "@babel/template": "^7.23.9",
+        "@babel/traverse": "^7.23.9",
+        "@babel/types": "^7.23.9",
+        "convert-source-map": "^2.0.0",
+        "debug": "^4.1.0",
+        "gensync": "^1.0.0-beta.2",
+        "json5": "^2.2.3",
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/generator": {
+      "version": "7.23.6",
+      "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.23.6.tgz",
+      "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
+      "dependencies": {
+        "@babel/types": "^7.23.6",
+        "@jridgewell/gen-mapping": "^0.3.2",
+        "@jridgewell/trace-mapping": "^0.3.17",
+        "jsesc": "^2.5.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-annotate-as-pure": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz",
+      "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
+      "version": "7.22.15",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz",
+      "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/types": "^7.22.15"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-compilation-targets": {
+      "version": "7.23.6",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz",
+      "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==",
+      "dependencies": {
+        "@babel/compat-data": "^7.23.5",
+        "@babel/helper-validator-option": "^7.23.5",
+        "browserslist": "^4.22.2",
+        "lru-cache": "^5.1.1",
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-create-class-features-plugin": {
+      "version": "7.23.10",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz",
+      "integrity": "sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.22.5",
+        "@babel/helper-environment-visitor": "^7.22.20",
+        "@babel/helper-function-name": "^7.23.0",
+        "@babel/helper-member-expression-to-functions": "^7.23.0",
+        "@babel/helper-optimise-call-expression": "^7.22.5",
+        "@babel/helper-replace-supers": "^7.22.20",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+        "@babel/helper-split-export-declaration": "^7.22.6",
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-create-regexp-features-plugin": {
+      "version": "7.22.15",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz",
+      "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.22.5",
+        "regexpu-core": "^5.3.1",
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-define-polyfill-provider": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz",
+      "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-compilation-targets": "^7.22.6",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "debug": "^4.1.1",
+        "lodash.debounce": "^4.0.8",
+        "resolve": "^1.14.2"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
+      }
+    },
+    "node_modules/@babel/helper-environment-visitor": {
+      "version": "7.22.20",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
+      "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-function-name": {
+      "version": "7.23.0",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
+      "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
+      "dependencies": {
+        "@babel/template": "^7.22.15",
+        "@babel/types": "^7.23.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-hoist-variables": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
+      "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-member-expression-to-functions": {
+      "version": "7.23.0",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz",
+      "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/types": "^7.23.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-module-imports": {
+      "version": "7.22.15",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
+      "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
+      "dependencies": {
+        "@babel/types": "^7.22.15"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-module-transforms": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz",
+      "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==",
+      "dependencies": {
+        "@babel/helper-environment-visitor": "^7.22.20",
+        "@babel/helper-module-imports": "^7.22.15",
+        "@babel/helper-simple-access": "^7.22.5",
+        "@babel/helper-split-export-declaration": "^7.22.6",
+        "@babel/helper-validator-identifier": "^7.22.20"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-optimise-call-expression": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz",
+      "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-plugin-utils": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
+      "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
+      "dev": true,
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-remap-async-to-generator": {
+      "version": "7.22.20",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz",
+      "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.22.5",
+        "@babel/helper-environment-visitor": "^7.22.20",
+        "@babel/helper-wrap-function": "^7.22.20"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-replace-supers": {
+      "version": "7.22.20",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz",
+      "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-environment-visitor": "^7.22.20",
+        "@babel/helper-member-expression-to-functions": "^7.22.15",
+        "@babel/helper-optimise-call-expression": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-simple-access": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
+      "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz",
+      "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==",
+      "dev": true,
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-split-export-declaration": {
+      "version": "7.22.6",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
+      "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-string-parser": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
+      "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-validator-identifier": {
+      "version": "7.22.20",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+      "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-validator-option": {
+      "version": "7.23.5",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz",
+      "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-wrap-function": {
+      "version": "7.22.20",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz",
+      "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-function-name": "^7.22.5",
+        "@babel/template": "^7.22.15",
+        "@babel/types": "^7.22.19"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helpers": {
+      "version": "7.23.9",
+      "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.23.9.tgz",
+      "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==",
+      "dependencies": {
+        "@babel/template": "^7.23.9",
+        "@babel/traverse": "^7.23.9",
+        "@babel/types": "^7.23.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/highlight": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.23.4.tgz",
+      "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
+      "dependencies": {
+        "@babel/helper-validator-identifier": "^7.22.20",
+        "chalk": "^2.4.2",
+        "js-tokens": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/parser": {
+      "version": "7.23.9",
+      "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.23.9.tgz",
+      "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==",
+      "bin": {
+        "parser": "bin/babel-parser.js"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz",
+      "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz",
+      "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+        "@babel/plugin-transform-optional-chaining": "^7.23.3"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.13.0"
+      }
+    },
+    "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
+      "version": "7.23.7",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz",
+      "integrity": "sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-environment-visitor": "^7.22.20",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-proposal-private-property-in-object": {
+      "version": "7.21.0-placeholder-for-preset-env.2",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
+      "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
+      "dev": true,
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-async-generators": {
+      "version": "7.8.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
+      "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-bigint": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
+      "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-class-properties": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
+      "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.12.13"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-class-static-block": {
+      "version": "7.14.5",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
+      "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-dynamic-import": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
+      "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-export-namespace-from": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
+      "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.8.3"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-import-assertions": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz",
+      "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-import-attributes": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz",
+      "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-import-meta": {
+      "version": "7.10.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
+      "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.10.4"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-json-strings": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
+      "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-jsx": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz",
+      "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
+      "version": "7.10.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+      "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.10.4"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+      "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-numeric-separator": {
+      "version": "7.10.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
+      "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.10.4"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-object-rest-spread": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
+      "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-optional-catch-binding": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+      "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-optional-chaining": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
+      "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-private-property-in-object": {
+      "version": "7.14.5",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
+      "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-top-level-await": {
+      "version": "7.14.5",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
+      "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-typescript": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz",
+      "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-unicode-sets-regex": {
+      "version": "7.18.6",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
+      "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-arrow-functions": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz",
+      "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-async-generator-functions": {
+      "version": "7.23.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz",
+      "integrity": "sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-environment-visitor": "^7.22.20",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-remap-async-to-generator": "^7.22.20",
+        "@babel/plugin-syntax-async-generators": "^7.8.4"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-async-to-generator": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz",
+      "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-module-imports": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-remap-async-to-generator": "^7.22.20"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-block-scoped-functions": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz",
+      "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-block-scoping": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz",
+      "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-class-properties": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz",
+      "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-create-class-features-plugin": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-class-static-block": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz",
+      "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-create-class-features-plugin": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-class-static-block": "^7.14.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.12.0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-classes": {
+      "version": "7.23.8",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz",
+      "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.22.5",
+        "@babel/helper-compilation-targets": "^7.23.6",
+        "@babel/helper-environment-visitor": "^7.22.20",
+        "@babel/helper-function-name": "^7.23.0",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-replace-supers": "^7.22.20",
+        "@babel/helper-split-export-declaration": "^7.22.6",
+        "globals": "^11.1.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-computed-properties": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz",
+      "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/template": "^7.22.15"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-destructuring": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz",
+      "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-dotall-regex": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz",
+      "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-duplicate-keys": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz",
+      "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-dynamic-import": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz",
+      "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-dynamic-import": "^7.8.3"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-exponentiation-operator": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz",
+      "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-export-namespace-from": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz",
+      "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-for-of": {
+      "version": "7.23.6",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz",
+      "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-function-name": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz",
+      "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-compilation-targets": "^7.22.15",
+        "@babel/helper-function-name": "^7.23.0",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-json-strings": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz",
+      "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-json-strings": "^7.8.3"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-literals": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz",
+      "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-logical-assignment-operators": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz",
+      "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-member-expression-literals": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz",
+      "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-modules-amd": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz",
+      "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-module-transforms": "^7.23.3",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-modules-commonjs": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz",
+      "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-module-transforms": "^7.23.3",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-simple-access": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-modules-systemjs": {
+      "version": "7.23.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz",
+      "integrity": "sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-hoist-variables": "^7.22.5",
+        "@babel/helper-module-transforms": "^7.23.3",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-validator-identifier": "^7.22.20"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-modules-umd": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz",
+      "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-module-transforms": "^7.23.3",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz",
+      "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-new-target": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz",
+      "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz",
+      "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-numeric-separator": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz",
+      "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-object-rest-spread": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz",
+      "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==",
+      "dev": true,
+      "dependencies": {
+        "@babel/compat-data": "^7.23.3",
+        "@babel/helper-compilation-targets": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+        "@babel/plugin-transform-parameters": "^7.23.3"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-object-super": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz",
+      "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-replace-supers": "^7.22.20"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-optional-catch-binding": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz",
+      "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-optional-chaining": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz",
+      "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+        "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-parameters": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz",
+      "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-private-methods": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz",
+      "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-create-class-features-plugin": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-private-property-in-object": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz",
+      "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.22.5",
+        "@babel/helper-create-class-features-plugin": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-property-literals": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz",
+      "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-regenerator": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz",
+      "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "regenerator-transform": "^0.15.2"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-reserved-words": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz",
+      "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-shorthand-properties": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz",
+      "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-spread": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz",
+      "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-sticky-regex": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz",
+      "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-template-literals": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz",
+      "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-typeof-symbol": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz",
+      "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-typescript": {
+      "version": "7.23.6",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz",
+      "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.22.5",
+        "@babel/helper-create-class-features-plugin": "^7.23.6",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-typescript": "^7.23.3"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-unicode-escapes": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz",
+      "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-unicode-property-regex": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz",
+      "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-unicode-regex": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz",
+      "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-unicode-sets-regex": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz",
+      "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/preset-env": {
+      "version": "7.23.9",
+      "resolved": "https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.23.9.tgz",
+      "integrity": "sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A==",
+      "dev": true,
+      "dependencies": {
+        "@babel/compat-data": "^7.23.5",
+        "@babel/helper-compilation-targets": "^7.23.6",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-validator-option": "^7.23.5",
+        "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3",
+        "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3",
+        "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7",
+        "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
+        "@babel/plugin-syntax-async-generators": "^7.8.4",
+        "@babel/plugin-syntax-class-properties": "^7.12.13",
+        "@babel/plugin-syntax-class-static-block": "^7.14.5",
+        "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+        "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
+        "@babel/plugin-syntax-import-assertions": "^7.23.3",
+        "@babel/plugin-syntax-import-attributes": "^7.23.3",
+        "@babel/plugin-syntax-import-meta": "^7.10.4",
+        "@babel/plugin-syntax-json-strings": "^7.8.3",
+        "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
+        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+        "@babel/plugin-syntax-numeric-separator": "^7.10.4",
+        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+        "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+        "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
+        "@babel/plugin-syntax-top-level-await": "^7.14.5",
+        "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
+        "@babel/plugin-transform-arrow-functions": "^7.23.3",
+        "@babel/plugin-transform-async-generator-functions": "^7.23.9",
+        "@babel/plugin-transform-async-to-generator": "^7.23.3",
+        "@babel/plugin-transform-block-scoped-functions": "^7.23.3",
+        "@babel/plugin-transform-block-scoping": "^7.23.4",
+        "@babel/plugin-transform-class-properties": "^7.23.3",
+        "@babel/plugin-transform-class-static-block": "^7.23.4",
+        "@babel/plugin-transform-classes": "^7.23.8",
+        "@babel/plugin-transform-computed-properties": "^7.23.3",
+        "@babel/plugin-transform-destructuring": "^7.23.3",
+        "@babel/plugin-transform-dotall-regex": "^7.23.3",
+        "@babel/plugin-transform-duplicate-keys": "^7.23.3",
+        "@babel/plugin-transform-dynamic-import": "^7.23.4",
+        "@babel/plugin-transform-exponentiation-operator": "^7.23.3",
+        "@babel/plugin-transform-export-namespace-from": "^7.23.4",
+        "@babel/plugin-transform-for-of": "^7.23.6",
+        "@babel/plugin-transform-function-name": "^7.23.3",
+        "@babel/plugin-transform-json-strings": "^7.23.4",
+        "@babel/plugin-transform-literals": "^7.23.3",
+        "@babel/plugin-transform-logical-assignment-operators": "^7.23.4",
+        "@babel/plugin-transform-member-expression-literals": "^7.23.3",
+        "@babel/plugin-transform-modules-amd": "^7.23.3",
+        "@babel/plugin-transform-modules-commonjs": "^7.23.3",
+        "@babel/plugin-transform-modules-systemjs": "^7.23.9",
+        "@babel/plugin-transform-modules-umd": "^7.23.3",
+        "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5",
+        "@babel/plugin-transform-new-target": "^7.23.3",
+        "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4",
+        "@babel/plugin-transform-numeric-separator": "^7.23.4",
+        "@babel/plugin-transform-object-rest-spread": "^7.23.4",
+        "@babel/plugin-transform-object-super": "^7.23.3",
+        "@babel/plugin-transform-optional-catch-binding": "^7.23.4",
+        "@babel/plugin-transform-optional-chaining": "^7.23.4",
+        "@babel/plugin-transform-parameters": "^7.23.3",
+        "@babel/plugin-transform-private-methods": "^7.23.3",
+        "@babel/plugin-transform-private-property-in-object": "^7.23.4",
+        "@babel/plugin-transform-property-literals": "^7.23.3",
+        "@babel/plugin-transform-regenerator": "^7.23.3",
+        "@babel/plugin-transform-reserved-words": "^7.23.3",
+        "@babel/plugin-transform-shorthand-properties": "^7.23.3",
+        "@babel/plugin-transform-spread": "^7.23.3",
+        "@babel/plugin-transform-sticky-regex": "^7.23.3",
+        "@babel/plugin-transform-template-literals": "^7.23.3",
+        "@babel/plugin-transform-typeof-symbol": "^7.23.3",
+        "@babel/plugin-transform-unicode-escapes": "^7.23.3",
+        "@babel/plugin-transform-unicode-property-regex": "^7.23.3",
+        "@babel/plugin-transform-unicode-regex": "^7.23.3",
+        "@babel/plugin-transform-unicode-sets-regex": "^7.23.3",
+        "@babel/preset-modules": "0.1.6-no-external-plugins",
+        "babel-plugin-polyfill-corejs2": "^0.4.8",
+        "babel-plugin-polyfill-corejs3": "^0.9.0",
+        "babel-plugin-polyfill-regenerator": "^0.5.5",
+        "core-js-compat": "^3.31.0",
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/preset-modules": {
+      "version": "0.1.6-no-external-plugins",
+      "resolved": "https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz",
+      "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/types": "^7.4.4",
+        "esutils": "^2.0.2"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0"
+      }
+    },
+    "node_modules/@babel/regjsgen": {
+      "version": "0.8.0",
+      "resolved": "https://registry.npmmirror.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
+      "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==",
+      "dev": true
+    },
+    "node_modules/@babel/runtime": {
+      "version": "7.23.9",
+      "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.23.9.tgz",
+      "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==",
+      "dependencies": {
+        "regenerator-runtime": "^0.14.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/runtime/node_modules/regenerator-runtime": {
+      "version": "0.14.1",
+      "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+      "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
+    },
+    "node_modules/@babel/template": {
+      "version": "7.23.9",
+      "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.23.9.tgz",
+      "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==",
+      "dependencies": {
+        "@babel/code-frame": "^7.23.5",
+        "@babel/parser": "^7.23.9",
+        "@babel/types": "^7.23.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/traverse": {
+      "version": "7.23.9",
+      "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.23.9.tgz",
+      "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==",
+      "dependencies": {
+        "@babel/code-frame": "^7.23.5",
+        "@babel/generator": "^7.23.6",
+        "@babel/helper-environment-visitor": "^7.22.20",
+        "@babel/helper-function-name": "^7.23.0",
+        "@babel/helper-hoist-variables": "^7.22.5",
+        "@babel/helper-split-export-declaration": "^7.22.6",
+        "@babel/parser": "^7.23.9",
+        "@babel/types": "^7.23.9",
+        "debug": "^4.3.1",
+        "globals": "^11.1.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/types": {
+      "version": "7.23.9",
+      "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.23.9.tgz",
+      "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==",
+      "dependencies": {
+        "@babel/helper-string-parser": "^7.23.4",
+        "@babel/helper-validator-identifier": "^7.22.20",
+        "to-fast-properties": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@bcoe/v8-coverage": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmmirror.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
+      "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/@climblee/uv-ui": {
+      "version": "1.1.20",
+      "resolved": "https://registry.npmmirror.com/@climblee/uv-ui/-/uv-ui-1.1.20.tgz",
+      "integrity": "sha512-jkyesHJsPJkF4Nap9ZmG1/ibKlxXA5M8+ntqKXwwloIsYSYL5SOKb0gyPj17aBOU1PkJpmeiZ8PwnTolhK2/HA=="
+    },
+    "node_modules/@dcloudio/types": {
+      "version": "3.4.7",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/types/-/types-3.4.7.tgz",
+      "integrity": "sha512-RuErDYDAWY3KMlACT5NhJAKPxwjFjdzt7I/n50xCBvCSnH/84CzDPDJHRmmP6c0VOfMDHmV88V+sRBvBQRSp+w=="
+    },
+    "node_modules/@dcloudio/uni-app": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-app/-/uni-app-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-sf8PzXHSd/VFCn7X9+QbD4nrY21FnIwjrhyX2hFit7PZK9kpyQluqCmG7YuotuXJzsNML8c8u2O9q5FaeOyTHg==",
+      "dependencies": {
+        "@dcloudio/uni-cloud": "3.0.0-3081220230817001",
+        "@dcloudio/uni-components": "3.0.0-3081220230817001",
+        "@dcloudio/uni-i18n": "3.0.0-3081220230817001",
+        "@dcloudio/uni-push": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-stat": "3.0.0-3081220230817001",
+        "@vue/shared": "3.2.47"
+      },
+      "peerDependencies": {
+        "@dcloudio/types": "^3.3.2"
+      }
+    },
+    "node_modules/@dcloudio/uni-app-plus": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-app-plus/-/uni-app-plus-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-GpQobx3WbcyOZ49f8JM+febzKvlthFBAxcs4xrbtNVzmkj0jLJoh9GoH37oa7m5DI1k4l5wUuwvg4/JxBbhOSA==",
+      "dependencies": {
+        "@dcloudio/uni-app-uts": "3.0.0-3081220230817001",
+        "@dcloudio/uni-app-vite": "3.0.0-3081220230817001",
+        "@dcloudio/uni-app-vue": "3.0.0-3081220230817001",
+        "debug": "^4.3.3",
+        "fs-extra": "^10.0.0",
+        "licia": "^1.29.0",
+        "postcss-selector-parser": "^6.0.6"
+      }
+    },
+    "node_modules/@dcloudio/uni-app-uts": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-app-uts/-/uni-app-uts-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-snMFEpTw5T0TT5uFwp0piytLRB0FBRHDM5ML00E1nrzfts0XlaFKoB4UsvLySG5sE5+Xt8F5/uzKxid3mcgTLQ==",
+      "dependencies": {
+        "@babel/parser": "^7.16.4",
+        "@babel/types": "^7.20.7",
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-i18n": "3.0.0-3081220230817001",
+        "@dcloudio/uni-nvue-styler": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@rollup/pluginutils": "^4.2.0",
+        "@vue/compiler-core": "3.2.47",
+        "@vue/compiler-sfc": "3.2.47",
+        "@vue/shared": "3.2.47",
+        "debug": "^4.3.3",
+        "es-module-lexer": "^1.2.1",
+        "fs-extra": "^10.0.0",
+        "picocolors": "^1.0.0",
+        "source-map": "^0.6.1"
+      }
+    },
+    "node_modules/@dcloudio/uni-app-vite": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-app-vite/-/uni-app-vite-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-iHmKh6hjPGh+FC6Fi4qqwT5N31QiWv9JymCLdbkOJRi71A3byDjxoH7ScSEEEg+A5AAPky6LHbmFmznPMeSwAg==",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-i18n": "3.0.0-3081220230817001",
+        "@dcloudio/uni-nvue-styler": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@rollup/pluginutils": "^4.2.0",
+        "@vitejs/plugin-vue": "^4.2.1",
+        "@vue/compiler-dom": "3.2.47",
+        "@vue/compiler-sfc": "3.2.47",
+        "debug": "^4.3.3",
+        "fs-extra": "^10.0.0",
+        "picocolors": "^1.0.0"
+      }
+    },
+    "node_modules/@dcloudio/uni-app-vue": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-app-vue/-/uni-app-vue-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-08ZUIn2a+OZWjqvjTbLygWZOY9YXbf2J1ns2letBI9aoMZDx+Sgx2lUFWHDksmOhvApPLKrRjJM0Hmmxi2mjJw=="
+    },
+    "node_modules/@dcloudio/uni-automator": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-automator/-/uni-automator-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-boaRlUAAXsEh4aN5PbtMVvzdmvXqoEWa8eQBD4oCH36lyGgK8q75vsjLRi4LBFFwNlCNMrYepTNbBCjP+Sgt0g==",
+      "dev": true,
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "address": "^1.1.2",
+        "cross-env": "^7.0.3",
+        "debug": "^4.3.3",
+        "default-gateway": "^6.0.3",
+        "fs-extra": "^10.0.0",
+        "jsonc-parser": "^3.2.0",
+        "licia": "^1.29.0",
+        "qrcode-reader": "^1.0.4",
+        "qrcode-terminal": "^0.12.0",
+        "ws": "^8.4.2"
+      },
+      "peerDependencies": {
+        "jest": "27.0.4",
+        "jest-environment-node": "27.5.1"
+      }
+    },
+    "node_modules/@dcloudio/uni-cli-shared": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-cli-shared/-/uni-cli-shared-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-FOeydfIdKZg+MnQsHSFLXBzzmXtgCWnmEyjw3MHNN5mGwQB6+f7vK8sLw+yjizD/j71eMnh8XXCk+dV3nD/Vzg==",
+      "dependencies": {
+        "@ampproject/remapping": "^2.1.2",
+        "@babel/core": "^7.21.3",
+        "@babel/parser": "^7.16.4",
+        "@babel/types": "^7.20.7",
+        "@dcloudio/uni-i18n": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@intlify/core-base": "9.1.9",
+        "@intlify/shared": "9.1.9",
+        "@intlify/vue-devtools": "9.1.9",
+        "@rollup/pluginutils": "^4.2.0",
+        "@vue/compiler-core": "3.2.47",
+        "@vue/compiler-dom": "3.2.47",
+        "@vue/compiler-sfc": "3.2.47",
+        "@vue/server-renderer": "3.2.47",
+        "@vue/shared": "3.2.47",
+        "autoprefixer": "^10.4.14",
+        "base64url": "^3.0.1",
+        "chokidar": "^3.5.3",
+        "compare-versions": "^3.6.0",
+        "debug": "^4.3.3",
+        "es-module-lexer": "^1.2.1",
+        "esbuild": "^0.17.5",
+        "estree-walker": "^2.0.2",
+        "fast-glob": "^3.2.11",
+        "fs-extra": "^10.0.0",
+        "hash-sum": "^2.0.0",
+        "jsonc-parser": "^3.0.0",
+        "magic-string": "^0.30.0",
+        "merge": "^2.1.1",
+        "mime": "^3.0.0",
+        "module-alias": "^2.2.2",
+        "os-locale-s-fix": "^1.0.8-fix-1",
+        "picocolors": "^1.0.0",
+        "postcss-import": "^14.0.2",
+        "postcss-load-config": "^3.1.1",
+        "postcss-modules": "^4.3.0",
+        "postcss-selector-parser": "^6.0.6",
+        "resolve": "^1.22.1",
+        "tapable": "^2.2.0",
+        "xregexp": "3.1.0"
+      },
+      "engines": {
+        "node": "^14.18.0 || >=16.0.0"
+      }
+    },
+    "node_modules/@dcloudio/uni-cli-shared/node_modules/@vue/reactivity": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.47.tgz",
+      "integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==",
+      "peer": true,
+      "dependencies": {
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "node_modules/@dcloudio/uni-cli-shared/node_modules/@vue/runtime-core": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.47.tgz",
+      "integrity": "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==",
+      "peer": true,
+      "dependencies": {
+        "@vue/reactivity": "3.2.47",
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "node_modules/@dcloudio/uni-cli-shared/node_modules/@vue/runtime-dom": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz",
+      "integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==",
+      "peer": true,
+      "dependencies": {
+        "@vue/runtime-core": "3.2.47",
+        "@vue/shared": "3.2.47",
+        "csstype": "^2.6.8"
+      }
+    },
+    "node_modules/@dcloudio/uni-cli-shared/node_modules/@vue/server-renderer": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.47.tgz",
+      "integrity": "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==",
+      "dependencies": {
+        "@vue/compiler-ssr": "3.2.47",
+        "@vue/shared": "3.2.47"
+      },
+      "peerDependencies": {
+        "vue": "3.2.47"
+      }
+    },
+    "node_modules/@dcloudio/uni-cli-shared/node_modules/csstype": {
+      "version": "2.6.21",
+      "resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz",
+      "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==",
+      "peer": true
+    },
+    "node_modules/@dcloudio/uni-cli-shared/node_modules/vue": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.47.tgz",
+      "integrity": "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==",
+      "peer": true,
+      "dependencies": {
+        "@vue/compiler-dom": "3.2.47",
+        "@vue/compiler-sfc": "3.2.47",
+        "@vue/runtime-dom": "3.2.47",
+        "@vue/server-renderer": "3.2.47",
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "node_modules/@dcloudio/uni-cloud": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-cloud/-/uni-cloud-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-rrHN4PvvylrhmivAoSv4h8ZcQ3ZWHnMRXhQWPC9FBR1TInrrxrrAHuMqSZn6pTIXhCiRA3Kuy6aDNVCbt6VA+g==",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-i18n": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/shared": "3.2.47",
+        "fast-glob": "^3.2.11"
+      }
+    },
+    "node_modules/@dcloudio/uni-components": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-components/-/uni-components-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-FlIrTgR/9Yp8FWYfhXfLPd0jJtBwJwRBAWWmLNaufkTojm6X7rX8wQOd13n+7gJGKzfXcEV8npOYpVou4P46Pw==",
+      "dependencies": {
+        "@dcloudio/uni-cloud": "3.0.0-3081220230817001",
+        "@dcloudio/uni-h5": "3.0.0-3081220230817001",
+        "@dcloudio/uni-i18n": "3.0.0-3081220230817001"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-h5/-/uni-h5-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-m2RCZpYxuAGnXlQKSQ8FGy4OlnUJJ8XMx2HNQWriDwtjDpAGDU8I2LZQZ7MHCNPIUd503y+mgU2NPlSQHnrlkQ==",
+      "dependencies": {
+        "@dcloudio/uni-h5-vite": "3.0.0-3081220230817001",
+        "@dcloudio/uni-h5-vue": "3.0.0-3081220230817001",
+        "@dcloudio/uni-i18n": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/server-renderer": "3.2.47",
+        "@vue/shared": "3.2.47",
+        "debug": "^4.3.3",
+        "localstorage-polyfill": "^1.0.1",
+        "postcss-selector-parser": "^6.0.6",
+        "safe-area-insets": "^1.4.1",
+        "vue-router": "^4.1.6",
+        "xmlhttprequest": "^1.8.0"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5-vite": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-h5-vite/-/uni-h5-vite-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-x7F6mUTjHiOx7+lj5yIrzhD7gr0HTNJaku5gV3O8bFjxKLcIkFkAyliKPbqJ4QZCmCCmEfJpOGKrDhk35tlibg==",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@rollup/pluginutils": "^4.2.0",
+        "@vue/compiler-dom": "3.2.47",
+        "@vue/compiler-sfc": "3.2.47",
+        "@vue/server-renderer": "3.2.47",
+        "@vue/shared": "3.2.47",
+        "debug": "^4.3.3",
+        "fs-extra": "^10.0.0",
+        "mime": "^3.0.0",
+        "module-alias": "^2.2.2"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5-vite/node_modules/@vue/reactivity": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.47.tgz",
+      "integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==",
+      "peer": true,
+      "dependencies": {
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5-vite/node_modules/@vue/runtime-core": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.47.tgz",
+      "integrity": "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==",
+      "peer": true,
+      "dependencies": {
+        "@vue/reactivity": "3.2.47",
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5-vite/node_modules/@vue/runtime-dom": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz",
+      "integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==",
+      "peer": true,
+      "dependencies": {
+        "@vue/runtime-core": "3.2.47",
+        "@vue/shared": "3.2.47",
+        "csstype": "^2.6.8"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5-vite/node_modules/@vue/server-renderer": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.47.tgz",
+      "integrity": "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==",
+      "dependencies": {
+        "@vue/compiler-ssr": "3.2.47",
+        "@vue/shared": "3.2.47"
+      },
+      "peerDependencies": {
+        "vue": "3.2.47"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5-vite/node_modules/csstype": {
+      "version": "2.6.21",
+      "resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz",
+      "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==",
+      "peer": true
+    },
+    "node_modules/@dcloudio/uni-h5-vite/node_modules/vue": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.47.tgz",
+      "integrity": "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==",
+      "peer": true,
+      "dependencies": {
+        "@vue/compiler-dom": "3.2.47",
+        "@vue/compiler-sfc": "3.2.47",
+        "@vue/runtime-dom": "3.2.47",
+        "@vue/server-renderer": "3.2.47",
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5-vue": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-h5-vue/-/uni-h5-vue-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-q1eFoXb5/4whNIJ1CumKmeypPjZofw8xDQRHZeGZ7NVRQ0/MYnEm6A0n/vkmEo1IgTZIY83m/jr6RNg7a9Ko/A==",
+      "dependencies": {
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/server-renderer": "3.2.47"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5-vue/node_modules/@vue/reactivity": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.47.tgz",
+      "integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==",
+      "peer": true,
+      "dependencies": {
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5-vue/node_modules/@vue/runtime-core": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.47.tgz",
+      "integrity": "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==",
+      "peer": true,
+      "dependencies": {
+        "@vue/reactivity": "3.2.47",
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5-vue/node_modules/@vue/runtime-dom": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz",
+      "integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==",
+      "peer": true,
+      "dependencies": {
+        "@vue/runtime-core": "3.2.47",
+        "@vue/shared": "3.2.47",
+        "csstype": "^2.6.8"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5-vue/node_modules/@vue/server-renderer": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.47.tgz",
+      "integrity": "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==",
+      "dependencies": {
+        "@vue/compiler-ssr": "3.2.47",
+        "@vue/shared": "3.2.47"
+      },
+      "peerDependencies": {
+        "vue": "3.2.47"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5-vue/node_modules/csstype": {
+      "version": "2.6.21",
+      "resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz",
+      "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==",
+      "peer": true
+    },
+    "node_modules/@dcloudio/uni-h5-vue/node_modules/vue": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.47.tgz",
+      "integrity": "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==",
+      "peer": true,
+      "dependencies": {
+        "@vue/compiler-dom": "3.2.47",
+        "@vue/compiler-sfc": "3.2.47",
+        "@vue/runtime-dom": "3.2.47",
+        "@vue/server-renderer": "3.2.47",
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5/node_modules/@vue/reactivity": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.47.tgz",
+      "integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==",
+      "peer": true,
+      "dependencies": {
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5/node_modules/@vue/runtime-core": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.47.tgz",
+      "integrity": "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==",
+      "peer": true,
+      "dependencies": {
+        "@vue/reactivity": "3.2.47",
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5/node_modules/@vue/runtime-dom": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz",
+      "integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==",
+      "peer": true,
+      "dependencies": {
+        "@vue/runtime-core": "3.2.47",
+        "@vue/shared": "3.2.47",
+        "csstype": "^2.6.8"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5/node_modules/@vue/server-renderer": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.47.tgz",
+      "integrity": "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==",
+      "dependencies": {
+        "@vue/compiler-ssr": "3.2.47",
+        "@vue/shared": "3.2.47"
+      },
+      "peerDependencies": {
+        "vue": "3.2.47"
+      }
+    },
+    "node_modules/@dcloudio/uni-h5/node_modules/csstype": {
+      "version": "2.6.21",
+      "resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz",
+      "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==",
+      "peer": true
+    },
+    "node_modules/@dcloudio/uni-h5/node_modules/vue": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.47.tgz",
+      "integrity": "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==",
+      "peer": true,
+      "dependencies": {
+        "@vue/compiler-dom": "3.2.47",
+        "@vue/compiler-sfc": "3.2.47",
+        "@vue/runtime-dom": "3.2.47",
+        "@vue/server-renderer": "3.2.47",
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "node_modules/@dcloudio/uni-i18n": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-i18n/-/uni-i18n-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-ooAIoNCy+DPlMtA4k9eoaJJsYQtici85le+ietIIzLdJoa2YUnudYv9CvG9Mw/RsKQI+MLl96ADAPgUpGzounw=="
+    },
+    "node_modules/@dcloudio/uni-mp-alipay": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-alipay/-/uni-mp-alipay-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-lZR2u8sxJ/ZaDqaxEmGzgWWKHcjnLGedDTrMh8kOEPLHO6THVNe5TP6XeiTcE0HKJfWEXv6X13erjn0FCstz3A==",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vite": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vue": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/compiler-core": "3.2.47",
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "node_modules/@dcloudio/uni-mp-baidu": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-baidu/-/uni-mp-baidu-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-FYwK1AqSc+NvtvaCia/fOP57ELx5O5icHjuwPKMsJv5eGtqlwhXzyvSCoGEFyYQcsWP9ZqYSb3fTuxVlbiEYdA==",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-compiler": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vite": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vue": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-weixin": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/compiler-core": "3.2.47",
+        "@vue/shared": "3.2.47",
+        "jimp": "^0.10.1",
+        "licia": "^1.29.0",
+        "qrcode-reader": "^1.0.4",
+        "qrcode-terminal": "^0.12.0",
+        "ws": "^8.4.2"
+      }
+    },
+    "node_modules/@dcloudio/uni-mp-compiler": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-compiler/-/uni-mp-compiler-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-KDfwEr9jFNSkNbYmdDc+zfGuZwXGkz3bW3c4cuV44IncTf/UW2m594Z2UzhJkx/p662aQ2W9M4BFZ0o5QSfQDw==",
+      "dependencies": {
+        "@babel/generator": "^7.20.5",
+        "@babel/parser": "^7.16.4",
+        "@babel/types": "^7.20.7",
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/compiler-core": "3.2.47",
+        "@vue/compiler-dom": "3.2.47",
+        "@vue/shared": "3.2.47",
+        "estree-walker": "^2.0.2"
+      }
+    },
+    "node_modules/@dcloudio/uni-mp-jd": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-jd/-/uni-mp-jd-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-sKDppXhk7k8Euce9v7ItQ2cs3+XpQV/DX8FjXzfO9DfjQEKiR/Pyfis7e3ANQrF4V/W3uwK5wgN/PyI3/NRloQ==",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-compiler": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vite": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vue": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "node_modules/@dcloudio/uni-mp-kuaishou": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-kuaishou/-/uni-mp-kuaishou-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-wYXwoxcdms8PviNsKg2Y9oqHawKqseoD97sYs94RLDVSnyO9c6NOoUMsYjXwIZXt05E56bJ9EbxDqYDwwJhEKw==",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-compiler": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vite": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vue": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-weixin": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/compiler-core": "3.2.47",
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "node_modules/@dcloudio/uni-mp-lark": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-lark/-/uni-mp-lark-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-4aHwULp+Nx55BoJvj1jCXWnVJrzl0ACEbDlXVvxmNUI5tkqn2kYL4AZgrXP1vCx8MHKVPI4E34Z+lrBTfSfKMA==",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-compiler": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-toutiao": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vite": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vue": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/compiler-core": "3.2.47",
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "node_modules/@dcloudio/uni-mp-qq": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-qq/-/uni-mp-qq-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-StSsxCCKMdZCghUZ+wdX1otCmlYkIV+O2Z/AxMv772HfIKlpDp44PPaxlKBG4L6+X7h2JsCvyZW1iSznM5A3CQ==",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vite": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vue": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/shared": "3.2.47",
+        "fs-extra": "^10.0.0"
+      }
+    },
+    "node_modules/@dcloudio/uni-mp-toutiao": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-toutiao/-/uni-mp-toutiao-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-ZMSNNjQpCV4z+76OA8rDKKhqr+vQmTvKNUOzKfND5KPYhgWbqviEBZ8ptiDT5gaWXMpkUHNfWz32hdi5CLbj5Q==",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-compiler": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vite": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vue": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/compiler-core": "3.2.47",
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "node_modules/@dcloudio/uni-mp-vite": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-vite/-/uni-mp-vite-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-jmEbsVOJ1dlj46QiSFMB2C3zbgGivkGf1KXoPTAprv0WZrkmjF1uNLj0pHFOOUnnyHwHPViEApsMOPS4twIjIQ==",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-i18n": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-compiler": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vue": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/compiler-sfc": "3.2.47",
+        "@vue/shared": "3.2.47",
+        "debug": "^4.3.3"
+      }
+    },
+    "node_modules/@dcloudio/uni-mp-vue": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-vue/-/uni-mp-vue-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-EfdTH6+qGXRh3402+psl8X4K34/gHfBPaMfxbwMsne1rGnB8ZVXiN73gVXKfCWeznvJqdWuTWmmjqaLoBhjOjA==",
+      "dependencies": {
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "node_modules/@dcloudio/uni-mp-weixin": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-weixin/-/uni-mp-weixin-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-vo2k8OaWFOvoXuRX83UCR0AOOKXXwjRDIOX0y/jUC9TX63Ne5OTdRKH9253D9109FrwtrtsUWqnpfn1ynKXl9g==",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vite": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vue": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/shared": "3.2.47",
+        "jimp": "^0.10.1",
+        "licia": "^1.29.0",
+        "qrcode-reader": "^1.0.4",
+        "qrcode-terminal": "^0.12.0",
+        "ws": "^8.4.2"
+      }
+    },
+    "node_modules/@dcloudio/uni-nvue-styler": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-nvue-styler/-/uni-nvue-styler-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-EImnyrYHmAc7ibKfIMkBG1uMavS5sPdrtQj52m40o/QNU5kcsqUk2Od9c1ULkQloxhmK2E4FZvXo4cgszE/Txw==",
+      "dependencies": {
+        "@vue/shared": "3.2.47",
+        "parse-css-font": "^4.0.0",
+        "postcss": "^8.4.23"
+      }
+    },
+    "node_modules/@dcloudio/uni-push": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-push/-/uni-push-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-1IyVJlBnZVVvY49SQKpZG5Oxak5Wl51NvYEozuYoeBaaTeZObm7B6eyd722sXi0Dd6N1sE3kIdm/XReprK53eg==",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001"
+      }
+    },
+    "node_modules/@dcloudio/uni-quickapp-webview": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-quickapp-webview/-/uni-quickapp-webview-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-w6yitVyCKEFSO+UDsJPjc5RfAstIdOEbBHgim0gInTfOl90odmyUPKDxWhwQgS5vqezBXpCj0/6ywVMHvZu+7A==",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vite": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vue": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "node_modules/@dcloudio/uni-shared": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-shared/-/uni-shared-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-NI1pBO40VqvnWjwNXad3CqrUYvr4ffGjiDMgJGMP13rgOEAqamU7ozBimoASDVPKyyfSHTeuYuh0gtaaLu4CsQ==",
+      "dependencies": {
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "node_modules/@dcloudio/uni-stacktracey": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-stacktracey/-/uni-stacktracey-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-DUTTN8JWXxjO3ryz7uhD3+vazHVMflln15+r0ycWBjXO0p0MepRY3gX5gKCyiq9D3NUIxazcFAUJ6agFVUbDog==",
+      "dev": true
+    },
+    "node_modules/@dcloudio/uni-stat": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-stat/-/uni-stat-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-xpbsor5WKU1eCbo0dmQ0hBUX6RrdG7DNDzCSD6oimndIXVGLkFhWrIC3brQ7S1G2GQvXdXnXJpUVskI3qNe/uw==",
+      "dependencies": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "debug": "^4.3.3"
+      }
+    },
+    "node_modules/@dcloudio/uni-ui": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-ui/-/uni-ui-1.5.0.tgz",
+      "integrity": "sha512-E7D37VbRZeh1E2yzrIie8psBckIrErdkUbUA751rlG8zdioGovW3zOuUsKgY+Gh7csMvi6XMEoSacvboe8o4Gw=="
+    },
+    "node_modules/@dcloudio/vite-plugin-uni": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/vite-plugin-uni/-/vite-plugin-uni-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-dLeqqyrNNUBTZfI0ppPk4YoD+DBI0gJLeTjpN6bK5i3nFKkju9g2K6IWl62YMObjTiXwQF8qAEDb+fyWoe4Ksw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/core": "^7.21.3",
+        "@babel/plugin-syntax-import-meta": "^7.10.4",
+        "@babel/plugin-transform-typescript": "^7.20.7",
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@rollup/pluginutils": "^4.2.0",
+        "@vitejs/plugin-legacy": "^4.0.3",
+        "@vitejs/plugin-vue": "^4.2.1",
+        "@vitejs/plugin-vue-jsx": "^3.0.1",
+        "@vue/compiler-core": "3.2.47",
+        "@vue/compiler-dom": "3.2.47",
+        "@vue/compiler-sfc": "3.2.47",
+        "@vue/shared": "3.2.47",
+        "cac": "6.7.9",
+        "debug": "^4.3.3",
+        "estree-walker": "^2.0.2",
+        "express": "^4.17.1",
+        "fast-glob": "^3.2.11",
+        "fs-extra": "^10.0.0",
+        "hash-sum": "^2.0.0",
+        "jsonc-parser": "^3.0.0",
+        "magic-string": "^0.30.0",
+        "picocolors": "^1.0.0",
+        "terser": "^5.4.0"
+      },
+      "bin": {
+        "uni": "bin/uni.js"
+      },
+      "engines": {
+        "node": "^14.18.0 || >=16.0.0"
+      },
+      "peerDependencies": {
+        "vite": "^4.0.0"
+      }
+    },
+    "node_modules/@esbuild/win32-x64": {
+      "version": "0.17.19",
+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz",
+      "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==",
+      "cpu": [
+        "x64"
+      ],
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@eslint-community/eslint-utils": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmmirror.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+      "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+      "dependencies": {
+        "eslint-visitor-keys": "^3.3.0"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "peerDependencies": {
+        "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+      }
+    },
+    "node_modules/@eslint-community/regexpp": {
+      "version": "4.10.0",
+      "resolved": "https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
+      "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
+      "engines": {
+        "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+      }
+    },
+    "node_modules/@eslint/eslintrc": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+      "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+      "dependencies": {
+        "ajv": "^6.12.4",
+        "debug": "^4.3.2",
+        "espree": "^9.6.0",
+        "globals": "^13.19.0",
+        "ignore": "^5.2.0",
+        "import-fresh": "^3.2.1",
+        "js-yaml": "^4.1.0",
+        "minimatch": "^3.1.2",
+        "strip-json-comments": "^3.1.1"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      }
+    },
+    "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/@eslint/eslintrc/node_modules/globals": {
+      "version": "13.24.0",
+      "resolved": "https://registry.npmmirror.com/globals/-/globals-13.24.0.tgz",
+      "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+      "dependencies": {
+        "type-fest": "^0.20.2"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@eslint/eslintrc/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/@eslint/eslintrc/node_modules/type-fest": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz",
+      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@eslint/js": {
+      "version": "8.56.0",
+      "resolved": "https://registry.npmmirror.com/@eslint/js/-/js-8.56.0.tgz",
+      "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      }
+    },
+    "node_modules/@humanwhocodes/config-array": {
+      "version": "0.11.14",
+      "resolved": "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
+      "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
+      "dependencies": {
+        "@humanwhocodes/object-schema": "^2.0.2",
+        "debug": "^4.3.1",
+        "minimatch": "^3.0.5"
+      },
+      "engines": {
+        "node": ">=10.10.0"
+      }
+    },
+    "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/@humanwhocodes/config-array/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/@humanwhocodes/module-importer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+      "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+      "engines": {
+        "node": ">=12.22"
+      }
+    },
+    "node_modules/@humanwhocodes/object-schema": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz",
+      "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw=="
+    },
+    "node_modules/@intlify/core-base": {
+      "version": "9.1.9",
+      "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.1.9.tgz",
+      "integrity": "sha512-x5T0p/Ja0S8hs5xs+ImKyYckVkL4CzcEXykVYYV6rcbXxJTe2o58IquSqX9bdncVKbRZP7GlBU1EcRaQEEJ+vw==",
+      "dependencies": {
+        "@intlify/devtools-if": "9.1.9",
+        "@intlify/message-compiler": "9.1.9",
+        "@intlify/message-resolver": "9.1.9",
+        "@intlify/runtime": "9.1.9",
+        "@intlify/shared": "9.1.9",
+        "@intlify/vue-devtools": "9.1.9"
+      },
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@intlify/devtools-if": {
+      "version": "9.1.9",
+      "resolved": "https://registry.npmmirror.com/@intlify/devtools-if/-/devtools-if-9.1.9.tgz",
+      "integrity": "sha512-oKSMKjttG3Ut/1UGEZjSdghuP3fwA15zpDPcjkf/1FjlOIm6uIBGMNS5jXzsZy593u+P/YcnrZD6cD3IVFz9vQ==",
+      "dependencies": {
+        "@intlify/shared": "9.1.9"
+      },
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@intlify/message-compiler": {
+      "version": "9.1.9",
+      "resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.1.9.tgz",
+      "integrity": "sha512-6YgCMF46Xd0IH2hMRLCssZI3gFG4aywidoWQ3QP4RGYQXQYYfFC54DxhSgfIPpVoPLQ+4AD29eoYmhiHZ+qLFQ==",
+      "dependencies": {
+        "@intlify/message-resolver": "9.1.9",
+        "@intlify/shared": "9.1.9",
+        "source-map": "0.6.1"
+      },
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@intlify/message-resolver": {
+      "version": "9.1.9",
+      "resolved": "https://registry.npmmirror.com/@intlify/message-resolver/-/message-resolver-9.1.9.tgz",
+      "integrity": "sha512-Lx/DBpigeK0sz2BBbzv5mu9/dAlt98HxwbG7xLawC3O2xMF9MNWU5FtOziwYG6TDIjNq0O/3ZbOJAxwITIWXEA==",
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@intlify/runtime": {
+      "version": "9.1.9",
+      "resolved": "https://registry.npmmirror.com/@intlify/runtime/-/runtime-9.1.9.tgz",
+      "integrity": "sha512-XgPw8+UlHCiie3fI41HPVa/VDJb3/aSH7bLhY1hJvlvNV713PFtb4p4Jo+rlE0gAoMsMCGcsiT982fImolSltg==",
+      "dependencies": {
+        "@intlify/message-compiler": "9.1.9",
+        "@intlify/message-resolver": "9.1.9",
+        "@intlify/shared": "9.1.9"
+      },
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@intlify/shared": {
+      "version": "9.1.9",
+      "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-9.1.9.tgz",
+      "integrity": "sha512-xKGM1d0EAxdDFCWedcYXOm6V5Pfw/TMudd6/qCdEb4tv0hk9EKeg7lwQF1azE0dP2phvx0yXxrt7UQK+IZjNdw==",
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@intlify/vue-devtools": {
+      "version": "9.1.9",
+      "resolved": "https://registry.npmmirror.com/@intlify/vue-devtools/-/vue-devtools-9.1.9.tgz",
+      "integrity": "sha512-YPehH9uL4vZcGXky4Ev5qQIITnHKIvsD2GKGXgqf+05osMUI6WSEQHaN9USRa318Rs8RyyPCiDfmA0hRu3k7og==",
+      "dependencies": {
+        "@intlify/message-resolver": "9.1.9",
+        "@intlify/runtime": "9.1.9",
+        "@intlify/shared": "9.1.9"
+      },
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@istanbuljs/load-nyc-config": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
+      "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "camelcase": "^5.3.1",
+        "find-up": "^4.1.0",
+        "get-package-type": "^0.1.0",
+        "js-yaml": "^3.13.1",
+        "resolve-from": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz",
+      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "sprintf-js": "~1.0.2"
+      }
+    },
+    "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": {
+      "version": "5.3.1",
+      "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz",
+      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz",
+      "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "locate-path": "^5.0.0",
+        "path-exists": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": {
+      "version": "3.14.1",
+      "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz",
+      "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "argparse": "^1.0.7",
+        "esprima": "^4.0.0"
+      },
+      "bin": {
+        "js-yaml": "bin/js-yaml.js"
+      }
+    },
+    "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz",
+      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "p-locate": "^4.1.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz",
+      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "p-try": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz",
+      "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "p-limit": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-5.0.0.tgz",
+      "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@istanbuljs/schema": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmmirror.com/@istanbuljs/schema/-/schema-0.1.3.tgz",
+      "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@jest/console": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/@jest/console/-/console-27.5.1.tgz",
+      "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jest/types": "^27.5.1",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "jest-message-util": "^27.5.1",
+        "jest-util": "^27.5.1",
+        "slash": "^3.0.0"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/@jest/console/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@jest/console/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@jest/console/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/@jest/console/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/@jest/console/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@jest/console/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@jest/core": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/@jest/core/-/core-27.5.1.tgz",
+      "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jest/console": "^27.5.1",
+        "@jest/reporters": "^27.5.1",
+        "@jest/test-result": "^27.5.1",
+        "@jest/transform": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "@types/node": "*",
+        "ansi-escapes": "^4.2.1",
+        "chalk": "^4.0.0",
+        "emittery": "^0.8.1",
+        "exit": "^0.1.2",
+        "graceful-fs": "^4.2.9",
+        "jest-changed-files": "^27.5.1",
+        "jest-config": "^27.5.1",
+        "jest-haste-map": "^27.5.1",
+        "jest-message-util": "^27.5.1",
+        "jest-regex-util": "^27.5.1",
+        "jest-resolve": "^27.5.1",
+        "jest-resolve-dependencies": "^27.5.1",
+        "jest-runner": "^27.5.1",
+        "jest-runtime": "^27.5.1",
+        "jest-snapshot": "^27.5.1",
+        "jest-util": "^27.5.1",
+        "jest-validate": "^27.5.1",
+        "jest-watcher": "^27.5.1",
+        "micromatch": "^4.0.4",
+        "rimraf": "^3.0.0",
+        "slash": "^3.0.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      },
+      "peerDependencies": {
+        "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+      },
+      "peerDependenciesMeta": {
+        "node-notifier": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@jest/core/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@jest/core/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@jest/core/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/@jest/core/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/@jest/core/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@jest/core/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@jest/environment": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/@jest/environment/-/environment-27.5.1.tgz",
+      "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jest/fake-timers": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "@types/node": "*",
+        "jest-mock": "^27.5.1"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/@jest/fake-timers": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz",
+      "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jest/types": "^27.5.1",
+        "@sinonjs/fake-timers": "^8.0.1",
+        "@types/node": "*",
+        "jest-message-util": "^27.5.1",
+        "jest-mock": "^27.5.1",
+        "jest-util": "^27.5.1"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/@jest/globals": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/@jest/globals/-/globals-27.5.1.tgz",
+      "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jest/environment": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "expect": "^27.5.1"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/@jest/reporters": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/@jest/reporters/-/reporters-27.5.1.tgz",
+      "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@bcoe/v8-coverage": "^0.2.3",
+        "@jest/console": "^27.5.1",
+        "@jest/test-result": "^27.5.1",
+        "@jest/transform": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "collect-v8-coverage": "^1.0.0",
+        "exit": "^0.1.2",
+        "glob": "^7.1.2",
+        "graceful-fs": "^4.2.9",
+        "istanbul-lib-coverage": "^3.0.0",
+        "istanbul-lib-instrument": "^5.1.0",
+        "istanbul-lib-report": "^3.0.0",
+        "istanbul-lib-source-maps": "^4.0.0",
+        "istanbul-reports": "^3.1.3",
+        "jest-haste-map": "^27.5.1",
+        "jest-resolve": "^27.5.1",
+        "jest-util": "^27.5.1",
+        "jest-worker": "^27.5.1",
+        "slash": "^3.0.0",
+        "source-map": "^0.6.0",
+        "string-length": "^4.0.1",
+        "terminal-link": "^2.0.0",
+        "v8-to-istanbul": "^8.1.0"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      },
+      "peerDependencies": {
+        "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+      },
+      "peerDependenciesMeta": {
+        "node-notifier": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@jest/reporters/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@jest/reporters/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@jest/reporters/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/@jest/reporters/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/@jest/reporters/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@jest/reporters/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@jest/source-map": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/@jest/source-map/-/source-map-27.5.1.tgz",
+      "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "callsites": "^3.0.0",
+        "graceful-fs": "^4.2.9",
+        "source-map": "^0.6.0"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/@jest/test-result": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/@jest/test-result/-/test-result-27.5.1.tgz",
+      "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jest/console": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "collect-v8-coverage": "^1.0.0"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/@jest/test-sequencer": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz",
+      "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jest/test-result": "^27.5.1",
+        "graceful-fs": "^4.2.9",
+        "jest-haste-map": "^27.5.1",
+        "jest-runtime": "^27.5.1"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/@jest/transform": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/@jest/transform/-/transform-27.5.1.tgz",
+      "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@babel/core": "^7.1.0",
+        "@jest/types": "^27.5.1",
+        "babel-plugin-istanbul": "^6.1.1",
+        "chalk": "^4.0.0",
+        "convert-source-map": "^1.4.0",
+        "fast-json-stable-stringify": "^2.0.0",
+        "graceful-fs": "^4.2.9",
+        "jest-haste-map": "^27.5.1",
+        "jest-regex-util": "^27.5.1",
+        "jest-util": "^27.5.1",
+        "micromatch": "^4.0.4",
+        "pirates": "^4.0.4",
+        "slash": "^3.0.0",
+        "source-map": "^0.6.1",
+        "write-file-atomic": "^3.0.0"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/@jest/transform/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@jest/transform/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@jest/transform/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/@jest/transform/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/@jest/transform/node_modules/convert-source-map": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.9.0.tgz",
+      "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/@jest/transform/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@jest/transform/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@jest/types": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/@jest/types/-/types-27.5.1.tgz",
+      "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "@types/istanbul-reports": "^3.0.0",
+        "@types/node": "*",
+        "@types/yargs": "^16.0.0",
+        "chalk": "^4.0.0"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/@jest/types/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@jest/types/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@jest/types/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/@jest/types/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/@jest/types/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@jest/types/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@jimp/bmp": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/bmp/-/bmp-0.10.3.tgz",
+      "integrity": "sha512-keMOc5woiDmONXsB/6aXLR4Z5Q+v8lFq3EY2rcj2FmstbDMhRuGbmcBxlEgOqfRjwvtf/wOtJ3Of37oAWtVfLg==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "bmp-js": "^0.1.0",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/core": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/core/-/core-0.10.3.tgz",
+      "integrity": "sha512-Gd5IpL3U2bFIO57Fh/OA3HCpWm4uW/pU01E75rI03BXfTdz3T+J7TwvyG1XaqsQ7/DSlS99GXtLQPlfFIe28UA==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "any-base": "^1.1.0",
+        "buffer": "^5.2.0",
+        "core-js": "^3.4.1",
+        "exif-parser": "^0.1.12",
+        "file-type": "^9.0.0",
+        "load-bmfont": "^1.3.1",
+        "mkdirp": "^0.5.1",
+        "phin": "^2.9.1",
+        "pixelmatch": "^4.0.2",
+        "tinycolor2": "^1.4.1"
+      }
+    },
+    "node_modules/@jimp/custom": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/custom/-/custom-0.10.3.tgz",
+      "integrity": "sha512-nZmSI+jwTi5IRyNLbKSXQovoeqsw+D0Jn0SxW08wYQvdkiWA8bTlDQFgQ7HVwCAKBm8oKkDB/ZEo9qvHJ+1gAQ==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/core": "^0.10.3",
+        "core-js": "^3.4.1"
+      }
+    },
+    "node_modules/@jimp/gif": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/gif/-/gif-0.10.3.tgz",
+      "integrity": "sha512-vjlRodSfz1CrUvvrnUuD/DsLK1GHB/yDZXHthVdZu23zYJIW7/WrIiD1IgQ5wOMV7NocfrvPn2iqUfBP81/WWA==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1",
+        "omggif": "^1.0.9"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/jpeg": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/jpeg/-/jpeg-0.10.3.tgz",
+      "integrity": "sha512-AAANwgUZOt6f6P7LZxY9lyJ9xclqutYJlsxt3JbriXUGJgrrFAIkcKcqv1nObgmQASSAQKYaMV9KdHjMlWFKlQ==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1",
+        "jpeg-js": "^0.3.4"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-blit": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-blit/-/plugin-blit-0.10.3.tgz",
+      "integrity": "sha512-5zlKlCfx4JWw9qUVC7GI4DzXyxDWyFvgZLaoGFoT00mlXlN75SarlDwc9iZ/2e2kp4bJWxz3cGgG4G/WXrbg3Q==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-blur": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-blur/-/plugin-blur-0.10.3.tgz",
+      "integrity": "sha512-cTOK3rjh1Yjh23jSfA6EHCHjsPJDEGLC8K2y9gM7dnTUK1y9NNmkFS23uHpyjgsWFIoH9oRh2SpEs3INjCpZhQ==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-circle": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-circle/-/plugin-circle-0.10.3.tgz",
+      "integrity": "sha512-51GAPIVelqAcfuUpaM5JWJ0iWl4vEjNXB7p4P7SX5udugK5bxXUjO6KA2qgWmdpHuCKtoNgkzWU9fNSuYp7tCA==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-color": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-color/-/plugin-color-0.10.3.tgz",
+      "integrity": "sha512-RgeHUElmlTH7vpI4WyQrz6u59spiKfVQbsG/XUzfWGamFSixa24ZDwX/yV/Ts+eNaz7pZeIuv533qmKPvw2ujg==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1",
+        "tinycolor2": "^1.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-contain": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-contain/-/plugin-contain-0.10.3.tgz",
+      "integrity": "sha512-bYJKW9dqzcB0Ihc6u7jSyKa3juStzbLs2LFr6fu8TzA2WkMS/R8h+ddkiO36+F9ILTWHP0CIA3HFe5OdOGcigw==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5",
+        "@jimp/plugin-blit": ">=0.3.5",
+        "@jimp/plugin-resize": ">=0.3.5",
+        "@jimp/plugin-scale": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-cover": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-cover/-/plugin-cover-0.10.3.tgz",
+      "integrity": "sha512-pOxu0cM0BRPzdV468n4dMocJXoMbTnARDY/EpC3ZW15SpMuc/dr1KhWQHgoQX5kVW1Wt8zgqREAJJCQ5KuPKDA==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5",
+        "@jimp/plugin-crop": ">=0.3.5",
+        "@jimp/plugin-resize": ">=0.3.5",
+        "@jimp/plugin-scale": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-crop": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-crop/-/plugin-crop-0.10.3.tgz",
+      "integrity": "sha512-nB7HgOjjl9PgdHr076xZ3Sr6qHYzeBYBs9qvs3tfEEUeYMNnvzgCCGtUl6eMakazZFCMk3mhKmcB9zQuHFOvkg==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-displace": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-displace/-/plugin-displace-0.10.3.tgz",
+      "integrity": "sha512-8t3fVKCH5IVqI4lewe4lFFjpxxr69SQCz5/tlpDLQZsrNScNJivHdQ09zljTrVTCSgeCqQJIKgH2Q7Sk/pAZ0w==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-dither": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-dither/-/plugin-dither-0.10.3.tgz",
+      "integrity": "sha512-JCX/oNSnEg1kGQ8ffZ66bEgQOLCY3Rn+lrd6v1jjLy/mn9YVZTMsxLtGCXpiCDC2wG/KTmi4862ysmP9do9dAQ==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-fisheye": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-fisheye/-/plugin-fisheye-0.10.3.tgz",
+      "integrity": "sha512-RRZb1wqe+xdocGcFtj2xHU7sF7xmEZmIa6BmrfSchjyA2b32TGPWKnP3qyj7p6LWEsXn+19hRYbjfyzyebPElQ==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-flip": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-flip/-/plugin-flip-0.10.3.tgz",
+      "integrity": "sha512-0epbi8XEzp0wmSjoW9IB0iMu0yNF17aZOxLdURCN3Zr+8nWPs5VNIMqSVa1Y62GSyiMDpVpKF/ITiXre+EqrPg==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5",
+        "@jimp/plugin-rotate": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-gaussian": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-gaussian/-/plugin-gaussian-0.10.3.tgz",
+      "integrity": "sha512-25eHlFbHUDnMMGpgRBBeQ2AMI4wsqCg46sue0KklI+c2BaZ+dGXmJA5uT8RTOrt64/K9Wz5E+2n7eBnny4dfpQ==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-invert": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-invert/-/plugin-invert-0.10.3.tgz",
+      "integrity": "sha512-effYSApWY/FbtlzqsKXlTLkgloKUiHBKjkQnqh5RL4oQxh/33j6aX+HFdDyQKtsXb8CMd4xd7wyiD2YYabTa0g==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-mask": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-mask/-/plugin-mask-0.10.3.tgz",
+      "integrity": "sha512-twrg8q8TIhM9Z6Jcu9/5f+OCAPaECb0eKrrbbIajJqJ3bCUlj5zbfgIhiQIzjPJ6KjpnFPSqHQfHkU1Vvk/nVw==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-normalize": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-normalize/-/plugin-normalize-0.10.3.tgz",
+      "integrity": "sha512-xkb5eZI/mMlbwKkDN79+1/t/+DBo8bBXZUMsT4gkFgMRKNRZ6NQPxlv1d3QpRzlocsl6UMxrHnhgnXdLAcgrXw==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-print": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-print/-/plugin-print-0.10.3.tgz",
+      "integrity": "sha512-wjRiI6yjXsAgMe6kVjizP+RgleUCLkH256dskjoNvJzmzbEfO7xQw9g6M02VET+emnbY0CO83IkrGm2q43VRyg==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1",
+        "load-bmfont": "^1.4.0"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5",
+        "@jimp/plugin-blit": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-resize": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-resize/-/plugin-resize-0.10.3.tgz",
+      "integrity": "sha512-rf8YmEB1d7Sg+g4LpqF0Mp+dfXfb6JFJkwlAIWPUOR7lGsPWALavEwTW91c0etEdnp0+JB9AFpy6zqq7Lwkq6w==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-rotate": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-rotate/-/plugin-rotate-0.10.3.tgz",
+      "integrity": "sha512-YXLlRjm18fkW9MOHUaVAxWjvgZM851ofOipytz5FyKp4KZWDLk+dZK1JNmVmK7MyVmAzZ5jsgSLhIgj+GgN0Eg==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5",
+        "@jimp/plugin-blit": ">=0.3.5",
+        "@jimp/plugin-crop": ">=0.3.5",
+        "@jimp/plugin-resize": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-scale": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-scale/-/plugin-scale-0.10.3.tgz",
+      "integrity": "sha512-5DXD7x7WVcX1gUgnlFXQa8F+Q3ThRYwJm+aesgrYvDOY+xzRoRSdQvhmdd4JEEue3lyX44DvBSgCIHPtGcEPaw==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5",
+        "@jimp/plugin-resize": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-shadow": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-shadow/-/plugin-shadow-0.10.3.tgz",
+      "integrity": "sha512-/nkFXpt2zVcdP4ETdkAUL0fSzyrC5ZFxdcphbYBodqD7fXNqChS/Un1eD4xCXWEpW8cnG9dixZgQgStjywH0Mg==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5",
+        "@jimp/plugin-blur": ">=0.3.5",
+        "@jimp/plugin-resize": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/plugin-threshold": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-threshold/-/plugin-threshold-0.10.3.tgz",
+      "integrity": "sha512-Dzh0Yq2wXP2SOnxcbbiyA4LJ2luwrdf1MghNIt9H+NX7B+IWw/N8qA2GuSm9n4BPGSLluuhdAWJqHcTiREriVA==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5",
+        "@jimp/plugin-color": ">=0.8.0",
+        "@jimp/plugin-resize": ">=0.8.0"
+      }
+    },
+    "node_modules/@jimp/plugins": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugins/-/plugins-0.10.3.tgz",
+      "integrity": "sha512-jTT3/7hOScf0EIKiAXmxwayHhryhc1wWuIe3FrchjDjr9wgIGNN2a7XwCgPl3fML17DXK1x8EzDneCdh261bkw==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/plugin-blit": "^0.10.3",
+        "@jimp/plugin-blur": "^0.10.3",
+        "@jimp/plugin-circle": "^0.10.3",
+        "@jimp/plugin-color": "^0.10.3",
+        "@jimp/plugin-contain": "^0.10.3",
+        "@jimp/plugin-cover": "^0.10.3",
+        "@jimp/plugin-crop": "^0.10.3",
+        "@jimp/plugin-displace": "^0.10.3",
+        "@jimp/plugin-dither": "^0.10.3",
+        "@jimp/plugin-fisheye": "^0.10.3",
+        "@jimp/plugin-flip": "^0.10.3",
+        "@jimp/plugin-gaussian": "^0.10.3",
+        "@jimp/plugin-invert": "^0.10.3",
+        "@jimp/plugin-mask": "^0.10.3",
+        "@jimp/plugin-normalize": "^0.10.3",
+        "@jimp/plugin-print": "^0.10.3",
+        "@jimp/plugin-resize": "^0.10.3",
+        "@jimp/plugin-rotate": "^0.10.3",
+        "@jimp/plugin-scale": "^0.10.3",
+        "@jimp/plugin-shadow": "^0.10.3",
+        "@jimp/plugin-threshold": "^0.10.3",
+        "core-js": "^3.4.1",
+        "timm": "^1.6.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/png": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/png/-/png-0.10.3.tgz",
+      "integrity": "sha512-YKqk/dkl+nGZxSYIDQrqhmaP8tC3IK8H7dFPnnzFVvbhDnyYunqBZZO3SaZUKTichClRw8k/CjBhbc+hifSGWg==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1",
+        "pngjs": "^3.3.3"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/tiff": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/tiff/-/tiff-0.10.3.tgz",
+      "integrity": "sha512-7EsJzZ5Y/EtinkBGuwX3Bi4S+zgbKouxjt9c82VJTRJOQgLWsE/RHqcyRCOQBhHAZ9QexYmDz34medfLKdoX0g==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "core-js": "^3.4.1",
+        "utif": "^2.0.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/types": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/types/-/types-0.10.3.tgz",
+      "integrity": "sha512-XGmBakiHZqseSWr/puGN+CHzx0IKBSpsKlmEmsNV96HKDiP6eu8NSnwdGCEq2mmIHe0JNcg1hqg59hpwtQ7Tiw==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/bmp": "^0.10.3",
+        "@jimp/gif": "^0.10.3",
+        "@jimp/jpeg": "^0.10.3",
+        "@jimp/png": "^0.10.3",
+        "@jimp/tiff": "^0.10.3",
+        "core-js": "^3.4.1",
+        "timm": "^1.6.1"
+      },
+      "peerDependencies": {
+        "@jimp/custom": ">=0.3.5"
+      }
+    },
+    "node_modules/@jimp/utils": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/utils/-/utils-0.10.3.tgz",
+      "integrity": "sha512-VcSlQhkil4ReYmg1KkN+WqHyYfZ2XfZxDsKAHSfST1GEz/RQHxKZbX+KhFKtKflnL0F4e6DlNQj3vznMNXCR2w==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "core-js": "^3.4.1",
+        "regenerator-runtime": "^0.13.3"
+      }
+    },
+    "node_modules/@jridgewell/gen-mapping": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+      "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+      "dependencies": {
+        "@jridgewell/set-array": "^1.0.1",
+        "@jridgewell/sourcemap-codec": "^1.4.10",
+        "@jridgewell/trace-mapping": "^0.3.9"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/resolve-uri": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
+      "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/set-array": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+      "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/source-map": {
+      "version": "0.3.5",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.5.tgz",
+      "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==",
+      "dependencies": {
+        "@jridgewell/gen-mapping": "^0.3.0",
+        "@jridgewell/trace-mapping": "^0.3.9"
+      }
+    },
+    "node_modules/@jridgewell/sourcemap-codec": {
+      "version": "1.4.15",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+      "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
+    },
+    "node_modules/@jridgewell/trace-mapping": {
+      "version": "0.3.22",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz",
+      "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==",
+      "dependencies": {
+        "@jridgewell/resolve-uri": "^3.1.0",
+        "@jridgewell/sourcemap-codec": "^1.4.14"
+      }
+    },
+    "node_modules/@nodelib/fs.scandir": {
+      "version": "2.1.5",
+      "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+      "dependencies": {
+        "@nodelib/fs.stat": "2.0.5",
+        "run-parallel": "^1.1.9"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.stat": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.walk": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+      "dependencies": {
+        "@nodelib/fs.scandir": "2.1.5",
+        "fastq": "^1.6.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@pkgr/core": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmmirror.com/@pkgr/core/-/core-0.1.1.tgz",
+      "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==",
+      "engines": {
+        "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+      }
+    },
+    "node_modules/@rollup/pluginutils": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz",
+      "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==",
+      "dependencies": {
+        "estree-walker": "^2.0.1",
+        "picomatch": "^2.2.2"
+      },
+      "engines": {
+        "node": ">= 8.0.0"
+      }
+    },
+    "node_modules/@sinonjs/commons": {
+      "version": "1.8.6",
+      "resolved": "https://registry.npmmirror.com/@sinonjs/commons/-/commons-1.8.6.tgz",
+      "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "type-detect": "4.0.8"
+      }
+    },
+    "node_modules/@sinonjs/fake-timers": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmmirror.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz",
+      "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@sinonjs/commons": "^1.7.0"
+      }
+    },
+    "node_modules/@tootallnate/once": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/@tootallnate/once/-/once-1.1.2.tgz",
+      "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/@types/babel__core": {
+      "version": "7.20.5",
+      "resolved": "https://registry.npmmirror.com/@types/babel__core/-/babel__core-7.20.5.tgz",
+      "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@babel/parser": "^7.20.7",
+        "@babel/types": "^7.20.7",
+        "@types/babel__generator": "*",
+        "@types/babel__template": "*",
+        "@types/babel__traverse": "*"
+      }
+    },
+    "node_modules/@types/babel__generator": {
+      "version": "7.6.8",
+      "resolved": "https://registry.npmmirror.com/@types/babel__generator/-/babel__generator-7.6.8.tgz",
+      "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "node_modules/@types/babel__template": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmmirror.com/@types/babel__template/-/babel__template-7.4.4.tgz",
+      "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@babel/parser": "^7.1.0",
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "node_modules/@types/babel__traverse": {
+      "version": "7.20.5",
+      "resolved": "https://registry.npmmirror.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz",
+      "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@babel/types": "^7.20.7"
+      }
+    },
+    "node_modules/@types/eslint": {
+      "version": "8.56.2",
+      "resolved": "https://registry.npmmirror.com/@types/eslint/-/eslint-8.56.2.tgz",
+      "integrity": "sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw==",
+      "peer": true,
+      "dependencies": {
+        "@types/estree": "*",
+        "@types/json-schema": "*"
+      }
+    },
+    "node_modules/@types/eslint-scope": {
+      "version": "3.7.7",
+      "resolved": "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
+      "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
+      "peer": true,
+      "dependencies": {
+        "@types/eslint": "*",
+        "@types/estree": "*"
+      }
+    },
+    "node_modules/@types/estree": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.5.tgz",
+      "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
+      "peer": true
+    },
+    "node_modules/@types/graceful-fs": {
+      "version": "4.1.9",
+      "resolved": "https://registry.npmmirror.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz",
+      "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@types/node": "*"
+      }
+    },
+    "node_modules/@types/istanbul-lib-coverage": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmmirror.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
+      "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/@types/istanbul-lib-report": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmmirror.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz",
+      "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@types/istanbul-lib-coverage": "*"
+      }
+    },
+    "node_modules/@types/istanbul-reports": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmmirror.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
+      "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@types/istanbul-lib-report": "*"
+      }
+    },
+    "node_modules/@types/json-schema": {
+      "version": "7.0.15",
+      "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz",
+      "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="
+    },
+    "node_modules/@types/json5": {
+      "version": "0.0.29",
+      "resolved": "https://registry.npmmirror.com/@types/json5/-/json5-0.0.29.tgz",
+      "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
+      "dev": true
+    },
+    "node_modules/@types/node": {
+      "version": "20.11.17",
+      "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.11.17.tgz",
+      "integrity": "sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw==",
+      "dependencies": {
+        "undici-types": "~5.26.4"
+      }
+    },
+    "node_modules/@types/prettier": {
+      "version": "2.7.3",
+      "resolved": "https://registry.npmmirror.com/@types/prettier/-/prettier-2.7.3.tgz",
+      "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/@types/qs": {
+      "version": "6.9.11",
+      "resolved": "https://registry.npmmirror.com/@types/qs/-/qs-6.9.11.tgz",
+      "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==",
+      "dev": true
+    },
+    "node_modules/@types/semver": {
+      "version": "7.5.6",
+      "resolved": "https://registry.npmmirror.com/@types/semver/-/semver-7.5.6.tgz",
+      "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==",
+      "dev": true
+    },
+    "node_modules/@types/stack-utils": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/@types/stack-utils/-/stack-utils-2.0.3.tgz",
+      "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/@types/yargs": {
+      "version": "16.0.9",
+      "resolved": "https://registry.npmmirror.com/@types/yargs/-/yargs-16.0.9.tgz",
+      "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@types/yargs-parser": "*"
+      }
+    },
+    "node_modules/@types/yargs-parser": {
+      "version": "21.0.3",
+      "resolved": "https://registry.npmmirror.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
+      "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/@typescript-eslint/eslint-plugin": {
+      "version": "6.21.0",
+      "resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz",
+      "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==",
+      "dev": true,
+      "dependencies": {
+        "@eslint-community/regexpp": "^4.5.1",
+        "@typescript-eslint/scope-manager": "6.21.0",
+        "@typescript-eslint/type-utils": "6.21.0",
+        "@typescript-eslint/utils": "6.21.0",
+        "@typescript-eslint/visitor-keys": "6.21.0",
+        "debug": "^4.3.4",
+        "graphemer": "^1.4.0",
+        "ignore": "^5.2.4",
+        "natural-compare": "^1.4.0",
+        "semver": "^7.5.4",
+        "ts-api-utils": "^1.0.1"
+      },
+      "engines": {
+        "node": "^16.0.0 || >=18.0.0"
+      },
+      "peerDependencies": {
+        "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha",
+        "eslint": "^7.0.0 || ^8.0.0"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dev": true,
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": {
+      "version": "7.6.0",
+      "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.0.tgz",
+      "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+      "dev": true,
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true
+    },
+    "node_modules/@typescript-eslint/parser": {
+      "version": "6.21.0",
+      "resolved": "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-6.21.0.tgz",
+      "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==",
+      "dev": true,
+      "dependencies": {
+        "@typescript-eslint/scope-manager": "6.21.0",
+        "@typescript-eslint/types": "6.21.0",
+        "@typescript-eslint/typescript-estree": "6.21.0",
+        "@typescript-eslint/visitor-keys": "6.21.0",
+        "debug": "^4.3.4"
+      },
+      "engines": {
+        "node": "^16.0.0 || >=18.0.0"
+      },
+      "peerDependencies": {
+        "eslint": "^7.0.0 || ^8.0.0"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@typescript-eslint/scope-manager": {
+      "version": "6.21.0",
+      "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz",
+      "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==",
+      "dev": true,
+      "dependencies": {
+        "@typescript-eslint/types": "6.21.0",
+        "@typescript-eslint/visitor-keys": "6.21.0"
+      },
+      "engines": {
+        "node": "^16.0.0 || >=18.0.0"
+      }
+    },
+    "node_modules/@typescript-eslint/type-utils": {
+      "version": "6.21.0",
+      "resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz",
+      "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==",
+      "dev": true,
+      "dependencies": {
+        "@typescript-eslint/typescript-estree": "6.21.0",
+        "@typescript-eslint/utils": "6.21.0",
+        "debug": "^4.3.4",
+        "ts-api-utils": "^1.0.1"
+      },
+      "engines": {
+        "node": "^16.0.0 || >=18.0.0"
+      },
+      "peerDependencies": {
+        "eslint": "^7.0.0 || ^8.0.0"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@typescript-eslint/types": {
+      "version": "6.21.0",
+      "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.21.0.tgz",
+      "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==",
+      "dev": true,
+      "engines": {
+        "node": "^16.0.0 || >=18.0.0"
+      }
+    },
+    "node_modules/@typescript-eslint/typescript-estree": {
+      "version": "6.21.0",
+      "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz",
+      "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==",
+      "dev": true,
+      "dependencies": {
+        "@typescript-eslint/types": "6.21.0",
+        "@typescript-eslint/visitor-keys": "6.21.0",
+        "debug": "^4.3.4",
+        "globby": "^11.1.0",
+        "is-glob": "^4.0.3",
+        "minimatch": "9.0.3",
+        "semver": "^7.5.4",
+        "ts-api-utils": "^1.0.1"
+      },
+      "engines": {
+        "node": "^16.0.0 || >=18.0.0"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dev": true,
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
+      "version": "7.6.0",
+      "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.0.tgz",
+      "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+      "dev": true,
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true
+    },
+    "node_modules/@typescript-eslint/utils": {
+      "version": "6.21.0",
+      "resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-6.21.0.tgz",
+      "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==",
+      "dev": true,
+      "dependencies": {
+        "@eslint-community/eslint-utils": "^4.4.0",
+        "@types/json-schema": "^7.0.12",
+        "@types/semver": "^7.5.0",
+        "@typescript-eslint/scope-manager": "6.21.0",
+        "@typescript-eslint/types": "6.21.0",
+        "@typescript-eslint/typescript-estree": "6.21.0",
+        "semver": "^7.5.4"
+      },
+      "engines": {
+        "node": "^16.0.0 || >=18.0.0"
+      },
+      "peerDependencies": {
+        "eslint": "^7.0.0 || ^8.0.0"
+      }
+    },
+    "node_modules/@typescript-eslint/utils/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dev": true,
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@typescript-eslint/utils/node_modules/semver": {
+      "version": "7.6.0",
+      "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.0.tgz",
+      "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+      "dev": true,
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@typescript-eslint/utils/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true
+    },
+    "node_modules/@typescript-eslint/visitor-keys": {
+      "version": "6.21.0",
+      "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz",
+      "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==",
+      "dev": true,
+      "dependencies": {
+        "@typescript-eslint/types": "6.21.0",
+        "eslint-visitor-keys": "^3.4.1"
+      },
+      "engines": {
+        "node": "^16.0.0 || >=18.0.0"
+      }
+    },
+    "node_modules/@ungap/structured-clone": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+      "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ=="
+    },
+    "node_modules/@vitejs/plugin-legacy": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmmirror.com/@vitejs/plugin-legacy/-/plugin-legacy-4.1.1.tgz",
+      "integrity": "sha512-um3gbVouD2Q/g19C0qpDfHwveXDCAHzs8OC3e9g6aXpKoD1H14himgs7wkMnhAynBJy7QqUoZNAXDuqN8zLR2g==",
+      "dev": true,
+      "dependencies": {
+        "@babel/core": "^7.22.9",
+        "@babel/preset-env": "^7.22.9",
+        "browserslist": "^4.21.9",
+        "core-js": "^3.31.1",
+        "magic-string": "^0.30.1",
+        "regenerator-runtime": "^0.13.11",
+        "systemjs": "^6.14.1"
+      },
+      "engines": {
+        "node": "^14.18.0 || >=16.0.0"
+      },
+      "peerDependencies": {
+        "terser": "^5.4.0",
+        "vite": "^4.0.0"
+      }
+    },
+    "node_modules/@vitejs/plugin-vue": {
+      "version": "4.6.2",
+      "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz",
+      "integrity": "sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==",
+      "engines": {
+        "node": "^14.18.0 || >=16.0.0"
+      },
+      "peerDependencies": {
+        "vite": "^4.0.0 || ^5.0.0",
+        "vue": "^3.2.25"
+      }
+    },
+    "node_modules/@vitejs/plugin-vue-jsx": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-3.1.0.tgz",
+      "integrity": "sha512-w9M6F3LSEU5kszVb9An2/MmXNxocAnUb3WhRr8bHlimhDrXNt6n6D2nJQR3UXpGlZHh/EsgouOHCsM8V3Ln+WA==",
+      "dev": true,
+      "dependencies": {
+        "@babel/core": "^7.23.3",
+        "@babel/plugin-transform-typescript": "^7.23.3",
+        "@vue/babel-plugin-jsx": "^1.1.5"
+      },
+      "engines": {
+        "node": "^14.18.0 || >=16.0.0"
+      },
+      "peerDependencies": {
+        "vite": "^4.0.0 || ^5.0.0",
+        "vue": "^3.0.0"
+      }
+    },
+    "node_modules/@volar/language-core": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@volar/language-core/-/language-core-1.11.1.tgz",
+      "integrity": "sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==",
+      "dev": true,
+      "dependencies": {
+        "@volar/source-map": "1.11.1"
+      }
+    },
+    "node_modules/@volar/source-map": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@volar/source-map/-/source-map-1.11.1.tgz",
+      "integrity": "sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==",
+      "dev": true,
+      "dependencies": {
+        "muggle-string": "^0.3.1"
+      }
+    },
+    "node_modules/@volar/typescript": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@volar/typescript/-/typescript-1.11.1.tgz",
+      "integrity": "sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==",
+      "dev": true,
+      "dependencies": {
+        "@volar/language-core": "1.11.1",
+        "path-browserify": "^1.0.1"
+      }
+    },
+    "node_modules/@vue/babel-helper-vue-transform-on": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.1.tgz",
+      "integrity": "sha512-jtEXim+pfyHWwvheYwUwSXm43KwQo8nhOBDyjrUITV6X2tB7lJm6n/+4sqR8137UVZZul5hBzWHdZ2uStYpyRQ==",
+      "dev": true
+    },
+    "node_modules/@vue/babel-plugin-jsx": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.1.tgz",
+      "integrity": "sha512-Yy9qGktktXhB39QE99So/BO2Uwm/ZG+gpL9vMg51ijRRbINvgbuhyJEi4WYmGRMx/MSTfK0xjgZ3/MyY+iLCEg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-module-imports": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-jsx": "^7.23.3",
+        "@babel/template": "^7.22.15",
+        "@babel/traverse": "^7.23.7",
+        "@babel/types": "^7.23.6",
+        "@vue/babel-helper-vue-transform-on": "1.2.1",
+        "@vue/babel-plugin-resolve-type": "1.2.1",
+        "camelcase": "^6.3.0",
+        "html-tags": "^3.3.1",
+        "svg-tags": "^1.0.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      },
+      "peerDependenciesMeta": {
+        "@babel/core": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@vue/babel-plugin-resolve-type": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.1.tgz",
+      "integrity": "sha512-IOtnI7pHunUzHS/y+EG/yPABIAp0VN8QhQ0UCS09jeMVxgAnI9qdOzO85RXdQGxq+aWCdv8/+k3W0aYO6j/8fQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/code-frame": "^7.23.5",
+        "@babel/helper-module-imports": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/parser": "^7.23.6",
+        "@vue/compiler-sfc": "^3.4.15"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/compiler-core": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.4.18.tgz",
+      "integrity": "sha512-F7YK8lMK0iv6b9/Gdk15A67wM0KKZvxDxed0RR60C1z9tIJTKta+urs4j0RTN5XqHISzI3etN3mX0uHhjmoqjQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/parser": "^7.23.9",
+        "@vue/shared": "3.4.18",
+        "entities": "^4.5.0",
+        "estree-walker": "^2.0.2",
+        "source-map-js": "^1.0.2"
+      }
+    },
+    "node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/compiler-dom": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.4.18.tgz",
+      "integrity": "sha512-24Eb8lcMfInefvQ6YlEVS18w5Q66f4+uXWVA+yb7praKbyjHRNuKVWGuinfSSjM0ZIiPi++QWukhkgznBaqpEA==",
+      "dev": true,
+      "dependencies": {
+        "@vue/compiler-core": "3.4.18",
+        "@vue/shared": "3.4.18"
+      }
+    },
+    "node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/compiler-sfc": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.4.18.tgz",
+      "integrity": "sha512-rG5tqtnzwrVpMqAQ7FHtvHaV70G6LLfJIWLYZB/jZ9m/hrnZmIQh+H3ewnC5onwe/ibljm9+ZupxeElzqCkTAw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/parser": "^7.23.9",
+        "@vue/compiler-core": "3.4.18",
+        "@vue/compiler-dom": "3.4.18",
+        "@vue/compiler-ssr": "3.4.18",
+        "@vue/shared": "3.4.18",
+        "estree-walker": "^2.0.2",
+        "magic-string": "^0.30.6",
+        "postcss": "^8.4.33",
+        "source-map-js": "^1.0.2"
+      }
+    },
+    "node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/compiler-ssr": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.4.18.tgz",
+      "integrity": "sha512-hSlv20oUhPxo2UYUacHgGaxtqP0tvFo6ixxxD6JlXIkwzwoZ9eKK6PFQN4hNK/R13JlNyldwWt/fqGBKgWJ6nQ==",
+      "dev": true,
+      "dependencies": {
+        "@vue/compiler-dom": "3.4.18",
+        "@vue/shared": "3.4.18"
+      }
+    },
+    "node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/shared": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.4.18.tgz",
+      "integrity": "sha512-CxouGFxxaW5r1WbrSmWwck3No58rApXgRSBxrqgnY1K+jk20F6DrXJkHdH9n4HVT+/B6G2CAn213Uq3npWiy8Q==",
+      "dev": true
+    },
+    "node_modules/@vue/compiler-core": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.47.tgz",
+      "integrity": "sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==",
+      "dependencies": {
+        "@babel/parser": "^7.16.4",
+        "@vue/shared": "3.2.47",
+        "estree-walker": "^2.0.2",
+        "source-map": "^0.6.1"
+      }
+    },
+    "node_modules/@vue/compiler-dom": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz",
+      "integrity": "sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==",
+      "dependencies": {
+        "@vue/compiler-core": "3.2.47",
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "node_modules/@vue/compiler-sfc": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz",
+      "integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==",
+      "dependencies": {
+        "@babel/parser": "^7.16.4",
+        "@vue/compiler-core": "3.2.47",
+        "@vue/compiler-dom": "3.2.47",
+        "@vue/compiler-ssr": "3.2.47",
+        "@vue/reactivity-transform": "3.2.47",
+        "@vue/shared": "3.2.47",
+        "estree-walker": "^2.0.2",
+        "magic-string": "^0.25.7",
+        "postcss": "^8.1.10",
+        "source-map": "^0.6.1"
+      }
+    },
+    "node_modules/@vue/compiler-sfc/node_modules/magic-string": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz",
+      "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
+      "dependencies": {
+        "sourcemap-codec": "^1.4.8"
+      }
+    },
+    "node_modules/@vue/compiler-ssr": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz",
+      "integrity": "sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==",
+      "dependencies": {
+        "@vue/compiler-dom": "3.2.47",
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "node_modules/@vue/devtools-api": {
+      "version": "6.5.1",
+      "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.5.1.tgz",
+      "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA=="
+    },
+    "node_modules/@vue/eslint-config-prettier": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmmirror.com/@vue/eslint-config-prettier/-/eslint-config-prettier-8.0.0.tgz",
+      "integrity": "sha512-55dPqtC4PM/yBjhAr+yEw6+7KzzdkBuLmnhBrDfp4I48+wy+Giqqj9yUr5T2uD/BkBROjjmqnLZmXRdOx/VtQg==",
+      "dev": true,
+      "dependencies": {
+        "eslint-config-prettier": "^8.8.0",
+        "eslint-plugin-prettier": "^5.0.0"
+      },
+      "peerDependencies": {
+        "eslint": ">= 8.0.0",
+        "prettier": ">= 3.0.0"
+      }
+    },
+    "node_modules/@vue/eslint-config-prettier/node_modules/eslint-config-prettier": {
+      "version": "8.10.0",
+      "resolved": "https://registry.npmmirror.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz",
+      "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==",
+      "dev": true,
+      "bin": {
+        "eslint-config-prettier": "bin/cli.js"
+      },
+      "peerDependencies": {
+        "eslint": ">=7.0.0"
+      }
+    },
+    "node_modules/@vue/eslint-config-typescript": {
+      "version": "12.0.0",
+      "resolved": "https://registry.npmmirror.com/@vue/eslint-config-typescript/-/eslint-config-typescript-12.0.0.tgz",
+      "integrity": "sha512-StxLFet2Qe97T8+7L8pGlhYBBr8Eg05LPuTDVopQV6il+SK6qqom59BA/rcFipUef2jD8P2X44Vd8tMFytfvlg==",
+      "dev": true,
+      "dependencies": {
+        "@typescript-eslint/eslint-plugin": "^6.7.0",
+        "@typescript-eslint/parser": "^6.7.0",
+        "vue-eslint-parser": "^9.3.1"
+      },
+      "engines": {
+        "node": "^14.17.0 || >=16.0.0"
+      },
+      "peerDependencies": {
+        "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0",
+        "eslint-plugin-vue": "^9.0.0",
+        "typescript": "*"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@vue/language-core": {
+      "version": "1.8.27",
+      "resolved": "https://registry.npmmirror.com/@vue/language-core/-/language-core-1.8.27.tgz",
+      "integrity": "sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==",
+      "dev": true,
+      "dependencies": {
+        "@volar/language-core": "~1.11.1",
+        "@volar/source-map": "~1.11.1",
+        "@vue/compiler-dom": "^3.3.0",
+        "@vue/shared": "^3.3.0",
+        "computeds": "^0.0.1",
+        "minimatch": "^9.0.3",
+        "muggle-string": "^0.3.1",
+        "path-browserify": "^1.0.1",
+        "vue-template-compiler": "^2.7.14"
+      },
+      "peerDependencies": {
+        "typescript": "*"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@vue/language-core/node_modules/@vue/compiler-core": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.4.18.tgz",
+      "integrity": "sha512-F7YK8lMK0iv6b9/Gdk15A67wM0KKZvxDxed0RR60C1z9tIJTKta+urs4j0RTN5XqHISzI3etN3mX0uHhjmoqjQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/parser": "^7.23.9",
+        "@vue/shared": "3.4.18",
+        "entities": "^4.5.0",
+        "estree-walker": "^2.0.2",
+        "source-map-js": "^1.0.2"
+      }
+    },
+    "node_modules/@vue/language-core/node_modules/@vue/compiler-dom": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.4.18.tgz",
+      "integrity": "sha512-24Eb8lcMfInefvQ6YlEVS18w5Q66f4+uXWVA+yb7praKbyjHRNuKVWGuinfSSjM0ZIiPi++QWukhkgznBaqpEA==",
+      "dev": true,
+      "dependencies": {
+        "@vue/compiler-core": "3.4.18",
+        "@vue/shared": "3.4.18"
+      }
+    },
+    "node_modules/@vue/language-core/node_modules/@vue/shared": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.4.18.tgz",
+      "integrity": "sha512-CxouGFxxaW5r1WbrSmWwck3No58rApXgRSBxrqgnY1K+jk20F6DrXJkHdH9n4HVT+/B6G2CAn213Uq3npWiy8Q==",
+      "dev": true
+    },
+    "node_modules/@vue/reactivity": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.4.18.tgz",
+      "integrity": "sha512-7uda2/I0jpLiRygprDo5Jxs2HJkOVXcOMlyVlY54yRLxoycBpwGJRwJT9EdGB4adnoqJDXVT2BilUAYwI7qvmg==",
+      "dependencies": {
+        "@vue/shared": "3.4.18"
+      }
+    },
+    "node_modules/@vue/reactivity-transform": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz",
+      "integrity": "sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==",
+      "dependencies": {
+        "@babel/parser": "^7.16.4",
+        "@vue/compiler-core": "3.2.47",
+        "@vue/shared": "3.2.47",
+        "estree-walker": "^2.0.2",
+        "magic-string": "^0.25.7"
+      }
+    },
+    "node_modules/@vue/reactivity-transform/node_modules/magic-string": {
+      "version": "0.25.9",
+      "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz",
+      "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
+      "dependencies": {
+        "sourcemap-codec": "^1.4.8"
+      }
+    },
+    "node_modules/@vue/reactivity/node_modules/@vue/shared": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.4.18.tgz",
+      "integrity": "sha512-CxouGFxxaW5r1WbrSmWwck3No58rApXgRSBxrqgnY1K+jk20F6DrXJkHdH9n4HVT+/B6G2CAn213Uq3npWiy8Q=="
+    },
+    "node_modules/@vue/runtime-core": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.4.18.tgz",
+      "integrity": "sha512-7mU9diCa+4e+8/wZ7Udw5pwTH10A11sZ1nldmHOUKJnzCwvZxfJqAtw31mIf4T5H2FsLCSBQT3xgioA9vIjyDQ==",
+      "dependencies": {
+        "@vue/reactivity": "3.4.18",
+        "@vue/shared": "3.4.18"
+      }
+    },
+    "node_modules/@vue/runtime-core/node_modules/@vue/shared": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.4.18.tgz",
+      "integrity": "sha512-CxouGFxxaW5r1WbrSmWwck3No58rApXgRSBxrqgnY1K+jk20F6DrXJkHdH9n4HVT+/B6G2CAn213Uq3npWiy8Q=="
+    },
+    "node_modules/@vue/runtime-dom": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.4.18.tgz",
+      "integrity": "sha512-2y1Mkzcw1niSfG7z3Qx+2ir9Gb4hdTkZe5p/I8x1aTIKQE0vY0tPAEUPhZm5tx6183gG3D/KwHG728UR0sIufA==",
+      "dependencies": {
+        "@vue/runtime-core": "3.4.18",
+        "@vue/shared": "3.4.18",
+        "csstype": "^3.1.3"
+      }
+    },
+    "node_modules/@vue/runtime-dom/node_modules/@vue/shared": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.4.18.tgz",
+      "integrity": "sha512-CxouGFxxaW5r1WbrSmWwck3No58rApXgRSBxrqgnY1K+jk20F6DrXJkHdH9n4HVT+/B6G2CAn213Uq3npWiy8Q=="
+    },
+    "node_modules/@vue/server-renderer": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.4.18.tgz",
+      "integrity": "sha512-YJd1wa7mzUN3NRqLEsrwEYWyO+PUBSROIGlCc3J/cvn7Zu6CxhNLgXa8Z4zZ5ja5/nviYO79J1InoPeXgwBTZA==",
+      "dependencies": {
+        "@vue/compiler-ssr": "3.4.18",
+        "@vue/shared": "3.4.18"
+      },
+      "peerDependencies": {
+        "vue": "3.4.18"
+      }
+    },
+    "node_modules/@vue/server-renderer/node_modules/@vue/compiler-core": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.4.18.tgz",
+      "integrity": "sha512-F7YK8lMK0iv6b9/Gdk15A67wM0KKZvxDxed0RR60C1z9tIJTKta+urs4j0RTN5XqHISzI3etN3mX0uHhjmoqjQ==",
+      "dependencies": {
+        "@babel/parser": "^7.23.9",
+        "@vue/shared": "3.4.18",
+        "entities": "^4.5.0",
+        "estree-walker": "^2.0.2",
+        "source-map-js": "^1.0.2"
+      }
+    },
+    "node_modules/@vue/server-renderer/node_modules/@vue/compiler-dom": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.4.18.tgz",
+      "integrity": "sha512-24Eb8lcMfInefvQ6YlEVS18w5Q66f4+uXWVA+yb7praKbyjHRNuKVWGuinfSSjM0ZIiPi++QWukhkgznBaqpEA==",
+      "dependencies": {
+        "@vue/compiler-core": "3.4.18",
+        "@vue/shared": "3.4.18"
+      }
+    },
+    "node_modules/@vue/server-renderer/node_modules/@vue/compiler-ssr": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.4.18.tgz",
+      "integrity": "sha512-hSlv20oUhPxo2UYUacHgGaxtqP0tvFo6ixxxD6JlXIkwzwoZ9eKK6PFQN4hNK/R13JlNyldwWt/fqGBKgWJ6nQ==",
+      "dependencies": {
+        "@vue/compiler-dom": "3.4.18",
+        "@vue/shared": "3.4.18"
+      }
+    },
+    "node_modules/@vue/server-renderer/node_modules/@vue/shared": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.4.18.tgz",
+      "integrity": "sha512-CxouGFxxaW5r1WbrSmWwck3No58rApXgRSBxrqgnY1K+jk20F6DrXJkHdH9n4HVT+/B6G2CAn213Uq3npWiy8Q=="
+    },
+    "node_modules/@vue/shared": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.47.tgz",
+      "integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ=="
+    },
+    "node_modules/@vue/tsconfig": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmmirror.com/@vue/tsconfig/-/tsconfig-0.1.3.tgz",
+      "integrity": "sha512-kQVsh8yyWPvHpb8gIc9l/HIDiiVUy1amynLNpCy8p+FoCiZXCo6fQos5/097MmnNZc9AtseDsCrfkhqCrJ8Olg==",
+      "dev": true,
+      "peerDependencies": {
+        "@types/node": "*"
+      },
+      "peerDependenciesMeta": {
+        "@types/node": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@webassemblyjs/ast": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.11.6.tgz",
+      "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==",
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/helper-numbers": "1.11.6",
+        "@webassemblyjs/helper-wasm-bytecode": "1.11.6"
+      }
+    },
+    "node_modules/@webassemblyjs/floating-point-hex-parser": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz",
+      "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==",
+      "peer": true
+    },
+    "node_modules/@webassemblyjs/helper-api-error": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz",
+      "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==",
+      "peer": true
+    },
+    "node_modules/@webassemblyjs/helper-buffer": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz",
+      "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==",
+      "peer": true
+    },
+    "node_modules/@webassemblyjs/helper-numbers": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz",
+      "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==",
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/floating-point-hex-parser": "1.11.6",
+        "@webassemblyjs/helper-api-error": "1.11.6",
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "node_modules/@webassemblyjs/helper-wasm-bytecode": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz",
+      "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==",
+      "peer": true
+    },
+    "node_modules/@webassemblyjs/helper-wasm-section": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz",
+      "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==",
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/ast": "1.11.6",
+        "@webassemblyjs/helper-buffer": "1.11.6",
+        "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+        "@webassemblyjs/wasm-gen": "1.11.6"
+      }
+    },
+    "node_modules/@webassemblyjs/ieee754": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz",
+      "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==",
+      "peer": true,
+      "dependencies": {
+        "@xtuc/ieee754": "^1.2.0"
+      }
+    },
+    "node_modules/@webassemblyjs/leb128": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz",
+      "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==",
+      "peer": true,
+      "dependencies": {
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "node_modules/@webassemblyjs/utf8": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz",
+      "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==",
+      "peer": true
+    },
+    "node_modules/@webassemblyjs/wasm-edit": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz",
+      "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==",
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/ast": "1.11.6",
+        "@webassemblyjs/helper-buffer": "1.11.6",
+        "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+        "@webassemblyjs/helper-wasm-section": "1.11.6",
+        "@webassemblyjs/wasm-gen": "1.11.6",
+        "@webassemblyjs/wasm-opt": "1.11.6",
+        "@webassemblyjs/wasm-parser": "1.11.6",
+        "@webassemblyjs/wast-printer": "1.11.6"
+      }
+    },
+    "node_modules/@webassemblyjs/wasm-gen": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz",
+      "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==",
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/ast": "1.11.6",
+        "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+        "@webassemblyjs/ieee754": "1.11.6",
+        "@webassemblyjs/leb128": "1.11.6",
+        "@webassemblyjs/utf8": "1.11.6"
+      }
+    },
+    "node_modules/@webassemblyjs/wasm-opt": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz",
+      "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==",
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/ast": "1.11.6",
+        "@webassemblyjs/helper-buffer": "1.11.6",
+        "@webassemblyjs/wasm-gen": "1.11.6",
+        "@webassemblyjs/wasm-parser": "1.11.6"
+      }
+    },
+    "node_modules/@webassemblyjs/wasm-parser": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz",
+      "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==",
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/ast": "1.11.6",
+        "@webassemblyjs/helper-api-error": "1.11.6",
+        "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+        "@webassemblyjs/ieee754": "1.11.6",
+        "@webassemblyjs/leb128": "1.11.6",
+        "@webassemblyjs/utf8": "1.11.6"
+      }
+    },
+    "node_modules/@webassemblyjs/wast-printer": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz",
+      "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==",
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/ast": "1.11.6",
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "node_modules/@xtuc/ieee754": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+      "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+      "peer": true
+    },
+    "node_modules/@xtuc/long": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz",
+      "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+      "peer": true
+    },
+    "node_modules/abab": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmmirror.com/abab/-/abab-2.0.6.tgz",
+      "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==",
+      "deprecated": "Use your platform's native atob() and btoa() methods instead",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/accepts": {
+      "version": "1.3.8",
+      "resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz",
+      "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+      "dev": true,
+      "dependencies": {
+        "mime-types": "~2.1.34",
+        "negotiator": "0.6.3"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/acorn": {
+      "version": "8.11.3",
+      "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.11.3.tgz",
+      "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/acorn-globals": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/acorn-globals/-/acorn-globals-6.0.0.tgz",
+      "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "acorn": "^7.1.1",
+        "acorn-walk": "^7.1.1"
+      }
+    },
+    "node_modules/acorn-globals/node_modules/acorn": {
+      "version": "7.4.1",
+      "resolved": "https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz",
+      "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+      "dev": true,
+      "peer": true,
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/acorn-import-assertions": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmmirror.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz",
+      "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==",
+      "peer": true,
+      "peerDependencies": {
+        "acorn": "^8"
+      }
+    },
+    "node_modules/acorn-jsx": {
+      "version": "5.3.2",
+      "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+      "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+      "peerDependencies": {
+        "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+      }
+    },
+    "node_modules/acorn-walk": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-7.2.0.tgz",
+      "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/address": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmmirror.com/address/-/address-1.2.2.tgz",
+      "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==",
+      "dev": true,
+      "engines": {
+        "node": ">= 10.0.0"
+      }
+    },
+    "node_modules/agent-base": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz",
+      "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 6.0.0"
+      }
+    },
+    "node_modules/ajv": {
+      "version": "6.12.6",
+      "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz",
+      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+      "dependencies": {
+        "fast-deep-equal": "^3.1.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
+      }
+    },
+    "node_modules/ajv-keywords": {
+      "version": "3.5.2",
+      "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+      "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+      "peer": true,
+      "peerDependencies": {
+        "ajv": "^6.9.1"
+      }
+    },
+    "node_modules/ansi-escapes": {
+      "version": "4.3.2",
+      "resolved": "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+      "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "type-fest": "^0.21.3"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/ansi-regex": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz",
+      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/ansi-styles": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz",
+      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+      "dependencies": {
+        "color-convert": "^1.9.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/any-base": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/any-base/-/any-base-1.1.0.tgz",
+      "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg=="
+    },
+    "node_modules/anymatch": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz",
+      "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+      "dependencies": {
+        "normalize-path": "^3.0.0",
+        "picomatch": "^2.0.4"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/argparse": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz",
+      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+    },
+    "node_modules/array-buffer-byte-length": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
+      "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.5",
+        "is-array-buffer": "^3.0.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/array-flatten": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz",
+      "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
+      "dev": true
+    },
+    "node_modules/array-includes": {
+      "version": "3.1.7",
+      "resolved": "https://registry.npmmirror.com/array-includes/-/array-includes-3.1.7.tgz",
+      "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
+        "get-intrinsic": "^1.2.1",
+        "is-string": "^1.0.7"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/array-union": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz",
+      "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/array.prototype.filter": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz",
+      "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
+        "es-array-method-boxes-properly": "^1.0.0",
+        "is-string": "^1.0.7"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/array.prototype.findlastindex": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmmirror.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz",
+      "integrity": "sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.5",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.22.3",
+        "es-errors": "^1.3.0",
+        "es-shim-unscopables": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/array.prototype.flat": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmmirror.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
+      "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
+        "es-shim-unscopables": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/array.prototype.flatmap": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmmirror.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz",
+      "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
+        "es-shim-unscopables": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/arraybuffer.prototype.slice": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
+      "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
+      "dev": true,
+      "dependencies": {
+        "array-buffer-byte-length": "^1.0.1",
+        "call-bind": "^1.0.5",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.22.3",
+        "es-errors": "^1.2.1",
+        "get-intrinsic": "^1.2.3",
+        "is-array-buffer": "^3.0.4",
+        "is-shared-array-buffer": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/asynckit": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz",
+      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/autoprefixer": {
+      "version": "10.4.17",
+      "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.17.tgz",
+      "integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==",
+      "dependencies": {
+        "browserslist": "^4.22.2",
+        "caniuse-lite": "^1.0.30001578",
+        "fraction.js": "^4.3.7",
+        "normalize-range": "^0.1.2",
+        "picocolors": "^1.0.0",
+        "postcss-value-parser": "^4.2.0"
+      },
+      "bin": {
+        "autoprefixer": "bin/autoprefixer"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >=14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
+    "node_modules/available-typed-arrays": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmmirror.com/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz",
+      "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/babel-jest": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/babel-jest/-/babel-jest-27.5.1.tgz",
+      "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jest/transform": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "@types/babel__core": "^7.1.14",
+        "babel-plugin-istanbul": "^6.1.1",
+        "babel-preset-jest": "^27.5.1",
+        "chalk": "^4.0.0",
+        "graceful-fs": "^4.2.9",
+        "slash": "^3.0.0"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.8.0"
+      }
+    },
+    "node_modules/babel-jest/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/babel-jest/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/babel-jest/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/babel-jest/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/babel-jest/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/babel-jest/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/babel-plugin-istanbul": {
+      "version": "6.1.1",
+      "resolved": "https://registry.npmmirror.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
+      "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@istanbuljs/load-nyc-config": "^1.0.0",
+        "@istanbuljs/schema": "^0.1.2",
+        "istanbul-lib-instrument": "^5.0.4",
+        "test-exclude": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/babel-plugin-jest-hoist": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz",
+      "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@babel/template": "^7.3.3",
+        "@babel/types": "^7.3.3",
+        "@types/babel__core": "^7.0.0",
+        "@types/babel__traverse": "^7.0.6"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/babel-plugin-polyfill-corejs2": {
+      "version": "0.4.8",
+      "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz",
+      "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/compat-data": "^7.22.6",
+        "@babel/helper-define-polyfill-provider": "^0.5.0",
+        "semver": "^6.3.1"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
+      }
+    },
+    "node_modules/babel-plugin-polyfill-corejs3": {
+      "version": "0.9.0",
+      "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz",
+      "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-define-polyfill-provider": "^0.5.0",
+        "core-js-compat": "^3.34.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
+      }
+    },
+    "node_modules/babel-plugin-polyfill-regenerator": {
+      "version": "0.5.5",
+      "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz",
+      "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/helper-define-polyfill-provider": "^0.5.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
+      }
+    },
+    "node_modules/babel-preset-current-node-syntax": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
+      "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@babel/plugin-syntax-async-generators": "^7.8.4",
+        "@babel/plugin-syntax-bigint": "^7.8.3",
+        "@babel/plugin-syntax-class-properties": "^7.8.3",
+        "@babel/plugin-syntax-import-meta": "^7.8.3",
+        "@babel/plugin-syntax-json-strings": "^7.8.3",
+        "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
+        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+        "@babel/plugin-syntax-numeric-separator": "^7.8.3",
+        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+        "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+        "@babel/plugin-syntax-top-level-await": "^7.8.3"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/babel-preset-jest": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz",
+      "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "babel-plugin-jest-hoist": "^27.5.1",
+        "babel-preset-current-node-syntax": "^1.0.0"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/balanced-match": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz",
+      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+    },
+    "node_modules/base64-js": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz",
+      "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
+    },
+    "node_modules/base64url": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/base64url/-/base64url-3.0.1.tgz",
+      "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==",
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/binary-extensions": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz",
+      "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/bmp-js": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmmirror.com/bmp-js/-/bmp-js-0.1.0.tgz",
+      "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw=="
+    },
+    "node_modules/body-parser": {
+      "version": "1.20.1",
+      "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.1.tgz",
+      "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
+      "dev": true,
+      "dependencies": {
+        "bytes": "3.1.2",
+        "content-type": "~1.0.4",
+        "debug": "2.6.9",
+        "depd": "2.0.0",
+        "destroy": "1.2.0",
+        "http-errors": "2.0.0",
+        "iconv-lite": "0.4.24",
+        "on-finished": "2.4.1",
+        "qs": "6.11.0",
+        "raw-body": "2.5.1",
+        "type-is": "~1.6.18",
+        "unpipe": "1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8",
+        "npm": "1.2.8000 || >= 1.4.16"
+      }
+    },
+    "node_modules/body-parser/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dev": true,
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/body-parser/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "dev": true
+    },
+    "node_modules/body-parser/node_modules/qs": {
+      "version": "6.11.0",
+      "resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz",
+      "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+      "dev": true,
+      "dependencies": {
+        "side-channel": "^1.0.4"
+      },
+      "engines": {
+        "node": ">=0.6"
+      }
+    },
+    "node_modules/boolbase": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz",
+      "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+      "dev": true
+    },
+    "node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+      "dev": true,
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
+    },
+    "node_modules/braces": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz",
+      "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+      "dependencies": {
+        "fill-range": "^7.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/browser-process-hrtime": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
+      "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/browserslist": {
+      "version": "4.22.3",
+      "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.22.3.tgz",
+      "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==",
+      "dependencies": {
+        "caniuse-lite": "^1.0.30001580",
+        "electron-to-chromium": "^1.4.648",
+        "node-releases": "^2.0.14",
+        "update-browserslist-db": "^1.0.13"
+      },
+      "bin": {
+        "browserslist": "cli.js"
+      },
+      "engines": {
+        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+      }
+    },
+    "node_modules/bser": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/bser/-/bser-2.1.1.tgz",
+      "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "node-int64": "^0.4.0"
+      }
+    },
+    "node_modules/buffer": {
+      "version": "5.7.1",
+      "resolved": "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz",
+      "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+      "dependencies": {
+        "base64-js": "^1.3.1",
+        "ieee754": "^1.1.13"
+      }
+    },
+    "node_modules/buffer-equal": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmmirror.com/buffer-equal/-/buffer-equal-0.0.1.tgz",
+      "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==",
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/buffer-from": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz",
+      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+    },
+    "node_modules/builtin-modules": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmmirror.com/builtin-modules/-/builtin-modules-3.3.0.tgz",
+      "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/builtins": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/builtins/-/builtins-5.0.1.tgz",
+      "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==",
+      "dev": true,
+      "dependencies": {
+        "semver": "^7.0.0"
+      }
+    },
+    "node_modules/builtins/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dev": true,
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/builtins/node_modules/semver": {
+      "version": "7.6.0",
+      "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.0.tgz",
+      "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+      "dev": true,
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/builtins/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true
+    },
+    "node_modules/bytes": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz",
+      "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/cac": {
+      "version": "6.7.9",
+      "resolved": "https://registry.npmmirror.com/cac/-/cac-6.7.9.tgz",
+      "integrity": "sha512-XN5qEpfNQCJ8jRaZgitSkkukjMRCGio+X3Ks5KUbGGlPbV+pSem1l9VuzooCBXOiMFshUZgyYqg6rgN8rjkb/w==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/call-bind": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.6.tgz",
+      "integrity": "sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2",
+        "get-intrinsic": "^1.2.3",
+        "set-function-length": "^1.2.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/callsites": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz",
+      "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/camelcase": {
+      "version": "6.3.0",
+      "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz",
+      "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/caniuse-lite": {
+      "version": "1.0.30001585",
+      "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001585.tgz",
+      "integrity": "sha512-yr2BWR1yLXQ8fMpdS/4ZZXpseBgE7o4g41x3a6AJOqZuOi+iE/WdJYAuZ6Y95i4Ohd2Y+9MzIWRR+uGABH4s3Q=="
+    },
+    "node_modules/chalk": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz",
+      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+      "dependencies": {
+        "ansi-styles": "^3.2.1",
+        "escape-string-regexp": "^1.0.5",
+        "supports-color": "^5.3.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/char-regex": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/char-regex/-/char-regex-1.0.2.tgz",
+      "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/chokidar": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz",
+      "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+      "dependencies": {
+        "anymatch": "~3.1.2",
+        "braces": "~3.0.2",
+        "glob-parent": "~5.1.2",
+        "is-binary-path": "~2.1.0",
+        "is-glob": "~4.0.1",
+        "normalize-path": "~3.0.0",
+        "readdirp": "~3.6.0"
+      },
+      "engines": {
+        "node": ">= 8.10.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.2"
+      }
+    },
+    "node_modules/chrome-trace-event": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
+      "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
+      "peer": true,
+      "engines": {
+        "node": ">=6.0"
+      }
+    },
+    "node_modules/ci-info": {
+      "version": "3.9.0",
+      "resolved": "https://registry.npmmirror.com/ci-info/-/ci-info-3.9.0.tgz",
+      "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/cjs-module-lexer": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmmirror.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz",
+      "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/cliui": {
+      "version": "7.0.4",
+      "resolved": "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz",
+      "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "string-width": "^4.2.0",
+        "strip-ansi": "^6.0.0",
+        "wrap-ansi": "^7.0.0"
+      }
+    },
+    "node_modules/co": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmmirror.com/co/-/co-4.6.0.tgz",
+      "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "iojs": ">= 1.0.0",
+        "node": ">= 0.12.0"
+      }
+    },
+    "node_modules/collect-v8-coverage": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz",
+      "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/color-convert": {
+      "version": "1.9.3",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz",
+      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+      "dependencies": {
+        "color-name": "1.1.3"
+      }
+    },
+    "node_modules/color-name": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz",
+      "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
+    },
+    "node_modules/combined-stream": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz",
+      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "delayed-stream": "~1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/commander": {
+      "version": "2.20.3",
+      "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz",
+      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+    },
+    "node_modules/compare-versions": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmmirror.com/compare-versions/-/compare-versions-3.6.0.tgz",
+      "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA=="
+    },
+    "node_modules/computeds": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmmirror.com/computeds/-/computeds-0.0.1.tgz",
+      "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==",
+      "dev": true
+    },
+    "node_modules/concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz",
+      "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+    },
+    "node_modules/content-disposition": {
+      "version": "0.5.4",
+      "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz",
+      "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+      "dev": true,
+      "dependencies": {
+        "safe-buffer": "5.2.1"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/content-type": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz",
+      "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/convert-source-map": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz",
+      "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="
+    },
+    "node_modules/cookie": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.5.0.tgz",
+      "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/cookie-signature": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz",
+      "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
+      "dev": true
+    },
+    "node_modules/core-js": {
+      "version": "3.35.1",
+      "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.35.1.tgz",
+      "integrity": "sha512-IgdsbxNyMskrTFxa9lWHyMwAJU5gXOPP+1yO+K59d50VLVAIDAbs7gIv705KzALModfK3ZrSZTPNpC0PQgIZuw==",
+      "hasInstallScript": true
+    },
+    "node_modules/core-js-compat": {
+      "version": "3.35.1",
+      "resolved": "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.35.1.tgz",
+      "integrity": "sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==",
+      "dev": true,
+      "dependencies": {
+        "browserslist": "^4.22.2"
+      }
+    },
+    "node_modules/cross-env": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmmirror.com/cross-env/-/cross-env-7.0.3.tgz",
+      "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==",
+      "dev": true,
+      "dependencies": {
+        "cross-spawn": "^7.0.1"
+      },
+      "bin": {
+        "cross-env": "src/bin/cross-env.js",
+        "cross-env-shell": "src/bin/cross-env-shell.js"
+      },
+      "engines": {
+        "node": ">=10.14",
+        "npm": ">=6",
+        "yarn": ">=1"
+      }
+    },
+    "node_modules/cross-spawn": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz",
+      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+      "dependencies": {
+        "path-key": "^3.1.0",
+        "shebang-command": "^2.0.0",
+        "which": "^2.0.1"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/css-font-size-keywords": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/css-font-size-keywords/-/css-font-size-keywords-1.0.0.tgz",
+      "integrity": "sha512-Q+svMDbMlelgCfH/RVDKtTDaf5021O486ZThQPIpahnIjUkMUslC+WuOQSWTgGSrNCH08Y7tYNEmmy0hkfMI8Q=="
+    },
+    "node_modules/css-font-stretch-keywords": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/css-font-stretch-keywords/-/css-font-stretch-keywords-1.0.1.tgz",
+      "integrity": "sha512-KmugPO2BNqoyp9zmBIUGwt58UQSfyk1X5DbOlkb2pckDXFSAfjsD5wenb88fNrD6fvS+vu90a/tsPpb9vb0SLg=="
+    },
+    "node_modules/css-font-style-keywords": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/css-font-style-keywords/-/css-font-style-keywords-1.0.1.tgz",
+      "integrity": "sha512-0Fn0aTpcDktnR1RzaBYorIxQily85M2KXRpzmxQPgh8pxUN9Fcn00I8u9I3grNr1QXVgCl9T5Imx0ZwKU973Vg=="
+    },
+    "node_modules/css-font-weight-keywords": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/css-font-weight-keywords/-/css-font-weight-keywords-1.0.0.tgz",
+      "integrity": "sha512-5So8/NH+oDD+EzsnF4iaG4ZFHQ3vaViePkL1ZbZ5iC/KrsCY+WHq/lvOgrtmuOQ9pBBZ1ADGpaf+A4lj1Z9eYA=="
+    },
+    "node_modules/css-list-helpers": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/css-list-helpers/-/css-list-helpers-2.0.0.tgz",
+      "integrity": "sha512-9Bj8tZ0jWbAM3u/U6m/boAzAwLPwtjzFvwivr2piSvyVa3K3rChJzQy4RIHkNkKiZCHrEMWDJWtTR8UyVhdDnQ=="
+    },
+    "node_modules/css-system-font-keywords": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/css-system-font-keywords/-/css-system-font-keywords-1.0.0.tgz",
+      "integrity": "sha512-1umTtVd/fXS25ftfjB71eASCrYhilmEsvDEI6wG/QplnmlfmVM5HkZ/ZX46DT5K3eblFPgLUHt5BRCb0YXkSFA=="
+    },
+    "node_modules/cssesc": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz",
+      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+      "bin": {
+        "cssesc": "bin/cssesc"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/cssom": {
+      "version": "0.4.4",
+      "resolved": "https://registry.npmmirror.com/cssom/-/cssom-0.4.4.tgz",
+      "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/cssstyle": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/cssstyle/-/cssstyle-2.3.0.tgz",
+      "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "cssom": "~0.3.6"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/cssstyle/node_modules/cssom": {
+      "version": "0.3.8",
+      "resolved": "https://registry.npmmirror.com/cssom/-/cssom-0.3.8.tgz",
+      "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/csstype": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
+      "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
+    },
+    "node_modules/data-urls": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/data-urls/-/data-urls-2.0.0.tgz",
+      "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "abab": "^2.0.3",
+        "whatwg-mimetype": "^2.3.0",
+        "whatwg-url": "^8.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/dayjs": {
+      "version": "1.11.10",
+      "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.10.tgz",
+      "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ=="
+    },
+    "node_modules/de-indent": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz",
+      "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==",
+      "dev": true
+    },
+    "node_modules/debug": {
+      "version": "4.3.4",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz",
+      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+      "dependencies": {
+        "ms": "2.1.2"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/decimal.js": {
+      "version": "10.4.3",
+      "resolved": "https://registry.npmmirror.com/decimal.js/-/decimal.js-10.4.3.tgz",
+      "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/dedent": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmmirror.com/dedent/-/dedent-0.7.0.tgz",
+      "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/deep-is": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz",
+      "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
+    },
+    "node_modules/deepmerge": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-4.3.1.tgz",
+      "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/default-gateway": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmmirror.com/default-gateway/-/default-gateway-6.0.3.tgz",
+      "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==",
+      "dev": true,
+      "dependencies": {
+        "execa": "^5.0.0"
+      },
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/define-data-property": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.2.tgz",
+      "integrity": "sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.2",
+        "gopd": "^1.0.1",
+        "has-property-descriptors": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/define-properties": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.1.tgz",
+      "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+      "dev": true,
+      "dependencies": {
+        "define-data-property": "^1.0.1",
+        "has-property-descriptors": "^1.0.0",
+        "object-keys": "^1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/delayed-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",
+      "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/depd": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz",
+      "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/destroy": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz",
+      "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.8",
+        "npm": "1.2.8000 || >= 1.4.16"
+      }
+    },
+    "node_modules/detect-newline": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/detect-newline/-/detect-newline-3.1.0.tgz",
+      "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/diff-sequences": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/diff-sequences/-/diff-sequences-27.5.1.tgz",
+      "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/dir-glob": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz",
+      "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+      "dev": true,
+      "dependencies": {
+        "path-type": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/doctrine": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz",
+      "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+      "dependencies": {
+        "esutils": "^2.0.2"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/dom-walk": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmmirror.com/dom-walk/-/dom-walk-0.1.2.tgz",
+      "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="
+    },
+    "node_modules/domexception": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/domexception/-/domexception-2.0.1.tgz",
+      "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==",
+      "deprecated": "Use your platform's native DOMException instead",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "webidl-conversions": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/domexception/node_modules/webidl-conversions": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
+      "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/ee-first": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz",
+      "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
+      "dev": true
+    },
+    "node_modules/electron-to-chromium": {
+      "version": "1.4.665",
+      "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.665.tgz",
+      "integrity": "sha512-UpyCWObBoD+nSZgOC2ToaIdZB0r9GhqT2WahPKiSki6ckkSuKhQNso8V2PrFcHBMleI/eqbKgVQgVC4Wni4ilw=="
+    },
+    "node_modules/emittery": {
+      "version": "0.8.1",
+      "resolved": "https://registry.npmmirror.com/emittery/-/emittery-0.8.1.tgz",
+      "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/encodeurl": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz",
+      "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/enhanced-resolve": {
+      "version": "5.15.0",
+      "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz",
+      "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==",
+      "peer": true,
+      "dependencies": {
+        "graceful-fs": "^4.2.4",
+        "tapable": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
+    "node_modules/entities": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz",
+      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+      "engines": {
+        "node": ">=0.12"
+      }
+    },
+    "node_modules/error-ex": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz",
+      "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "is-arrayish": "^0.2.1"
+      }
+    },
+    "node_modules/es-abstract": {
+      "version": "1.22.3",
+      "resolved": "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.22.3.tgz",
+      "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==",
+      "dev": true,
+      "dependencies": {
+        "array-buffer-byte-length": "^1.0.0",
+        "arraybuffer.prototype.slice": "^1.0.2",
+        "available-typed-arrays": "^1.0.5",
+        "call-bind": "^1.0.5",
+        "es-set-tostringtag": "^2.0.1",
+        "es-to-primitive": "^1.2.1",
+        "function.prototype.name": "^1.1.6",
+        "get-intrinsic": "^1.2.2",
+        "get-symbol-description": "^1.0.0",
+        "globalthis": "^1.0.3",
+        "gopd": "^1.0.1",
+        "has-property-descriptors": "^1.0.0",
+        "has-proto": "^1.0.1",
+        "has-symbols": "^1.0.3",
+        "hasown": "^2.0.0",
+        "internal-slot": "^1.0.5",
+        "is-array-buffer": "^3.0.2",
+        "is-callable": "^1.2.7",
+        "is-negative-zero": "^2.0.2",
+        "is-regex": "^1.1.4",
+        "is-shared-array-buffer": "^1.0.2",
+        "is-string": "^1.0.7",
+        "is-typed-array": "^1.1.12",
+        "is-weakref": "^1.0.2",
+        "object-inspect": "^1.13.1",
+        "object-keys": "^1.1.1",
+        "object.assign": "^4.1.4",
+        "regexp.prototype.flags": "^1.5.1",
+        "safe-array-concat": "^1.0.1",
+        "safe-regex-test": "^1.0.0",
+        "string.prototype.trim": "^1.2.8",
+        "string.prototype.trimend": "^1.0.7",
+        "string.prototype.trimstart": "^1.0.7",
+        "typed-array-buffer": "^1.0.0",
+        "typed-array-byte-length": "^1.0.0",
+        "typed-array-byte-offset": "^1.0.0",
+        "typed-array-length": "^1.0.4",
+        "unbox-primitive": "^1.0.2",
+        "which-typed-array": "^1.1.13"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-array-method-boxes-properly": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz",
+      "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==",
+      "dev": true
+    },
+    "node_modules/es-errors": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz",
+      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-module-lexer": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz",
+      "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w=="
+    },
+    "node_modules/es-set-tostringtag": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz",
+      "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==",
+      "dev": true,
+      "dependencies": {
+        "get-intrinsic": "^1.2.2",
+        "has-tostringtag": "^1.0.0",
+        "hasown": "^2.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-shim-unscopables": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
+      "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
+      "dev": true,
+      "dependencies": {
+        "hasown": "^2.0.0"
+      }
+    },
+    "node_modules/es-to-primitive": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+      "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+      "dev": true,
+      "dependencies": {
+        "is-callable": "^1.1.4",
+        "is-date-object": "^1.0.1",
+        "is-symbol": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/esbuild": {
+      "version": "0.17.19",
+      "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.17.19.tgz",
+      "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==",
+      "hasInstallScript": true,
+      "bin": {
+        "esbuild": "bin/esbuild"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "optionalDependencies": {
+        "@esbuild/android-arm": "0.17.19",
+        "@esbuild/android-arm64": "0.17.19",
+        "@esbuild/android-x64": "0.17.19",
+        "@esbuild/darwin-arm64": "0.17.19",
+        "@esbuild/darwin-x64": "0.17.19",
+        "@esbuild/freebsd-arm64": "0.17.19",
+        "@esbuild/freebsd-x64": "0.17.19",
+        "@esbuild/linux-arm": "0.17.19",
+        "@esbuild/linux-arm64": "0.17.19",
+        "@esbuild/linux-ia32": "0.17.19",
+        "@esbuild/linux-loong64": "0.17.19",
+        "@esbuild/linux-mips64el": "0.17.19",
+        "@esbuild/linux-ppc64": "0.17.19",
+        "@esbuild/linux-riscv64": "0.17.19",
+        "@esbuild/linux-s390x": "0.17.19",
+        "@esbuild/linux-x64": "0.17.19",
+        "@esbuild/netbsd-x64": "0.17.19",
+        "@esbuild/openbsd-x64": "0.17.19",
+        "@esbuild/sunos-x64": "0.17.19",
+        "@esbuild/win32-arm64": "0.17.19",
+        "@esbuild/win32-ia32": "0.17.19",
+        "@esbuild/win32-x64": "0.17.19"
+      }
+    },
+    "node_modules/escalade": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.2.tgz",
+      "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/escape-html": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz",
+      "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
+      "dev": true
+    },
+    "node_modules/escape-string-regexp": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+      "engines": {
+        "node": ">=0.8.0"
+      }
+    },
+    "node_modules/escodegen": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/escodegen/-/escodegen-2.1.0.tgz",
+      "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "esprima": "^4.0.1",
+        "estraverse": "^5.2.0",
+        "esutils": "^2.0.2"
+      },
+      "bin": {
+        "escodegen": "bin/escodegen.js",
+        "esgenerate": "bin/esgenerate.js"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "optionalDependencies": {
+        "source-map": "~0.6.1"
+      }
+    },
+    "node_modules/eslint": {
+      "version": "8.56.0",
+      "resolved": "https://registry.npmmirror.com/eslint/-/eslint-8.56.0.tgz",
+      "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==",
+      "dependencies": {
+        "@eslint-community/eslint-utils": "^4.2.0",
+        "@eslint-community/regexpp": "^4.6.1",
+        "@eslint/eslintrc": "^2.1.4",
+        "@eslint/js": "8.56.0",
+        "@humanwhocodes/config-array": "^0.11.13",
+        "@humanwhocodes/module-importer": "^1.0.1",
+        "@nodelib/fs.walk": "^1.2.8",
+        "@ungap/structured-clone": "^1.2.0",
+        "ajv": "^6.12.4",
+        "chalk": "^4.0.0",
+        "cross-spawn": "^7.0.2",
+        "debug": "^4.3.2",
+        "doctrine": "^3.0.0",
+        "escape-string-regexp": "^4.0.0",
+        "eslint-scope": "^7.2.2",
+        "eslint-visitor-keys": "^3.4.3",
+        "espree": "^9.6.1",
+        "esquery": "^1.4.2",
+        "esutils": "^2.0.2",
+        "fast-deep-equal": "^3.1.3",
+        "file-entry-cache": "^6.0.1",
+        "find-up": "^5.0.0",
+        "glob-parent": "^6.0.2",
+        "globals": "^13.19.0",
+        "graphemer": "^1.4.0",
+        "ignore": "^5.2.0",
+        "imurmurhash": "^0.1.4",
+        "is-glob": "^4.0.0",
+        "is-path-inside": "^3.0.3",
+        "js-yaml": "^4.1.0",
+        "json-stable-stringify-without-jsonify": "^1.0.1",
+        "levn": "^0.4.1",
+        "lodash.merge": "^4.6.2",
+        "minimatch": "^3.1.2",
+        "natural-compare": "^1.4.0",
+        "optionator": "^0.9.3",
+        "strip-ansi": "^6.0.1",
+        "text-table": "^0.2.0"
+      },
+      "bin": {
+        "eslint": "bin/eslint.js"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      }
+    },
+    "node_modules/eslint-compat-utils": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmmirror.com/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz",
+      "integrity": "sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "peerDependencies": {
+        "eslint": ">=6.0.0"
+      }
+    },
+    "node_modules/eslint-config-prettier": {
+      "version": "9.1.0",
+      "resolved": "https://registry.npmmirror.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz",
+      "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==",
+      "bin": {
+        "eslint-config-prettier": "bin/cli.js"
+      },
+      "peerDependencies": {
+        "eslint": ">=7.0.0"
+      }
+    },
+    "node_modules/eslint-config-standard": {
+      "version": "17.1.0",
+      "resolved": "https://registry.npmmirror.com/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz",
+      "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=12.0.0"
+      },
+      "peerDependencies": {
+        "eslint": "^8.0.1",
+        "eslint-plugin-import": "^2.25.2",
+        "eslint-plugin-n": "^15.0.0 || ^16.0.0 ",
+        "eslint-plugin-promise": "^6.0.0"
+      }
+    },
+    "node_modules/eslint-config-standard-with-typescript": {
+      "version": "39.1.1",
+      "resolved": "https://registry.npmmirror.com/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-39.1.1.tgz",
+      "integrity": "sha512-t6B5Ep8E4I18uuoYeYxINyqcXb2UbC0SOOTxRtBSt2JUs+EzeXbfe2oaiPs71AIdnoWhXDO2fYOHz8df3kV84A==",
+      "dev": true,
+      "dependencies": {
+        "@typescript-eslint/parser": "^6.4.0",
+        "eslint-config-standard": "17.1.0"
+      },
+      "peerDependencies": {
+        "@typescript-eslint/eslint-plugin": "^6.4.0",
+        "eslint": "^8.0.1",
+        "eslint-plugin-import": "^2.25.2",
+        "eslint-plugin-n": "^15.0.0 || ^16.0.0 ",
+        "eslint-plugin-promise": "^6.0.0",
+        "typescript": "*"
+      }
+    },
+    "node_modules/eslint-import-resolver-node": {
+      "version": "0.3.9",
+      "resolved": "https://registry.npmmirror.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
+      "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
+      "dev": true,
+      "dependencies": {
+        "debug": "^3.2.7",
+        "is-core-module": "^2.13.0",
+        "resolve": "^1.22.4"
+      }
+    },
+    "node_modules/eslint-import-resolver-node/node_modules/debug": {
+      "version": "3.2.7",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz",
+      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+      "dev": true,
+      "dependencies": {
+        "ms": "^2.1.1"
+      }
+    },
+    "node_modules/eslint-module-utils": {
+      "version": "2.8.0",
+      "resolved": "https://registry.npmmirror.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz",
+      "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==",
+      "dev": true,
+      "dependencies": {
+        "debug": "^3.2.7"
+      },
+      "engines": {
+        "node": ">=4"
+      },
+      "peerDependenciesMeta": {
+        "eslint": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/eslint-module-utils/node_modules/debug": {
+      "version": "3.2.7",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz",
+      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+      "dev": true,
+      "dependencies": {
+        "ms": "^2.1.1"
+      }
+    },
+    "node_modules/eslint-plugin-es-x": {
+      "version": "7.5.0",
+      "resolved": "https://registry.npmmirror.com/eslint-plugin-es-x/-/eslint-plugin-es-x-7.5.0.tgz",
+      "integrity": "sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==",
+      "dev": true,
+      "dependencies": {
+        "@eslint-community/eslint-utils": "^4.1.2",
+        "@eslint-community/regexpp": "^4.6.0",
+        "eslint-compat-utils": "^0.1.2"
+      },
+      "engines": {
+        "node": "^14.18.0 || >=16.0.0"
+      },
+      "peerDependencies": {
+        "eslint": ">=8"
+      }
+    },
+    "node_modules/eslint-plugin-import": {
+      "version": "2.29.1",
+      "resolved": "https://registry.npmmirror.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz",
+      "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==",
+      "dev": true,
+      "dependencies": {
+        "array-includes": "^3.1.7",
+        "array.prototype.findlastindex": "^1.2.3",
+        "array.prototype.flat": "^1.3.2",
+        "array.prototype.flatmap": "^1.3.2",
+        "debug": "^3.2.7",
+        "doctrine": "^2.1.0",
+        "eslint-import-resolver-node": "^0.3.9",
+        "eslint-module-utils": "^2.8.0",
+        "hasown": "^2.0.0",
+        "is-core-module": "^2.13.1",
+        "is-glob": "^4.0.3",
+        "minimatch": "^3.1.2",
+        "object.fromentries": "^2.0.7",
+        "object.groupby": "^1.0.1",
+        "object.values": "^1.1.7",
+        "semver": "^6.3.1",
+        "tsconfig-paths": "^3.15.0"
+      },
+      "engines": {
+        "node": ">=4"
+      },
+      "peerDependencies": {
+        "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
+      }
+    },
+    "node_modules/eslint-plugin-import/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/eslint-plugin-import/node_modules/debug": {
+      "version": "3.2.7",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz",
+      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+      "dev": true,
+      "dependencies": {
+        "ms": "^2.1.1"
+      }
+    },
+    "node_modules/eslint-plugin-import/node_modules/doctrine": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-2.1.0.tgz",
+      "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+      "dev": true,
+      "dependencies": {
+        "esutils": "^2.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/eslint-plugin-import/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/eslint-plugin-n": {
+      "version": "16.6.2",
+      "resolved": "https://registry.npmmirror.com/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz",
+      "integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==",
+      "dev": true,
+      "dependencies": {
+        "@eslint-community/eslint-utils": "^4.4.0",
+        "builtins": "^5.0.1",
+        "eslint-plugin-es-x": "^7.5.0",
+        "get-tsconfig": "^4.7.0",
+        "globals": "^13.24.0",
+        "ignore": "^5.2.4",
+        "is-builtin-module": "^3.2.1",
+        "is-core-module": "^2.12.1",
+        "minimatch": "^3.1.2",
+        "resolve": "^1.22.2",
+        "semver": "^7.5.3"
+      },
+      "engines": {
+        "node": ">=16.0.0"
+      },
+      "peerDependencies": {
+        "eslint": ">=7.0.0"
+      }
+    },
+    "node_modules/eslint-plugin-n/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/eslint-plugin-n/node_modules/globals": {
+      "version": "13.24.0",
+      "resolved": "https://registry.npmmirror.com/globals/-/globals-13.24.0.tgz",
+      "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+      "dev": true,
+      "dependencies": {
+        "type-fest": "^0.20.2"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/eslint-plugin-n/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dev": true,
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/eslint-plugin-n/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/eslint-plugin-n/node_modules/semver": {
+      "version": "7.6.0",
+      "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.0.tgz",
+      "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+      "dev": true,
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/eslint-plugin-n/node_modules/type-fest": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz",
+      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/eslint-plugin-n/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true
+    },
+    "node_modules/eslint-plugin-prettier": {
+      "version": "5.1.3",
+      "resolved": "https://registry.npmmirror.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz",
+      "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==",
+      "dependencies": {
+        "prettier-linter-helpers": "^1.0.0",
+        "synckit": "^0.8.6"
+      },
+      "engines": {
+        "node": "^14.18.0 || >=16.0.0"
+      },
+      "peerDependencies": {
+        "@types/eslint": ">=8.0.0",
+        "eslint": ">=8.0.0",
+        "eslint-config-prettier": "*",
+        "prettier": ">=3.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/eslint": {
+          "optional": true
+        },
+        "eslint-config-prettier": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/eslint-plugin-promise": {
+      "version": "6.1.1",
+      "resolved": "https://registry.npmmirror.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz",
+      "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==",
+      "dev": true,
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "peerDependencies": {
+        "eslint": "^7.0.0 || ^8.0.0"
+      }
+    },
+    "node_modules/eslint-plugin-vue": {
+      "version": "9.21.1",
+      "resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-9.21.1.tgz",
+      "integrity": "sha512-XVtI7z39yOVBFJyi8Ljbn7kY9yHzznKXL02qQYn+ta63Iy4A9JFBw6o4OSB9hyD2++tVT+su9kQqetUyCCwhjw==",
+      "dev": true,
+      "dependencies": {
+        "@eslint-community/eslint-utils": "^4.4.0",
+        "natural-compare": "^1.4.0",
+        "nth-check": "^2.1.1",
+        "postcss-selector-parser": "^6.0.13",
+        "semver": "^7.5.4",
+        "vue-eslint-parser": "^9.4.2",
+        "xml-name-validator": "^4.0.0"
+      },
+      "engines": {
+        "node": "^14.17.0 || >=16.0.0"
+      },
+      "peerDependencies": {
+        "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0"
+      }
+    },
+    "node_modules/eslint-plugin-vue/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dev": true,
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/eslint-plugin-vue/node_modules/semver": {
+      "version": "7.6.0",
+      "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.0.tgz",
+      "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+      "dev": true,
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/eslint-plugin-vue/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true
+    },
+    "node_modules/eslint-scope": {
+      "version": "7.2.2",
+      "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.2.2.tgz",
+      "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+      "dependencies": {
+        "esrecurse": "^4.3.0",
+        "estraverse": "^5.2.0"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      }
+    },
+    "node_modules/eslint-visitor-keys": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      }
+    },
+    "node_modules/eslint/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/eslint/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/eslint/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/eslint/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/eslint/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+    },
+    "node_modules/eslint/node_modules/escape-string-regexp": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/eslint/node_modules/glob-parent": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz",
+      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+      "dependencies": {
+        "is-glob": "^4.0.3"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
+    "node_modules/eslint/node_modules/globals": {
+      "version": "13.24.0",
+      "resolved": "https://registry.npmmirror.com/globals/-/globals-13.24.0.tgz",
+      "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+      "dependencies": {
+        "type-fest": "^0.20.2"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/eslint/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/eslint/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/eslint/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/eslint/node_modules/type-fest": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz",
+      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/espree": {
+      "version": "9.6.1",
+      "resolved": "https://registry.npmmirror.com/espree/-/espree-9.6.1.tgz",
+      "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+      "dependencies": {
+        "acorn": "^8.9.0",
+        "acorn-jsx": "^5.3.2",
+        "eslint-visitor-keys": "^3.4.1"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      }
+    },
+    "node_modules/esprima": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz",
+      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+      "dev": true,
+      "peer": true,
+      "bin": {
+        "esparse": "bin/esparse.js",
+        "esvalidate": "bin/esvalidate.js"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/esquery": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmmirror.com/esquery/-/esquery-1.5.0.tgz",
+      "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+      "dependencies": {
+        "estraverse": "^5.1.0"
+      },
+      "engines": {
+        "node": ">=0.10"
+      }
+    },
+    "node_modules/esrecurse": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz",
+      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+      "dependencies": {
+        "estraverse": "^5.2.0"
+      },
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
+    "node_modules/estraverse": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz",
+      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
+    "node_modules/estree-walker": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
+      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
+    },
+    "node_modules/esutils": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz",
+      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/etag": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz",
+      "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/events": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz",
+      "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+      "peer": true,
+      "engines": {
+        "node": ">=0.8.x"
+      }
+    },
+    "node_modules/execa": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz",
+      "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+      "dev": true,
+      "dependencies": {
+        "cross-spawn": "^7.0.3",
+        "get-stream": "^6.0.0",
+        "human-signals": "^2.1.0",
+        "is-stream": "^2.0.0",
+        "merge-stream": "^2.0.0",
+        "npm-run-path": "^4.0.1",
+        "onetime": "^5.1.2",
+        "signal-exit": "^3.0.3",
+        "strip-final-newline": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/exif-parser": {
+      "version": "0.1.12",
+      "resolved": "https://registry.npmmirror.com/exif-parser/-/exif-parser-0.1.12.tgz",
+      "integrity": "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw=="
+    },
+    "node_modules/exit": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmmirror.com/exit/-/exit-0.1.2.tgz",
+      "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/expect": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/expect/-/expect-27.5.1.tgz",
+      "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jest/types": "^27.5.1",
+        "jest-get-type": "^27.5.1",
+        "jest-matcher-utils": "^27.5.1",
+        "jest-message-util": "^27.5.1"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/express": {
+      "version": "4.18.2",
+      "resolved": "https://registry.npmmirror.com/express/-/express-4.18.2.tgz",
+      "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
+      "dev": true,
+      "dependencies": {
+        "accepts": "~1.3.8",
+        "array-flatten": "1.1.1",
+        "body-parser": "1.20.1",
+        "content-disposition": "0.5.4",
+        "content-type": "~1.0.4",
+        "cookie": "0.5.0",
+        "cookie-signature": "1.0.6",
+        "debug": "2.6.9",
+        "depd": "2.0.0",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "finalhandler": "1.2.0",
+        "fresh": "0.5.2",
+        "http-errors": "2.0.0",
+        "merge-descriptors": "1.0.1",
+        "methods": "~1.1.2",
+        "on-finished": "2.4.1",
+        "parseurl": "~1.3.3",
+        "path-to-regexp": "0.1.7",
+        "proxy-addr": "~2.0.7",
+        "qs": "6.11.0",
+        "range-parser": "~1.2.1",
+        "safe-buffer": "5.2.1",
+        "send": "0.18.0",
+        "serve-static": "1.15.0",
+        "setprototypeof": "1.2.0",
+        "statuses": "2.0.1",
+        "type-is": "~1.6.18",
+        "utils-merge": "1.0.1",
+        "vary": "~1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.10.0"
+      }
+    },
+    "node_modules/express/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dev": true,
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/express/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "dev": true
+    },
+    "node_modules/express/node_modules/qs": {
+      "version": "6.11.0",
+      "resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz",
+      "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+      "dev": true,
+      "dependencies": {
+        "side-channel": "^1.0.4"
+      },
+      "engines": {
+        "node": ">=0.6"
+      }
+    },
+    "node_modules/fast-deep-equal": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+    },
+    "node_modules/fast-diff": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/fast-diff/-/fast-diff-1.3.0.tgz",
+      "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw=="
+    },
+    "node_modules/fast-glob": {
+      "version": "3.3.2",
+      "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz",
+      "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+      "dependencies": {
+        "@nodelib/fs.stat": "^2.0.2",
+        "@nodelib/fs.walk": "^1.2.3",
+        "glob-parent": "^5.1.2",
+        "merge2": "^1.3.0",
+        "micromatch": "^4.0.4"
+      },
+      "engines": {
+        "node": ">=8.6.0"
+      }
+    },
+    "node_modules/fast-json-stable-stringify": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+    },
+    "node_modules/fast-levenshtein": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+      "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="
+    },
+    "node_modules/fastq": {
+      "version": "1.17.1",
+      "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.17.1.tgz",
+      "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+      "dependencies": {
+        "reusify": "^1.0.4"
+      }
+    },
+    "node_modules/fb-watchman": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/fb-watchman/-/fb-watchman-2.0.2.tgz",
+      "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "bser": "2.1.1"
+      }
+    },
+    "node_modules/file-entry-cache": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+      "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+      "dependencies": {
+        "flat-cache": "^3.0.4"
+      },
+      "engines": {
+        "node": "^10.12.0 || >=12.0.0"
+      }
+    },
+    "node_modules/file-type": {
+      "version": "9.0.0",
+      "resolved": "https://registry.npmmirror.com/file-type/-/file-type-9.0.0.tgz",
+      "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/fill-range": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz",
+      "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+      "dependencies": {
+        "to-regex-range": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/finalhandler": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.2.0.tgz",
+      "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
+      "dev": true,
+      "dependencies": {
+        "debug": "2.6.9",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "on-finished": "2.4.1",
+        "parseurl": "~1.3.3",
+        "statuses": "2.0.1",
+        "unpipe": "~1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/finalhandler/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dev": true,
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/finalhandler/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "dev": true
+    },
+    "node_modules/find-up": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz",
+      "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+      "dependencies": {
+        "locate-path": "^6.0.0",
+        "path-exists": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/flat-cache": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmmirror.com/flat-cache/-/flat-cache-3.2.0.tgz",
+      "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
+      "dependencies": {
+        "flatted": "^3.2.9",
+        "keyv": "^4.5.3",
+        "rimraf": "^3.0.2"
+      },
+      "engines": {
+        "node": "^10.12.0 || >=12.0.0"
+      }
+    },
+    "node_modules/flatted": {
+      "version": "3.2.9",
+      "resolved": "https://registry.npmmirror.com/flatted/-/flatted-3.2.9.tgz",
+      "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ=="
+    },
+    "node_modules/for-each": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmmirror.com/for-each/-/for-each-0.3.3.tgz",
+      "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+      "dev": true,
+      "dependencies": {
+        "is-callable": "^1.1.3"
+      }
+    },
+    "node_modules/form-data": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/form-data/-/form-data-3.0.1.tgz",
+      "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.8",
+        "mime-types": "^2.1.12"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/forwarded": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz",
+      "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/fraction.js": {
+      "version": "4.3.7",
+      "resolved": "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.3.7.tgz",
+      "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/fresh": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz",
+      "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/fs-extra": {
+      "version": "10.1.0",
+      "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz",
+      "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
+      "dependencies": {
+        "graceful-fs": "^4.2.0",
+        "jsonfile": "^6.0.1",
+        "universalify": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz",
+      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+    },
+    "node_modules/function-bind": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz",
+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
+    },
+    "node_modules/function.prototype.name": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmmirror.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
+      "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
+        "functions-have-names": "^1.2.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/functions-have-names": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz",
+      "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+      "dev": true
+    },
+    "node_modules/generic-names": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/generic-names/-/generic-names-4.0.0.tgz",
+      "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==",
+      "dependencies": {
+        "loader-utils": "^3.2.0"
+      }
+    },
+    "node_modules/gensync": {
+      "version": "1.0.0-beta.2",
+      "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz",
+      "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/get-caller-file": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz",
+      "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": "6.* || 8.* || >= 10.*"
+      }
+    },
+    "node_modules/get-intrinsic": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+      "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2",
+        "has-proto": "^1.0.1",
+        "has-symbols": "^1.0.3",
+        "hasown": "^2.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/get-package-type": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmmirror.com/get-package-type/-/get-package-type-0.1.0.tgz",
+      "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8.0.0"
+      }
+    },
+    "node_modules/get-stream": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz",
+      "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/get-symbol-description": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
+      "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.5",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/get-tsconfig": {
+      "version": "4.7.2",
+      "resolved": "https://registry.npmmirror.com/get-tsconfig/-/get-tsconfig-4.7.2.tgz",
+      "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==",
+      "dev": true,
+      "dependencies": {
+        "resolve-pkg-maps": "^1.0.0"
+      }
+    },
+    "node_modules/glob": {
+      "version": "7.2.3",
+      "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz",
+      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/glob-parent": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/glob-to-regexp": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+      "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+      "peer": true
+    },
+    "node_modules/glob/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/glob/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/global": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmmirror.com/global/-/global-4.4.0.tgz",
+      "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
+      "dependencies": {
+        "min-document": "^2.19.0",
+        "process": "^0.11.10"
+      }
+    },
+    "node_modules/globals": {
+      "version": "11.12.0",
+      "resolved": "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz",
+      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/globalthis": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/globalthis/-/globalthis-1.0.3.tgz",
+      "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
+      "dev": true,
+      "dependencies": {
+        "define-properties": "^1.1.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/globby": {
+      "version": "11.1.0",
+      "resolved": "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz",
+      "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+      "dev": true,
+      "dependencies": {
+        "array-union": "^2.1.0",
+        "dir-glob": "^3.0.1",
+        "fast-glob": "^3.2.9",
+        "ignore": "^5.2.0",
+        "merge2": "^1.4.1",
+        "slash": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/gopd": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.0.1.tgz",
+      "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+      "dependencies": {
+        "get-intrinsic": "^1.1.3"
+      }
+    },
+    "node_modules/graceful-fs": {
+      "version": "4.2.11",
+      "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz",
+      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
+    },
+    "node_modules/graphemer": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmmirror.com/graphemer/-/graphemer-1.4.0.tgz",
+      "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="
+    },
+    "node_modules/has-bigints": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.2.tgz",
+      "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
+      "dev": true
+    },
+    "node_modules/has-flag": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz",
+      "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/has-property-descriptors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
+      "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
+      "dependencies": {
+        "get-intrinsic": "^1.2.2"
+      }
+    },
+    "node_modules/has-proto": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/has-proto/-/has-proto-1.0.1.tgz",
+      "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/has-symbols": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz",
+      "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/has-tostringtag": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+      "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+      "dev": true,
+      "dependencies": {
+        "has-symbols": "^1.0.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/hash-sum": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz",
+      "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg=="
+    },
+    "node_modules/hasown": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.0.tgz",
+      "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
+      "dependencies": {
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/he": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz",
+      "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+      "dev": true,
+      "bin": {
+        "he": "bin/he"
+      }
+    },
+    "node_modules/heic2any": {
+      "version": "0.0.4",
+      "resolved": "https://registry.npmmirror.com/heic2any/-/heic2any-0.0.4.tgz",
+      "integrity": "sha512-3lLnZiDELfabVH87htnRolZ2iehX9zwpRyGNz22GKXIu0fznlblf0/ftppXKNqS26dqFSeqfIBhAmAj/uSp0cA=="
+    },
+    "node_modules/html-encoding-sniffer": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
+      "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "whatwg-encoding": "^1.0.5"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/html-escaper": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/html-escaper/-/html-escaper-2.0.2.tgz",
+      "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/html-tags": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmmirror.com/html-tags/-/html-tags-3.3.1.tgz",
+      "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/http-errors": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz",
+      "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+      "dev": true,
+      "dependencies": {
+        "depd": "2.0.0",
+        "inherits": "2.0.4",
+        "setprototypeof": "1.2.0",
+        "statuses": "2.0.1",
+        "toidentifier": "1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/http-proxy-agent": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
+      "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@tootallnate/once": "1",
+        "agent-base": "6",
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/https-proxy-agent": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+      "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "agent-base": "6",
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/human-signals": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz",
+      "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+      "dev": true,
+      "engines": {
+        "node": ">=10.17.0"
+      }
+    },
+    "node_modules/iconv-lite": {
+      "version": "0.4.24",
+      "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz",
+      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+      "dev": true,
+      "dependencies": {
+        "safer-buffer": ">= 2.1.2 < 3"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/icss-replace-symbols": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
+      "integrity": "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg=="
+    },
+    "node_modules/icss-utils": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmmirror.com/icss-utils/-/icss-utils-5.1.0.tgz",
+      "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
+      "engines": {
+        "node": "^10 || ^12 || >= 14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
+    "node_modules/ieee754": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz",
+      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
+    },
+    "node_modules/ignore": {
+      "version": "5.3.1",
+      "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.3.1.tgz",
+      "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
+      "engines": {
+        "node": ">= 4"
+      }
+    },
+    "node_modules/immutable": {
+      "version": "4.3.5",
+      "resolved": "https://registry.npmmirror.com/immutable/-/immutable-4.3.5.tgz",
+      "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw=="
+    },
+    "node_modules/import-fresh": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz",
+      "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+      "dependencies": {
+        "parent-module": "^1.0.0",
+        "resolve-from": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/import-local": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/import-local/-/import-local-3.1.0.tgz",
+      "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "pkg-dir": "^4.2.0",
+        "resolve-cwd": "^3.0.0"
+      },
+      "bin": {
+        "import-local-fixture": "fixtures/cli.js"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/imurmurhash": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz",
+      "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+      "engines": {
+        "node": ">=0.8.19"
+      }
+    },
+    "node_modules/inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz",
+      "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+      "dependencies": {
+        "once": "^1.3.0",
+        "wrappy": "1"
+      }
+    },
+    "node_modules/inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+    },
+    "node_modules/internal-slot": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.7.tgz",
+      "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==",
+      "dev": true,
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "hasown": "^2.0.0",
+        "side-channel": "^1.0.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/invert-kv": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/invert-kv/-/invert-kv-3.0.1.tgz",
+      "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/ipaddr.js": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+      "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
+    "node_modules/is-array-buffer": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmmirror.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
+      "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "get-intrinsic": "^1.2.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/is-arrayish": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz",
+      "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/is-bigint": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/is-bigint/-/is-bigint-1.0.4.tgz",
+      "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+      "dev": true,
+      "dependencies": {
+        "has-bigints": "^1.0.1"
+      }
+    },
+    "node_modules/is-binary-path": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz",
+      "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+      "dependencies": {
+        "binary-extensions": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-boolean-object": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+      "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/is-builtin-module": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmmirror.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
+      "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
+      "dev": true,
+      "dependencies": {
+        "builtin-modules": "^3.3.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/is-callable": {
+      "version": "1.2.7",
+      "resolved": "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.7.tgz",
+      "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/is-core-module": {
+      "version": "2.13.1",
+      "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.13.1.tgz",
+      "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
+      "dependencies": {
+        "hasown": "^2.0.0"
+      }
+    },
+    "node_modules/is-date-object": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz",
+      "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+      "dev": true,
+      "dependencies": {
+        "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz",
+      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-fullwidth-code-point": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-function": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/is-function/-/is-function-1.0.2.tgz",
+      "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ=="
+    },
+    "node_modules/is-generator-fn": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
+      "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/is-glob": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz",
+      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+      "dependencies": {
+        "is-extglob": "^2.1.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-negative-zero": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
+      "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/is-number": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz",
+      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+      "engines": {
+        "node": ">=0.12.0"
+      }
+    },
+    "node_modules/is-number-object": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmmirror.com/is-number-object/-/is-number-object-1.0.7.tgz",
+      "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+      "dev": true,
+      "dependencies": {
+        "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/is-path-inside": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-3.0.3.tgz",
+      "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-potential-custom-element-name": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
+      "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/is-regex": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/is-regex/-/is-regex-1.1.4.tgz",
+      "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/is-shared-array-buffer": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+      "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2"
+      }
+    },
+    "node_modules/is-stream": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz",
+      "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-string": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmmirror.com/is-string/-/is-string-1.0.7.tgz",
+      "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+      "dev": true,
+      "dependencies": {
+        "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/is-symbol": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/is-symbol/-/is-symbol-1.0.4.tgz",
+      "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+      "dev": true,
+      "dependencies": {
+        "has-symbols": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/is-typed-array": {
+      "version": "1.1.13",
+      "resolved": "https://registry.npmmirror.com/is-typed-array/-/is-typed-array-1.1.13.tgz",
+      "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
+      "dev": true,
+      "dependencies": {
+        "which-typed-array": "^1.1.14"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/is-typedarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/is-typedarray/-/is-typedarray-1.0.0.tgz",
+      "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/is-weakref": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz",
+      "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2"
+      }
+    },
+    "node_modules/isarray": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmmirror.com/isarray/-/isarray-2.0.5.tgz",
+      "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+      "dev": true
+    },
+    "node_modules/isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+    },
+    "node_modules/istanbul-lib-coverage": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmmirror.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
+      "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/istanbul-lib-instrument": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmmirror.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
+      "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@babel/core": "^7.12.3",
+        "@babel/parser": "^7.14.7",
+        "@istanbuljs/schema": "^0.1.2",
+        "istanbul-lib-coverage": "^3.2.0",
+        "semver": "^6.3.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/istanbul-lib-report": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
+      "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "istanbul-lib-coverage": "^3.0.0",
+        "make-dir": "^4.0.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/istanbul-lib-report/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/istanbul-lib-report/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/istanbul-lib-source-maps": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmmirror.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
+      "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "debug": "^4.1.1",
+        "istanbul-lib-coverage": "^3.0.0",
+        "source-map": "^0.6.1"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/istanbul-reports": {
+      "version": "3.1.6",
+      "resolved": "https://registry.npmmirror.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz",
+      "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "html-escaper": "^2.0.0",
+        "istanbul-lib-report": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest": {
+      "version": "27.0.4",
+      "resolved": "https://registry.npmmirror.com/jest/-/jest-27.0.4.tgz",
+      "integrity": "sha512-Px1iKFooXgGSkk1H8dJxxBIrM3tsc5SIuI4kfKYK2J+4rvCvPGr/cXktxh0e9zIPQ5g09kOMNfHQEmusBUf/ZA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jest/core": "^27.0.4",
+        "import-local": "^3.0.2",
+        "jest-cli": "^27.0.4"
+      },
+      "bin": {
+        "jest": "bin/jest.js"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      },
+      "peerDependencies": {
+        "node-notifier": "^8.0.1 || ^9.0.0"
+      },
+      "peerDependenciesMeta": {
+        "node-notifier": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/jest-changed-files": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz",
+      "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jest/types": "^27.5.1",
+        "execa": "^5.0.0",
+        "throat": "^6.0.1"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/jest-circus": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-circus/-/jest-circus-27.5.1.tgz",
+      "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jest/environment": "^27.5.1",
+        "@jest/test-result": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "co": "^4.6.0",
+        "dedent": "^0.7.0",
+        "expect": "^27.5.1",
+        "is-generator-fn": "^2.0.0",
+        "jest-each": "^27.5.1",
+        "jest-matcher-utils": "^27.5.1",
+        "jest-message-util": "^27.5.1",
+        "jest-runtime": "^27.5.1",
+        "jest-snapshot": "^27.5.1",
+        "jest-util": "^27.5.1",
+        "pretty-format": "^27.5.1",
+        "slash": "^3.0.0",
+        "stack-utils": "^2.0.3",
+        "throat": "^6.0.1"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-circus/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/jest-circus/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/jest-circus/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-circus/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-cli": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-cli/-/jest-cli-27.5.1.tgz",
+      "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jest/core": "^27.5.1",
+        "@jest/test-result": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "chalk": "^4.0.0",
+        "exit": "^0.1.2",
+        "graceful-fs": "^4.2.9",
+        "import-local": "^3.0.2",
+        "jest-config": "^27.5.1",
+        "jest-util": "^27.5.1",
+        "jest-validate": "^27.5.1",
+        "prompts": "^2.0.1",
+        "yargs": "^16.2.0"
+      },
+      "bin": {
+        "jest": "bin/jest.js"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      },
+      "peerDependencies": {
+        "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+      },
+      "peerDependenciesMeta": {
+        "node-notifier": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/jest-cli/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-cli/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/jest-cli/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/jest-cli/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/jest-cli/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-cli/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-config": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-config/-/jest-config-27.5.1.tgz",
+      "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@babel/core": "^7.8.0",
+        "@jest/test-sequencer": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "babel-jest": "^27.5.1",
+        "chalk": "^4.0.0",
+        "ci-info": "^3.2.0",
+        "deepmerge": "^4.2.2",
+        "glob": "^7.1.1",
+        "graceful-fs": "^4.2.9",
+        "jest-circus": "^27.5.1",
+        "jest-environment-jsdom": "^27.5.1",
+        "jest-environment-node": "^27.5.1",
+        "jest-get-type": "^27.5.1",
+        "jest-jasmine2": "^27.5.1",
+        "jest-regex-util": "^27.5.1",
+        "jest-resolve": "^27.5.1",
+        "jest-runner": "^27.5.1",
+        "jest-util": "^27.5.1",
+        "jest-validate": "^27.5.1",
+        "micromatch": "^4.0.4",
+        "parse-json": "^5.2.0",
+        "pretty-format": "^27.5.1",
+        "slash": "^3.0.0",
+        "strip-json-comments": "^3.1.1"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      },
+      "peerDependencies": {
+        "ts-node": ">=9.0.0"
+      },
+      "peerDependenciesMeta": {
+        "ts-node": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/jest-config/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-config/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/jest-config/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/jest-config/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/jest-config/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-config/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-diff": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-diff/-/jest-diff-27.5.1.tgz",
+      "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "chalk": "^4.0.0",
+        "diff-sequences": "^27.5.1",
+        "jest-get-type": "^27.5.1",
+        "pretty-format": "^27.5.1"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/jest-diff/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-diff/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/jest-diff/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/jest-diff/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/jest-diff/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-diff/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-docblock": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-docblock/-/jest-docblock-27.5.1.tgz",
+      "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "detect-newline": "^3.0.0"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/jest-each": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-each/-/jest-each-27.5.1.tgz",
+      "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jest/types": "^27.5.1",
+        "chalk": "^4.0.0",
+        "jest-get-type": "^27.5.1",
+        "jest-util": "^27.5.1",
+        "pretty-format": "^27.5.1"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/jest-each/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-each/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/jest-each/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/jest-each/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/jest-each/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-each/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-environment-jsdom": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz",
+      "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jest/environment": "^27.5.1",
+        "@jest/fake-timers": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "@types/node": "*",
+        "jest-mock": "^27.5.1",
+        "jest-util": "^27.5.1",
+        "jsdom": "^16.6.0"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/jest-environment-node": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz",
+      "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jest/environment": "^27.5.1",
+        "@jest/fake-timers": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "@types/node": "*",
+        "jest-mock": "^27.5.1",
+        "jest-util": "^27.5.1"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/jest-get-type": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-get-type/-/jest-get-type-27.5.1.tgz",
+      "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/jest-haste-map": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz",
+      "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jest/types": "^27.5.1",
+        "@types/graceful-fs": "^4.1.2",
+        "@types/node": "*",
+        "anymatch": "^3.0.3",
+        "fb-watchman": "^2.0.0",
+        "graceful-fs": "^4.2.9",
+        "jest-regex-util": "^27.5.1",
+        "jest-serializer": "^27.5.1",
+        "jest-util": "^27.5.1",
+        "jest-worker": "^27.5.1",
+        "micromatch": "^4.0.4",
+        "walker": "^1.0.7"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "^2.3.2"
+      }
+    },
+    "node_modules/jest-jasmine2": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz",
+      "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jest/environment": "^27.5.1",
+        "@jest/source-map": "^27.5.1",
+        "@jest/test-result": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "co": "^4.6.0",
+        "expect": "^27.5.1",
+        "is-generator-fn": "^2.0.0",
+        "jest-each": "^27.5.1",
+        "jest-matcher-utils": "^27.5.1",
+        "jest-message-util": "^27.5.1",
+        "jest-runtime": "^27.5.1",
+        "jest-snapshot": "^27.5.1",
+        "jest-util": "^27.5.1",
+        "pretty-format": "^27.5.1",
+        "throat": "^6.0.1"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/jest-jasmine2/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-jasmine2/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/jest-jasmine2/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/jest-jasmine2/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/jest-jasmine2/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-jasmine2/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-leak-detector": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz",
+      "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "jest-get-type": "^27.5.1",
+        "pretty-format": "^27.5.1"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/jest-matcher-utils": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz",
+      "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "chalk": "^4.0.0",
+        "jest-diff": "^27.5.1",
+        "jest-get-type": "^27.5.1",
+        "pretty-format": "^27.5.1"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/jest-matcher-utils/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-matcher-utils/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/jest-matcher-utils/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/jest-matcher-utils/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/jest-matcher-utils/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-matcher-utils/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-message-util": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-message-util/-/jest-message-util-27.5.1.tgz",
+      "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@babel/code-frame": "^7.12.13",
+        "@jest/types": "^27.5.1",
+        "@types/stack-utils": "^2.0.0",
+        "chalk": "^4.0.0",
+        "graceful-fs": "^4.2.9",
+        "micromatch": "^4.0.4",
+        "pretty-format": "^27.5.1",
+        "slash": "^3.0.0",
+        "stack-utils": "^2.0.3"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/jest-message-util/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-message-util/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/jest-message-util/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/jest-message-util/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/jest-message-util/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-message-util/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-mock": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-mock/-/jest-mock-27.5.1.tgz",
+      "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jest/types": "^27.5.1",
+        "@types/node": "*"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/jest-pnp-resolver": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmmirror.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
+      "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=6"
+      },
+      "peerDependencies": {
+        "jest-resolve": "*"
+      },
+      "peerDependenciesMeta": {
+        "jest-resolve": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/jest-regex-util": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz",
+      "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/jest-resolve": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-resolve/-/jest-resolve-27.5.1.tgz",
+      "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jest/types": "^27.5.1",
+        "chalk": "^4.0.0",
+        "graceful-fs": "^4.2.9",
+        "jest-haste-map": "^27.5.1",
+        "jest-pnp-resolver": "^1.2.2",
+        "jest-util": "^27.5.1",
+        "jest-validate": "^27.5.1",
+        "resolve": "^1.20.0",
+        "resolve.exports": "^1.1.0",
+        "slash": "^3.0.0"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/jest-resolve-dependencies": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz",
+      "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jest/types": "^27.5.1",
+        "jest-regex-util": "^27.5.1",
+        "jest-snapshot": "^27.5.1"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/jest-resolve/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-resolve/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/jest-resolve/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/jest-resolve/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/jest-resolve/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-resolve/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-runner": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-runner/-/jest-runner-27.5.1.tgz",
+      "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jest/console": "^27.5.1",
+        "@jest/environment": "^27.5.1",
+        "@jest/test-result": "^27.5.1",
+        "@jest/transform": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "emittery": "^0.8.1",
+        "graceful-fs": "^4.2.9",
+        "jest-docblock": "^27.5.1",
+        "jest-environment-jsdom": "^27.5.1",
+        "jest-environment-node": "^27.5.1",
+        "jest-haste-map": "^27.5.1",
+        "jest-leak-detector": "^27.5.1",
+        "jest-message-util": "^27.5.1",
+        "jest-resolve": "^27.5.1",
+        "jest-runtime": "^27.5.1",
+        "jest-util": "^27.5.1",
+        "jest-worker": "^27.5.1",
+        "source-map-support": "^0.5.6",
+        "throat": "^6.0.1"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-runner/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/jest-runner/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/jest-runner/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-runner/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-runtime": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-runtime/-/jest-runtime-27.5.1.tgz",
+      "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jest/environment": "^27.5.1",
+        "@jest/fake-timers": "^27.5.1",
+        "@jest/globals": "^27.5.1",
+        "@jest/source-map": "^27.5.1",
+        "@jest/test-result": "^27.5.1",
+        "@jest/transform": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "chalk": "^4.0.0",
+        "cjs-module-lexer": "^1.0.0",
+        "collect-v8-coverage": "^1.0.0",
+        "execa": "^5.0.0",
+        "glob": "^7.1.3",
+        "graceful-fs": "^4.2.9",
+        "jest-haste-map": "^27.5.1",
+        "jest-message-util": "^27.5.1",
+        "jest-mock": "^27.5.1",
+        "jest-regex-util": "^27.5.1",
+        "jest-resolve": "^27.5.1",
+        "jest-snapshot": "^27.5.1",
+        "jest-util": "^27.5.1",
+        "slash": "^3.0.0",
+        "strip-bom": "^4.0.0"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/jest-runtime/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-runtime/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/jest-runtime/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/jest-runtime/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/jest-runtime/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-runtime/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-serializer": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-serializer/-/jest-serializer-27.5.1.tgz",
+      "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@types/node": "*",
+        "graceful-fs": "^4.2.9"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/jest-snapshot": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz",
+      "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@babel/core": "^7.7.2",
+        "@babel/generator": "^7.7.2",
+        "@babel/plugin-syntax-typescript": "^7.7.2",
+        "@babel/traverse": "^7.7.2",
+        "@babel/types": "^7.0.0",
+        "@jest/transform": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "@types/babel__traverse": "^7.0.4",
+        "@types/prettier": "^2.1.5",
+        "babel-preset-current-node-syntax": "^1.0.0",
+        "chalk": "^4.0.0",
+        "expect": "^27.5.1",
+        "graceful-fs": "^4.2.9",
+        "jest-diff": "^27.5.1",
+        "jest-get-type": "^27.5.1",
+        "jest-haste-map": "^27.5.1",
+        "jest-matcher-utils": "^27.5.1",
+        "jest-message-util": "^27.5.1",
+        "jest-util": "^27.5.1",
+        "natural-compare": "^1.4.0",
+        "pretty-format": "^27.5.1",
+        "semver": "^7.3.2"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/jest-snapshot/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-snapshot/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/jest-snapshot/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/jest-snapshot/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/jest-snapshot/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-snapshot/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/jest-snapshot/node_modules/semver": {
+      "version": "7.6.0",
+      "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.0.tgz",
+      "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/jest-snapshot/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-snapshot/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/jest-util": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-util/-/jest-util-27.5.1.tgz",
+      "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jest/types": "^27.5.1",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "ci-info": "^3.2.0",
+        "graceful-fs": "^4.2.9",
+        "picomatch": "^2.2.3"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/jest-util/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-util/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/jest-util/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/jest-util/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/jest-util/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-util/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-validate": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-validate/-/jest-validate-27.5.1.tgz",
+      "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jest/types": "^27.5.1",
+        "camelcase": "^6.2.0",
+        "chalk": "^4.0.0",
+        "jest-get-type": "^27.5.1",
+        "leven": "^3.1.0",
+        "pretty-format": "^27.5.1"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/jest-validate/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-validate/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/jest-validate/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/jest-validate/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/jest-validate/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-validate/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-watcher": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-watcher/-/jest-watcher-27.5.1.tgz",
+      "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@jest/test-result": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "@types/node": "*",
+        "ansi-escapes": "^4.2.1",
+        "chalk": "^4.0.0",
+        "jest-util": "^27.5.1",
+        "string-length": "^4.0.1"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/jest-watcher/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-watcher/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/jest-watcher/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/jest-watcher/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/jest-watcher/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-watcher/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-worker": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz",
+      "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
+      "peer": true,
+      "dependencies": {
+        "@types/node": "*",
+        "merge-stream": "^2.0.0",
+        "supports-color": "^8.0.0"
+      },
+      "engines": {
+        "node": ">= 10.13.0"
+      }
+    },
+    "node_modules/jest-worker/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-worker/node_modules/supports-color": {
+      "version": "8.1.1",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz",
+      "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+      "peer": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/jimp": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/jimp/-/jimp-0.10.3.tgz",
+      "integrity": "sha512-meVWmDMtyUG5uYjFkmzu0zBgnCvvxwWNi27c4cg55vWNVC9ES4Lcwb+ogx+uBBQE3Q+dLKjXaLl0JVW+nUNwbQ==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/custom": "^0.10.3",
+        "@jimp/plugins": "^0.10.3",
+        "@jimp/types": "^0.10.3",
+        "core-js": "^3.4.1",
+        "regenerator-runtime": "^0.13.3"
+      }
+    },
+    "node_modules/jpeg-js": {
+      "version": "0.3.7",
+      "resolved": "https://registry.npmmirror.com/jpeg-js/-/jpeg-js-0.3.7.tgz",
+      "integrity": "sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ=="
+    },
+    "node_modules/js-tokens": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz",
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+    },
+    "node_modules/js-yaml": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz",
+      "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+      "dependencies": {
+        "argparse": "^2.0.1"
+      },
+      "bin": {
+        "js-yaml": "bin/js-yaml.js"
+      }
+    },
+    "node_modules/jsdom": {
+      "version": "16.7.0",
+      "resolved": "https://registry.npmmirror.com/jsdom/-/jsdom-16.7.0.tgz",
+      "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "abab": "^2.0.5",
+        "acorn": "^8.2.4",
+        "acorn-globals": "^6.0.0",
+        "cssom": "^0.4.4",
+        "cssstyle": "^2.3.0",
+        "data-urls": "^2.0.0",
+        "decimal.js": "^10.2.1",
+        "domexception": "^2.0.1",
+        "escodegen": "^2.0.0",
+        "form-data": "^3.0.0",
+        "html-encoding-sniffer": "^2.0.1",
+        "http-proxy-agent": "^4.0.1",
+        "https-proxy-agent": "^5.0.0",
+        "is-potential-custom-element-name": "^1.0.1",
+        "nwsapi": "^2.2.0",
+        "parse5": "6.0.1",
+        "saxes": "^5.0.1",
+        "symbol-tree": "^3.2.4",
+        "tough-cookie": "^4.0.0",
+        "w3c-hr-time": "^1.0.2",
+        "w3c-xmlserializer": "^2.0.0",
+        "webidl-conversions": "^6.1.0",
+        "whatwg-encoding": "^1.0.5",
+        "whatwg-mimetype": "^2.3.0",
+        "whatwg-url": "^8.5.0",
+        "ws": "^7.4.6",
+        "xml-name-validator": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "peerDependencies": {
+        "canvas": "^2.5.0"
+      },
+      "peerDependenciesMeta": {
+        "canvas": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/jsdom/node_modules/ws": {
+      "version": "7.5.9",
+      "resolved": "https://registry.npmmirror.com/ws/-/ws-7.5.9.tgz",
+      "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8.3.0"
+      },
+      "peerDependencies": {
+        "bufferutil": "^4.0.1",
+        "utf-8-validate": "^5.0.2"
+      },
+      "peerDependenciesMeta": {
+        "bufferutil": {
+          "optional": true
+        },
+        "utf-8-validate": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/jsdom/node_modules/xml-name-validator": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
+      "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/jsesc": {
+      "version": "2.5.2",
+      "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz",
+      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+      "bin": {
+        "jsesc": "bin/jsesc"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/json-buffer": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz",
+      "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
+    },
+    "node_modules/json-parse-even-better-errors": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+      "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+      "peer": true
+    },
+    "node_modules/json-schema-traverse": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+    },
+    "node_modules/json-stable-stringify-without-jsonify": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+      "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="
+    },
+    "node_modules/json5": {
+      "version": "2.2.3",
+      "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz",
+      "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+      "bin": {
+        "json5": "lib/cli.js"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/jsonc-parser": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz",
+      "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA=="
+    },
+    "node_modules/jsonfile": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz",
+      "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+      "dependencies": {
+        "universalify": "^2.0.0"
+      },
+      "optionalDependencies": {
+        "graceful-fs": "^4.1.6"
+      }
+    },
+    "node_modules/keyv": {
+      "version": "4.5.4",
+      "resolved": "https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz",
+      "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+      "dependencies": {
+        "json-buffer": "3.0.1"
+      }
+    },
+    "node_modules/kleur": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmmirror.com/kleur/-/kleur-3.0.3.tgz",
+      "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/lcid": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/lcid/-/lcid-3.1.1.tgz",
+      "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==",
+      "dependencies": {
+        "invert-kv": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/leven": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/leven/-/leven-3.1.0.tgz",
+      "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/levn": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz",
+      "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+      "dependencies": {
+        "prelude-ls": "^1.2.1",
+        "type-check": "~0.4.0"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/licia": {
+      "version": "1.39.2",
+      "resolved": "https://registry.npmmirror.com/licia/-/licia-1.39.2.tgz",
+      "integrity": "sha512-4pte7gXufSAa3JcsR0iT+2Lj2RX5Qpj+Nc0n84xs0ynNmw7eJmeZzk2oPTEtsQqwHwtT+NiX0arGkL5HPjTs7g=="
+    },
+    "node_modules/lilconfig": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz",
+      "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/lines-and-columns": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+      "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/load-bmfont": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/load-bmfont/-/load-bmfont-1.4.1.tgz",
+      "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==",
+      "dependencies": {
+        "buffer-equal": "0.0.1",
+        "mime": "^1.3.4",
+        "parse-bmfont-ascii": "^1.0.3",
+        "parse-bmfont-binary": "^1.0.5",
+        "parse-bmfont-xml": "^1.1.4",
+        "phin": "^2.9.1",
+        "xhr": "^2.0.1",
+        "xtend": "^4.0.0"
+      }
+    },
+    "node_modules/load-bmfont/node_modules/mime": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz",
+      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+      "bin": {
+        "mime": "cli.js"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/loader-runner": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.0.tgz",
+      "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
+      "peer": true,
+      "engines": {
+        "node": ">=6.11.5"
+      }
+    },
+    "node_modules/loader-utils": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-3.2.1.tgz",
+      "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==",
+      "engines": {
+        "node": ">= 12.13.0"
+      }
+    },
+    "node_modules/localstorage-polyfill": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/localstorage-polyfill/-/localstorage-polyfill-1.0.1.tgz",
+      "integrity": "sha512-m4iHVZxFH5734oQcPKU08025gIz2+4bjWR9lulP8ZYxEJR0BpA0w32oJmkzh8y3UI9ci7xCBehQDc3oA1X+VHw==",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/locate-path": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz",
+      "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+      "dependencies": {
+        "p-locate": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/lodash": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
+      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+      "dev": true
+    },
+    "node_modules/lodash.camelcase": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+      "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="
+    },
+    "node_modules/lodash.debounce": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+      "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
+      "dev": true
+    },
+    "node_modules/lodash.merge": {
+      "version": "4.6.2",
+      "resolved": "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz",
+      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
+    },
+    "node_modules/lru-cache": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz",
+      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+      "dependencies": {
+        "yallist": "^3.0.2"
+      }
+    },
+    "node_modules/magic-string": {
+      "version": "0.30.7",
+      "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.7.tgz",
+      "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==",
+      "dependencies": {
+        "@jridgewell/sourcemap-codec": "^1.4.15"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/make-dir": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-4.0.0.tgz",
+      "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "semver": "^7.5.3"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/make-dir/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/make-dir/node_modules/semver": {
+      "version": "7.6.0",
+      "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.0.tgz",
+      "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/make-dir/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/makeerror": {
+      "version": "1.0.12",
+      "resolved": "https://registry.npmmirror.com/makeerror/-/makeerror-1.0.12.tgz",
+      "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "tmpl": "1.0.5"
+      }
+    },
+    "node_modules/media-typer": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz",
+      "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/merge": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/merge/-/merge-2.1.1.tgz",
+      "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w=="
+    },
+    "node_modules/merge-descriptors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+      "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==",
+      "dev": true
+    },
+    "node_modules/merge-stream": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz",
+      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
+    },
+    "node_modules/merge2": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz",
+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/methods": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz",
+      "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/micromatch": {
+      "version": "4.0.5",
+      "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz",
+      "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+      "dependencies": {
+        "braces": "^3.0.2",
+        "picomatch": "^2.3.1"
+      },
+      "engines": {
+        "node": ">=8.6"
+      }
+    },
+    "node_modules/mime": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/mime/-/mime-3.0.0.tgz",
+      "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==",
+      "bin": {
+        "mime": "cli.js"
+      },
+      "engines": {
+        "node": ">=10.0.0"
+      }
+    },
+    "node_modules/mime-db": {
+      "version": "1.52.0",
+      "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
+      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mime-types": {
+      "version": "2.1.35",
+      "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
+      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+      "dependencies": {
+        "mime-db": "1.52.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mimic-fn": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz",
+      "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/min-document": {
+      "version": "2.19.0",
+      "resolved": "https://registry.npmmirror.com/min-document/-/min-document-2.19.0.tgz",
+      "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==",
+      "dependencies": {
+        "dom-walk": "^0.1.0"
+      }
+    },
+    "node_modules/minimatch": {
+      "version": "9.0.3",
+      "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.3.tgz",
+      "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      }
+    },
+    "node_modules/minimist": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz",
+      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="
+    },
+    "node_modules/mkdirp": {
+      "version": "0.5.6",
+      "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz",
+      "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+      "dependencies": {
+        "minimist": "^1.2.6"
+      },
+      "bin": {
+        "mkdirp": "bin/cmd.js"
+      }
+    },
+    "node_modules/module-alias": {
+      "version": "2.2.3",
+      "resolved": "https://registry.npmmirror.com/module-alias/-/module-alias-2.2.3.tgz",
+      "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q=="
+    },
+    "node_modules/ms": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
+      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+    },
+    "node_modules/muggle-string": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmmirror.com/muggle-string/-/muggle-string-0.3.1.tgz",
+      "integrity": "sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==",
+      "dev": true
+    },
+    "node_modules/nanoid": {
+      "version": "3.3.7",
+      "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz",
+      "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+      "bin": {
+        "nanoid": "bin/nanoid.cjs"
+      },
+      "engines": {
+        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+      }
+    },
+    "node_modules/natural-compare": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz",
+      "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="
+    },
+    "node_modules/negotiator": {
+      "version": "0.6.3",
+      "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz",
+      "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/neo-async": {
+      "version": "2.6.2",
+      "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz",
+      "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
+    },
+    "node_modules/node-int64": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmmirror.com/node-int64/-/node-int64-0.4.0.tgz",
+      "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/node-releases": {
+      "version": "2.0.14",
+      "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.14.tgz",
+      "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw=="
+    },
+    "node_modules/normalize-path": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz",
+      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/normalize-range": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz",
+      "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/npm-run-path": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz",
+      "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+      "dev": true,
+      "dependencies": {
+        "path-key": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/nth-check": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz",
+      "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+      "dev": true,
+      "dependencies": {
+        "boolbase": "^1.0.0"
+      }
+    },
+    "node_modules/nwsapi": {
+      "version": "2.2.7",
+      "resolved": "https://registry.npmmirror.com/nwsapi/-/nwsapi-2.2.7.tgz",
+      "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/object-inspect": {
+      "version": "1.13.1",
+      "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.1.tgz",
+      "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ=="
+    },
+    "node_modules/object-keys": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz",
+      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/object.assign": {
+      "version": "4.1.5",
+      "resolved": "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.5.tgz",
+      "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.5",
+        "define-properties": "^1.2.1",
+        "has-symbols": "^1.0.3",
+        "object-keys": "^1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/object.fromentries": {
+      "version": "2.0.7",
+      "resolved": "https://registry.npmmirror.com/object.fromentries/-/object.fromentries-2.0.7.tgz",
+      "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/object.groupby": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/object.groupby/-/object.groupby-1.0.2.tgz",
+      "integrity": "sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==",
+      "dev": true,
+      "dependencies": {
+        "array.prototype.filter": "^1.0.3",
+        "call-bind": "^1.0.5",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.22.3",
+        "es-errors": "^1.0.0"
+      }
+    },
+    "node_modules/object.values": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmmirror.com/object.values/-/object.values-1.1.7.tgz",
+      "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/omggif": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmmirror.com/omggif/-/omggif-1.0.10.tgz",
+      "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw=="
+    },
+    "node_modules/on-finished": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz",
+      "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+      "dev": true,
+      "dependencies": {
+        "ee-first": "1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz",
+      "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+      "dependencies": {
+        "wrappy": "1"
+      }
+    },
+    "node_modules/onetime": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz",
+      "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+      "dev": true,
+      "dependencies": {
+        "mimic-fn": "^2.1.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/optionator": {
+      "version": "0.9.3",
+      "resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.9.3.tgz",
+      "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
+      "dependencies": {
+        "@aashutoshrathi/word-wrap": "^1.2.3",
+        "deep-is": "^0.1.3",
+        "fast-levenshtein": "^2.0.6",
+        "levn": "^0.4.1",
+        "prelude-ls": "^1.2.1",
+        "type-check": "^0.4.0"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/os-locale-s-fix": {
+      "version": "1.0.8-fix-1",
+      "resolved": "https://registry.npmmirror.com/os-locale-s-fix/-/os-locale-s-fix-1.0.8-fix-1.tgz",
+      "integrity": "sha512-Sv0OvhPiMutICiwORAUefv02DCPb62IelBmo8ZsSrRHyI3FStqIWZvjqDkvtjU+lcujo7UNir+dCwKSqlEQ/5w==",
+      "dependencies": {
+        "lcid": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=10",
+        "yarn": "^1.22.4"
+      }
+    },
+    "node_modules/p-limit": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz",
+      "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+      "dependencies": {
+        "yocto-queue": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/p-locate": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz",
+      "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+      "dependencies": {
+        "p-limit": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/p-try": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz",
+      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/pako": {
+      "version": "1.0.11",
+      "resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz",
+      "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
+    },
+    "node_modules/parent-module": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz",
+      "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+      "dependencies": {
+        "callsites": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/parse-bmfont-ascii": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmmirror.com/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz",
+      "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA=="
+    },
+    "node_modules/parse-bmfont-binary": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmmirror.com/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz",
+      "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA=="
+    },
+    "node_modules/parse-bmfont-xml": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz",
+      "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==",
+      "dependencies": {
+        "xml-parse-from-string": "^1.0.0",
+        "xml2js": "^0.4.5"
+      }
+    },
+    "node_modules/parse-css-font": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/parse-css-font/-/parse-css-font-4.0.0.tgz",
+      "integrity": "sha512-lnY7dTUfjRXsSo5G5C639L8RaBBaVSgL+5hacIFKsNHzeCJQ5SFSZv1DZmc7+wZv/22PFGOq2YbaEHLdaCS/mQ==",
+      "dependencies": {
+        "css-font-size-keywords": "^1.0.0",
+        "css-font-stretch-keywords": "^1.0.1",
+        "css-font-style-keywords": "^1.0.1",
+        "css-font-weight-keywords": "^1.0.0",
+        "css-list-helpers": "^2.0.0",
+        "css-system-font-keywords": "^1.0.0",
+        "unquote": "^1.1.1"
+      }
+    },
+    "node_modules/parse-headers": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmmirror.com/parse-headers/-/parse-headers-2.0.5.tgz",
+      "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA=="
+    },
+    "node_modules/parse-json": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz",
+      "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@babel/code-frame": "^7.0.0",
+        "error-ex": "^1.3.1",
+        "json-parse-even-better-errors": "^2.3.0",
+        "lines-and-columns": "^1.1.6"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/parse5": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz",
+      "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/parseurl": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz",
+      "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/path-browserify": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/path-browserify/-/path-browserify-1.0.1.tgz",
+      "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
+      "dev": true
+    },
+    "node_modules/path-exists": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz",
+      "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/path-key": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz",
+      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/path-parse": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz",
+      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+    },
+    "node_modules/path-to-regexp": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+      "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==",
+      "dev": true
+    },
+    "node_modules/path-type": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz",
+      "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/phin": {
+      "version": "2.9.3",
+      "resolved": "https://registry.npmmirror.com/phin/-/phin-2.9.3.tgz",
+      "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA=="
+    },
+    "node_modules/picocolors": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz",
+      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+    },
+    "node_modules/picomatch": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz",
+      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+      "engines": {
+        "node": ">=8.6"
+      }
+    },
+    "node_modules/pify": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz",
+      "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/pinia": {
+      "version": "2.0.36",
+      "resolved": "https://registry.npmmirror.com/pinia/-/pinia-2.0.36.tgz",
+      "integrity": "sha512-4UKApwjlmJH+VuHKgA+zQMddcCb3ezYnyewQ9NVrsDqZ/j9dMv5+rh+1r48whKNdpFkZAWVxhBp5ewYaYX9JcQ==",
+      "dependencies": {
+        "@vue/devtools-api": "^6.5.0",
+        "vue-demi": "*"
+      },
+      "peerDependencies": {
+        "@vue/composition-api": "^1.4.0",
+        "typescript": ">=4.4.4",
+        "vue": "^2.6.14 || ^3.2.0"
+      },
+      "peerDependenciesMeta": {
+        "@vue/composition-api": {
+          "optional": true
+        },
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/pinia-plugin-persistedstate": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmmirror.com/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-3.2.1.tgz",
+      "integrity": "sha512-MK++8LRUsGF7r45PjBFES82ISnPzyO6IZx3CH5vyPseFLZCk1g2kgx6l/nW8pEBKxxd4do0P6bJw+mUSZIEZUQ==",
+      "peerDependencies": {
+        "pinia": "^2.0.0"
+      }
+    },
+    "node_modules/pinia/node_modules/vue-demi": {
+      "version": "0.14.7",
+      "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.7.tgz",
+      "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==",
+      "hasInstallScript": true,
+      "bin": {
+        "vue-demi-fix": "bin/vue-demi-fix.js",
+        "vue-demi-switch": "bin/vue-demi-switch.js"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "peerDependencies": {
+        "@vue/composition-api": "^1.0.0-rc.1",
+        "vue": "^3.0.0-0 || ^2.6.0"
+      },
+      "peerDependenciesMeta": {
+        "@vue/composition-api": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/pirates": {
+      "version": "4.0.6",
+      "resolved": "https://registry.npmmirror.com/pirates/-/pirates-4.0.6.tgz",
+      "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/pixelmatch": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmmirror.com/pixelmatch/-/pixelmatch-4.0.2.tgz",
+      "integrity": "sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==",
+      "dependencies": {
+        "pngjs": "^3.0.0"
+      },
+      "bin": {
+        "pixelmatch": "bin/pixelmatch"
+      }
+    },
+    "node_modules/pkg-dir": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz",
+      "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "find-up": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/pkg-dir/node_modules/find-up": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz",
+      "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "locate-path": "^5.0.0",
+        "path-exists": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/pkg-dir/node_modules/locate-path": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz",
+      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "p-locate": "^4.1.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/pkg-dir/node_modules/p-limit": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz",
+      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "p-try": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/pkg-dir/node_modules/p-locate": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz",
+      "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "p-limit": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/pngjs": {
+      "version": "3.4.0",
+      "resolved": "https://registry.npmmirror.com/pngjs/-/pngjs-3.4.0.tgz",
+      "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==",
+      "engines": {
+        "node": ">=4.0.0"
+      }
+    },
+    "node_modules/postcss": {
+      "version": "8.4.35",
+      "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.35.tgz",
+      "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==",
+      "dependencies": {
+        "nanoid": "^3.3.7",
+        "picocolors": "^1.0.0",
+        "source-map-js": "^1.0.2"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >=14"
+      }
+    },
+    "node_modules/postcss-import": {
+      "version": "14.1.0",
+      "resolved": "https://registry.npmmirror.com/postcss-import/-/postcss-import-14.1.0.tgz",
+      "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==",
+      "dependencies": {
+        "postcss-value-parser": "^4.0.0",
+        "read-cache": "^1.0.0",
+        "resolve": "^1.1.7"
+      },
+      "engines": {
+        "node": ">=10.0.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.0.0"
+      }
+    },
+    "node_modules/postcss-load-config": {
+      "version": "3.1.4",
+      "resolved": "https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
+      "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
+      "dependencies": {
+        "lilconfig": "^2.0.5",
+        "yaml": "^1.10.2"
+      },
+      "engines": {
+        "node": ">= 10"
+      },
+      "peerDependencies": {
+        "postcss": ">=8.0.9",
+        "ts-node": ">=9.0.0"
+      },
+      "peerDependenciesMeta": {
+        "postcss": {
+          "optional": true
+        },
+        "ts-node": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/postcss-modules": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmmirror.com/postcss-modules/-/postcss-modules-4.3.1.tgz",
+      "integrity": "sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==",
+      "dependencies": {
+        "generic-names": "^4.0.0",
+        "icss-replace-symbols": "^1.1.0",
+        "lodash.camelcase": "^4.3.0",
+        "postcss-modules-extract-imports": "^3.0.0",
+        "postcss-modules-local-by-default": "^4.0.0",
+        "postcss-modules-scope": "^3.0.0",
+        "postcss-modules-values": "^4.0.0",
+        "string-hash": "^1.1.1"
+      },
+      "peerDependencies": {
+        "postcss": "^8.0.0"
+      }
+    },
+    "node_modules/postcss-modules-extract-imports": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz",
+      "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==",
+      "engines": {
+        "node": "^10 || ^12 || >= 14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
+    "node_modules/postcss-modules-local-by-default": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npmmirror.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz",
+      "integrity": "sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==",
+      "dependencies": {
+        "icss-utils": "^5.0.0",
+        "postcss-selector-parser": "^6.0.2",
+        "postcss-value-parser": "^4.1.0"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >= 14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
+    "node_modules/postcss-modules-scope": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz",
+      "integrity": "sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==",
+      "dependencies": {
+        "postcss-selector-parser": "^6.0.4"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >= 14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
+    "node_modules/postcss-modules-values": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz",
+      "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==",
+      "dependencies": {
+        "icss-utils": "^5.0.0"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >= 14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
+    "node_modules/postcss-selector-parser": {
+      "version": "6.0.15",
+      "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz",
+      "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==",
+      "dependencies": {
+        "cssesc": "^3.0.0",
+        "util-deprecate": "^1.0.2"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/postcss-value-parser": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+      "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+    },
+    "node_modules/prelude-ls": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz",
+      "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/prettier": {
+      "version": "3.2.5",
+      "resolved": "https://registry.npmmirror.com/prettier/-/prettier-3.2.5.tgz",
+      "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==",
+      "bin": {
+        "prettier": "bin/prettier.cjs"
+      },
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/prettier-linter-helpers": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
+      "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
+      "dependencies": {
+        "fast-diff": "^1.1.2"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/pretty-format": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/pretty-format/-/pretty-format-27.5.1.tgz",
+      "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ansi-regex": "^5.0.1",
+        "ansi-styles": "^5.0.0",
+        "react-is": "^17.0.1"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+      }
+    },
+    "node_modules/pretty-format/node_modules/ansi-styles": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-5.2.0.tgz",
+      "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/process": {
+      "version": "0.11.10",
+      "resolved": "https://registry.npmmirror.com/process/-/process-0.11.10.tgz",
+      "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+      "engines": {
+        "node": ">= 0.6.0"
+      }
+    },
+    "node_modules/prompts": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmmirror.com/prompts/-/prompts-2.4.2.tgz",
+      "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "kleur": "^3.0.3",
+        "sisteransi": "^1.0.5"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/proxy-addr": {
+      "version": "2.0.7",
+      "resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz",
+      "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+      "dev": true,
+      "dependencies": {
+        "forwarded": "0.2.0",
+        "ipaddr.js": "1.9.1"
+      },
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
+    "node_modules/psl": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmmirror.com/psl/-/psl-1.9.0.tgz",
+      "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/punycode": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz",
+      "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/qrcode-reader": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/qrcode-reader/-/qrcode-reader-1.0.4.tgz",
+      "integrity": "sha512-rRjALGNh9zVqvweg1j5OKIQKNsw3bLC+7qwlnead5K/9cb1cEIAGkwikt/09U0K+2IDWGD9CC6SP7tHAjUeqvQ=="
+    },
+    "node_modules/qrcode-terminal": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npmmirror.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz",
+      "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==",
+      "bin": {
+        "qrcode-terminal": "bin/qrcode-terminal.js"
+      }
+    },
+    "node_modules/qs": {
+      "version": "6.11.2",
+      "resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.2.tgz",
+      "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+      "dependencies": {
+        "side-channel": "^1.0.4"
+      },
+      "engines": {
+        "node": ">=0.6"
+      }
+    },
+    "node_modules/querystringify": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/querystringify/-/querystringify-2.2.0.tgz",
+      "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/queue-microtask": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz",
+      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
+    },
+    "node_modules/randombytes": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz",
+      "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+      "peer": true,
+      "dependencies": {
+        "safe-buffer": "^5.1.0"
+      }
+    },
+    "node_modules/range-parser": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz",
+      "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/raw-body": {
+      "version": "2.5.1",
+      "resolved": "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.1.tgz",
+      "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
+      "dev": true,
+      "dependencies": {
+        "bytes": "3.1.2",
+        "http-errors": "2.0.0",
+        "iconv-lite": "0.4.24",
+        "unpipe": "1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/react-is": {
+      "version": "17.0.2",
+      "resolved": "https://registry.npmmirror.com/react-is/-/react-is-17.0.2.tgz",
+      "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/read-cache": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/read-cache/-/read-cache-1.0.0.tgz",
+      "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+      "dependencies": {
+        "pify": "^2.3.0"
+      }
+    },
+    "node_modules/readdirp": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz",
+      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+      "dependencies": {
+        "picomatch": "^2.2.1"
+      },
+      "engines": {
+        "node": ">=8.10.0"
+      }
+    },
+    "node_modules/regenerate": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz",
+      "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
+      "dev": true
+    },
+    "node_modules/regenerate-unicode-properties": {
+      "version": "10.1.1",
+      "resolved": "https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz",
+      "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==",
+      "dev": true,
+      "dependencies": {
+        "regenerate": "^1.4.2"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/regenerator-runtime": {
+      "version": "0.13.11",
+      "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+      "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
+    },
+    "node_modules/regenerator-transform": {
+      "version": "0.15.2",
+      "resolved": "https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz",
+      "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==",
+      "dev": true,
+      "dependencies": {
+        "@babel/runtime": "^7.8.4"
+      }
+    },
+    "node_modules/regexp.prototype.flags": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz",
+      "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "set-function-name": "^2.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/regexpu-core": {
+      "version": "5.3.2",
+      "resolved": "https://registry.npmmirror.com/regexpu-core/-/regexpu-core-5.3.2.tgz",
+      "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==",
+      "dev": true,
+      "dependencies": {
+        "@babel/regjsgen": "^0.8.0",
+        "regenerate": "^1.4.2",
+        "regenerate-unicode-properties": "^10.1.0",
+        "regjsparser": "^0.9.1",
+        "unicode-match-property-ecmascript": "^2.0.0",
+        "unicode-match-property-value-ecmascript": "^2.1.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/regjsparser": {
+      "version": "0.9.1",
+      "resolved": "https://registry.npmmirror.com/regjsparser/-/regjsparser-0.9.1.tgz",
+      "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
+      "dev": true,
+      "dependencies": {
+        "jsesc": "~0.5.0"
+      },
+      "bin": {
+        "regjsparser": "bin/parser"
+      }
+    },
+    "node_modules/regjsparser/node_modules/jsesc": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-0.5.0.tgz",
+      "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
+      "dev": true,
+      "bin": {
+        "jsesc": "bin/jsesc"
+      }
+    },
+    "node_modules/require-directory": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz",
+      "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/requires-port": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz",
+      "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/resolve": {
+      "version": "1.22.8",
+      "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz",
+      "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+      "dependencies": {
+        "is-core-module": "^2.13.0",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
+      },
+      "bin": {
+        "resolve": "bin/resolve"
+      }
+    },
+    "node_modules/resolve-cwd": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
+      "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "resolve-from": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/resolve-cwd/node_modules/resolve-from": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-5.0.0.tgz",
+      "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/resolve-from": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz",
+      "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/resolve-pkg-maps": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+      "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+      "dev": true
+    },
+    "node_modules/resolve.exports": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/resolve.exports/-/resolve.exports-1.1.1.tgz",
+      "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/reusify": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz",
+      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+      "engines": {
+        "iojs": ">=1.0.0",
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/rimraf": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz",
+      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+      "dependencies": {
+        "glob": "^7.1.3"
+      },
+      "bin": {
+        "rimraf": "bin.js"
+      }
+    },
+    "node_modules/rollup": {
+      "version": "3.29.4",
+      "resolved": "https://registry.npmmirror.com/rollup/-/rollup-3.29.4.tgz",
+      "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==",
+      "bin": {
+        "rollup": "dist/bin/rollup"
+      },
+      "engines": {
+        "node": ">=14.18.0",
+        "npm": ">=8.0.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.2"
+      }
+    },
+    "node_modules/run-parallel": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz",
+      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+      "dependencies": {
+        "queue-microtask": "^1.2.2"
+      }
+    },
+    "node_modules/safe-area-insets": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/safe-area-insets/-/safe-area-insets-1.4.1.tgz",
+      "integrity": "sha512-r/nRWTjFGhhm3w1Z6Kd/jY11srN+lHt2mNl1E/emQGW8ic7n3Avu4noibklfSM+Y34peNphHD/BSZecav0sXYQ=="
+    },
+    "node_modules/safe-array-concat": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz",
+      "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.5",
+        "get-intrinsic": "^1.2.2",
+        "has-symbols": "^1.0.3",
+        "isarray": "^2.0.5"
+      },
+      "engines": {
+        "node": ">=0.4"
+      }
+    },
+    "node_modules/safe-buffer": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
+    },
+    "node_modules/safe-regex-test": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
+      "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.6",
+        "es-errors": "^1.3.0",
+        "is-regex": "^1.1.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+      "dev": true
+    },
+    "node_modules/sass": {
+      "version": "1.70.0",
+      "resolved": "https://registry.npmmirror.com/sass/-/sass-1.70.0.tgz",
+      "integrity": "sha512-uUxNQ3zAHeAx5nRFskBnrWzDUJrrvpCPD5FNAoRvTi0WwremlheES3tg+56PaVtCs5QDRX5CBLxxKMDJMEa1WQ==",
+      "dependencies": {
+        "chokidar": ">=3.0.0 <4.0.0",
+        "immutable": "^4.0.0",
+        "source-map-js": ">=0.6.2 <2.0.0"
+      },
+      "bin": {
+        "sass": "sass.js"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/sass-loader": {
+      "version": "13.3.3",
+      "resolved": "https://registry.npmmirror.com/sass-loader/-/sass-loader-13.3.3.tgz",
+      "integrity": "sha512-mt5YN2F1MOZr3d/wBRcZxeFgwgkH44wVc2zohO2YF6JiOMkiXe4BYRZpSu2sO1g71mo/j16txzUhsKZlqjVGzA==",
+      "dependencies": {
+        "neo-async": "^2.6.2"
+      },
+      "engines": {
+        "node": ">= 14.15.0"
+      },
+      "peerDependencies": {
+        "fibers": ">= 3.1.0",
+        "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0",
+        "sass": "^1.3.0",
+        "sass-embedded": "*",
+        "webpack": "^5.0.0"
+      },
+      "peerDependenciesMeta": {
+        "fibers": {
+          "optional": true
+        },
+        "node-sass": {
+          "optional": true
+        },
+        "sass": {
+          "optional": true
+        },
+        "sass-embedded": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/sax": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/sax/-/sax-1.3.0.tgz",
+      "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA=="
+    },
+    "node_modules/saxes": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/saxes/-/saxes-5.0.1.tgz",
+      "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "xmlchars": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/schema-utils": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz",
+      "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+      "peer": true,
+      "dependencies": {
+        "@types/json-schema": "^7.0.8",
+        "ajv": "^6.12.5",
+        "ajv-keywords": "^3.5.2"
+      },
+      "engines": {
+        "node": ">= 10.13.0"
+      }
+    },
+    "node_modules/semver": {
+      "version": "6.3.1",
+      "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
+    "node_modules/send": {
+      "version": "0.18.0",
+      "resolved": "https://registry.npmmirror.com/send/-/send-0.18.0.tgz",
+      "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+      "dev": true,
+      "dependencies": {
+        "debug": "2.6.9",
+        "depd": "2.0.0",
+        "destroy": "1.2.0",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "fresh": "0.5.2",
+        "http-errors": "2.0.0",
+        "mime": "1.6.0",
+        "ms": "2.1.3",
+        "on-finished": "2.4.1",
+        "range-parser": "~1.2.1",
+        "statuses": "2.0.1"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/send/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "dev": true,
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/send/node_modules/debug/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "dev": true
+    },
+    "node_modules/send/node_modules/mime": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz",
+      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+      "dev": true,
+      "bin": {
+        "mime": "cli.js"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/send/node_modules/ms": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+      "dev": true
+    },
+    "node_modules/serialize-javascript": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
+      "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
+      "peer": true,
+      "dependencies": {
+        "randombytes": "^2.1.0"
+      }
+    },
+    "node_modules/serve-static": {
+      "version": "1.15.0",
+      "resolved": "https://registry.npmmirror.com/serve-static/-/serve-static-1.15.0.tgz",
+      "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
+      "dev": true,
+      "dependencies": {
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "parseurl": "~1.3.3",
+        "send": "0.18.0"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/set-function-length": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/set-function-length/-/set-function-length-1.2.1.tgz",
+      "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==",
+      "dependencies": {
+        "define-data-property": "^1.1.2",
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2",
+        "get-intrinsic": "^1.2.3",
+        "gopd": "^1.0.1",
+        "has-property-descriptors": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/set-function-name": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/set-function-name/-/set-function-name-2.0.1.tgz",
+      "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==",
+      "dev": true,
+      "dependencies": {
+        "define-data-property": "^1.0.1",
+        "functions-have-names": "^1.2.3",
+        "has-property-descriptors": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/setprototypeof": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz",
+      "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
+      "dev": true
+    },
+    "node_modules/shebang-command": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz",
+      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+      "dependencies": {
+        "shebang-regex": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/shebang-regex": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz",
+      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/side-channel": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.5.tgz",
+      "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==",
+      "dependencies": {
+        "call-bind": "^1.0.6",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.4",
+        "object-inspect": "^1.13.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/signal-exit": {
+      "version": "3.0.7",
+      "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz",
+      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+      "dev": true
+    },
+    "node_modules/sisteransi": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmmirror.com/sisteransi/-/sisteransi-1.0.5.tgz",
+      "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/slash": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz",
+      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/source-map": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
+      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/source-map-js": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz",
+      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/source-map-support": {
+      "version": "0.5.21",
+      "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz",
+      "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+      "dependencies": {
+        "buffer-from": "^1.0.0",
+        "source-map": "^0.6.0"
+      }
+    },
+    "node_modules/sourcemap-codec": {
+      "version": "1.4.8",
+      "resolved": "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
+      "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
+      "deprecated": "Please use @jridgewell/sourcemap-codec instead"
+    },
+    "node_modules/sprintf-js": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz",
+      "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/stack-utils": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmmirror.com/stack-utils/-/stack-utils-2.0.6.tgz",
+      "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "escape-string-regexp": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/stack-utils/node_modules/escape-string-regexp": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+      "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/statuses": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz",
+      "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/string-hash": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmmirror.com/string-hash/-/string-hash-1.1.3.tgz",
+      "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A=="
+    },
+    "node_modules/string-length": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmmirror.com/string-length/-/string-length-4.0.2.tgz",
+      "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "char-regex": "^1.0.2",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/string.prototype.trim": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmmirror.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz",
+      "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/string.prototype.trimend": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz",
+      "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1"
+      }
+    },
+    "node_modules/string.prototype.trimstart": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz",
+      "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1"
+      }
+    },
+    "node_modules/strip-ansi": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/strip-bom": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/strip-bom/-/strip-bom-4.0.0.tgz",
+      "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/strip-final-newline": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+      "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/strip-json-comments": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+      "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/supports-color": {
+      "version": "5.5.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz",
+      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+      "dependencies": {
+        "has-flag": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/supports-hyperlinks": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz",
+      "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "has-flag": "^4.0.0",
+        "supports-color": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/supports-hyperlinks/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/supports-hyperlinks/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/supports-preserve-symlinks-flag": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/svg-tags": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/svg-tags/-/svg-tags-1.0.0.tgz",
+      "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==",
+      "dev": true
+    },
+    "node_modules/symbol-tree": {
+      "version": "3.2.4",
+      "resolved": "https://registry.npmmirror.com/symbol-tree/-/symbol-tree-3.2.4.tgz",
+      "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/synckit": {
+      "version": "0.8.8",
+      "resolved": "https://registry.npmmirror.com/synckit/-/synckit-0.8.8.tgz",
+      "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==",
+      "dependencies": {
+        "@pkgr/core": "^0.1.0",
+        "tslib": "^2.6.2"
+      },
+      "engines": {
+        "node": "^14.18.0 || >=16.0.0"
+      }
+    },
+    "node_modules/systemjs": {
+      "version": "6.14.3",
+      "resolved": "https://registry.npmmirror.com/systemjs/-/systemjs-6.14.3.tgz",
+      "integrity": "sha512-hQv45irdhXudAOr8r6SVSpJSGtogdGZUbJBRKCE5nsIS7tsxxvnIHqT4IOPWj+P+HcSzeWzHlGCGpmhPDIKe+w==",
+      "dev": true
+    },
+    "node_modules/tapable": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmmirror.com/tapable/-/tapable-2.2.1.tgz",
+      "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/terminal-link": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/terminal-link/-/terminal-link-2.1.1.tgz",
+      "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ansi-escapes": "^4.2.1",
+        "supports-hyperlinks": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/terser": {
+      "version": "5.27.0",
+      "resolved": "https://registry.npmmirror.com/terser/-/terser-5.27.0.tgz",
+      "integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==",
+      "dependencies": {
+        "@jridgewell/source-map": "^0.3.3",
+        "acorn": "^8.8.2",
+        "commander": "^2.20.0",
+        "source-map-support": "~0.5.20"
+      },
+      "bin": {
+        "terser": "bin/terser"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/terser-webpack-plugin": {
+      "version": "5.3.10",
+      "resolved": "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz",
+      "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==",
+      "peer": true,
+      "dependencies": {
+        "@jridgewell/trace-mapping": "^0.3.20",
+        "jest-worker": "^27.4.5",
+        "schema-utils": "^3.1.1",
+        "serialize-javascript": "^6.0.1",
+        "terser": "^5.26.0"
+      },
+      "engines": {
+        "node": ">= 10.13.0"
+      },
+      "peerDependencies": {
+        "webpack": "^5.1.0"
+      },
+      "peerDependenciesMeta": {
+        "@swc/core": {
+          "optional": true
+        },
+        "esbuild": {
+          "optional": true
+        },
+        "uglify-js": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/test-exclude": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/test-exclude/-/test-exclude-6.0.0.tgz",
+      "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@istanbuljs/schema": "^0.1.2",
+        "glob": "^7.1.4",
+        "minimatch": "^3.0.4"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/test-exclude/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/test-exclude/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/text-table": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz",
+      "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
+    },
+    "node_modules/throat": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmmirror.com/throat/-/throat-6.0.2.tgz",
+      "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/timm": {
+      "version": "1.7.1",
+      "resolved": "https://registry.npmmirror.com/timm/-/timm-1.7.1.tgz",
+      "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw=="
+    },
+    "node_modules/tinycolor2": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmmirror.com/tinycolor2/-/tinycolor2-1.6.0.tgz",
+      "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw=="
+    },
+    "node_modules/tmpl": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmmirror.com/tmpl/-/tmpl-1.0.5.tgz",
+      "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/to-fast-properties": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+      "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/to-regex-range": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz",
+      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+      "dependencies": {
+        "is-number": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=8.0"
+      }
+    },
+    "node_modules/toidentifier": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz",
+      "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.6"
+      }
+    },
+    "node_modules/tough-cookie": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmmirror.com/tough-cookie/-/tough-cookie-4.1.3.tgz",
+      "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "psl": "^1.1.33",
+        "punycode": "^2.1.1",
+        "universalify": "^0.2.0",
+        "url-parse": "^1.5.3"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/tough-cookie/node_modules/universalify": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmmirror.com/universalify/-/universalify-0.2.0.tgz",
+      "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">= 4.0.0"
+      }
+    },
+    "node_modules/tr46": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/tr46/-/tr46-2.1.0.tgz",
+      "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "punycode": "^2.1.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/ts-api-utils": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/ts-api-utils/-/ts-api-utils-1.2.1.tgz",
+      "integrity": "sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==",
+      "dev": true,
+      "engines": {
+        "node": ">=16"
+      },
+      "peerDependencies": {
+        "typescript": ">=4.2.0"
+      }
+    },
+    "node_modules/tsconfig-paths": {
+      "version": "3.15.0",
+      "resolved": "https://registry.npmmirror.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
+      "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
+      "dev": true,
+      "dependencies": {
+        "@types/json5": "^0.0.29",
+        "json5": "^1.0.2",
+        "minimist": "^1.2.6",
+        "strip-bom": "^3.0.0"
+      }
+    },
+    "node_modules/tsconfig-paths/node_modules/json5": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz",
+      "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+      "dev": true,
+      "dependencies": {
+        "minimist": "^1.2.0"
+      },
+      "bin": {
+        "json5": "lib/cli.js"
+      }
+    },
+    "node_modules/tsconfig-paths/node_modules/strip-bom": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/strip-bom/-/strip-bom-3.0.0.tgz",
+      "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+      "dev": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/tslib": {
+      "version": "2.6.2",
+      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.6.2.tgz",
+      "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+    },
+    "node_modules/type-check": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz",
+      "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+      "dependencies": {
+        "prelude-ls": "^1.2.1"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/type-detect": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmmirror.com/type-detect/-/type-detect-4.0.8.tgz",
+      "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/type-fest": {
+      "version": "0.21.3",
+      "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.21.3.tgz",
+      "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/type-is": {
+      "version": "1.6.18",
+      "resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz",
+      "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+      "dev": true,
+      "dependencies": {
+        "media-typer": "0.3.0",
+        "mime-types": "~2.1.24"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/typed-array-buffer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz",
+      "integrity": "sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.6",
+        "es-errors": "^1.3.0",
+        "is-typed-array": "^1.1.13"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/typed-array-byte-length": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz",
+      "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "for-each": "^0.3.3",
+        "has-proto": "^1.0.1",
+        "is-typed-array": "^1.1.10"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/typed-array-byte-offset": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz",
+      "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==",
+      "dev": true,
+      "dependencies": {
+        "available-typed-arrays": "^1.0.5",
+        "call-bind": "^1.0.2",
+        "for-each": "^0.3.3",
+        "has-proto": "^1.0.1",
+        "is-typed-array": "^1.1.10"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/typed-array-length": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/typed-array-length/-/typed-array-length-1.0.4.tgz",
+      "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "for-each": "^0.3.3",
+        "is-typed-array": "^1.1.9"
+      }
+    },
+    "node_modules/typedarray-to-buffer": {
+      "version": "3.1.5",
+      "resolved": "https://registry.npmmirror.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
+      "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "is-typedarray": "^1.0.0"
+      }
+    },
+    "node_modules/typescript": {
+      "version": "5.3.3",
+      "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.3.3.tgz",
+      "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
+      "devOptional": true,
+      "bin": {
+        "tsc": "bin/tsc",
+        "tsserver": "bin/tsserver"
+      },
+      "engines": {
+        "node": ">=14.17"
+      }
+    },
+    "node_modules/unbox-primitive": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+      "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "has-bigints": "^1.0.2",
+        "has-symbols": "^1.0.3",
+        "which-boxed-primitive": "^1.0.2"
+      }
+    },
+    "node_modules/undici-types": {
+      "version": "5.26.5",
+      "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz",
+      "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
+    },
+    "node_modules/unicode-canonical-property-names-ecmascript": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
+      "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/unicode-match-property-ecmascript": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
+      "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
+      "dev": true,
+      "dependencies": {
+        "unicode-canonical-property-names-ecmascript": "^2.0.0",
+        "unicode-property-aliases-ecmascript": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/unicode-match-property-value-ecmascript": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz",
+      "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==",
+      "dev": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/unicode-property-aliases-ecmascript": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
+      "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
+      "dev": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/universalify": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz",
+      "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+      "engines": {
+        "node": ">= 10.0.0"
+      }
+    },
+    "node_modules/unpipe": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz",
+      "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/unquote": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/unquote/-/unquote-1.1.1.tgz",
+      "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg=="
+    },
+    "node_modules/update-browserslist-db": {
+      "version": "1.0.13",
+      "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
+      "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
+      "dependencies": {
+        "escalade": "^3.1.1",
+        "picocolors": "^1.0.0"
+      },
+      "bin": {
+        "update-browserslist-db": "cli.js"
+      },
+      "peerDependencies": {
+        "browserslist": ">= 4.21.0"
+      }
+    },
+    "node_modules/uri-js": {
+      "version": "4.4.1",
+      "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz",
+      "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+      "dependencies": {
+        "punycode": "^2.1.0"
+      }
+    },
+    "node_modules/url-parse": {
+      "version": "1.5.10",
+      "resolved": "https://registry.npmmirror.com/url-parse/-/url-parse-1.5.10.tgz",
+      "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "querystringify": "^2.1.1",
+        "requires-port": "^1.0.0"
+      }
+    },
+    "node_modules/utif": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/utif/-/utif-2.0.1.tgz",
+      "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==",
+      "dependencies": {
+        "pako": "^1.0.5"
+      }
+    },
+    "node_modules/util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+    },
+    "node_modules/utils-merge": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz",
+      "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.4.0"
+      }
+    },
+    "node_modules/v8-to-istanbul": {
+      "version": "8.1.1",
+      "resolved": "https://registry.npmmirror.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz",
+      "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "@types/istanbul-lib-coverage": "^2.0.1",
+        "convert-source-map": "^1.6.0",
+        "source-map": "^0.7.3"
+      },
+      "engines": {
+        "node": ">=10.12.0"
+      }
+    },
+    "node_modules/v8-to-istanbul/node_modules/convert-source-map": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.9.0.tgz",
+      "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/v8-to-istanbul/node_modules/source-map": {
+      "version": "0.7.4",
+      "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.7.4.tgz",
+      "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/vary": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz",
+      "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/vite": {
+      "version": "4.1.5",
+      "resolved": "https://registry.npmmirror.com/vite/-/vite-4.1.5.tgz",
+      "integrity": "sha512-zJ0RiVkf61kpd7O+VtU6r766xgnTaIknP/lR6sJTZq3HtVJ3HGnTo5DaJhTUtYoTyS/CQwZ6yEVdc/lrmQT7dQ==",
+      "dependencies": {
+        "esbuild": "^0.16.14",
+        "postcss": "^8.4.21",
+        "resolve": "^1.22.1",
+        "rollup": "^3.10.0"
+      },
+      "bin": {
+        "vite": "bin/vite.js"
+      },
+      "engines": {
+        "node": "^14.18.0 || >=16.0.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.2"
+      },
+      "peerDependencies": {
+        "@types/node": ">= 14",
+        "less": "*",
+        "sass": "*",
+        "stylus": "*",
+        "sugarss": "*",
+        "terser": "^5.4.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/node": {
+          "optional": true
+        },
+        "less": {
+          "optional": true
+        },
+        "sass": {
+          "optional": true
+        },
+        "stylus": {
+          "optional": true
+        },
+        "sugarss": {
+          "optional": true
+        },
+        "terser": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/win32-x64": {
+      "version": "0.16.17",
+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz",
+      "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==",
+      "cpu": [
+        "x64"
+      ],
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/vite/node_modules/esbuild": {
+      "version": "0.16.17",
+      "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.16.17.tgz",
+      "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==",
+      "hasInstallScript": true,
+      "bin": {
+        "esbuild": "bin/esbuild"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "optionalDependencies": {
+        "@esbuild/android-arm": "0.16.17",
+        "@esbuild/android-arm64": "0.16.17",
+        "@esbuild/android-x64": "0.16.17",
+        "@esbuild/darwin-arm64": "0.16.17",
+        "@esbuild/darwin-x64": "0.16.17",
+        "@esbuild/freebsd-arm64": "0.16.17",
+        "@esbuild/freebsd-x64": "0.16.17",
+        "@esbuild/linux-arm": "0.16.17",
+        "@esbuild/linux-arm64": "0.16.17",
+        "@esbuild/linux-ia32": "0.16.17",
+        "@esbuild/linux-loong64": "0.16.17",
+        "@esbuild/linux-mips64el": "0.16.17",
+        "@esbuild/linux-ppc64": "0.16.17",
+        "@esbuild/linux-riscv64": "0.16.17",
+        "@esbuild/linux-s390x": "0.16.17",
+        "@esbuild/linux-x64": "0.16.17",
+        "@esbuild/netbsd-x64": "0.16.17",
+        "@esbuild/openbsd-x64": "0.16.17",
+        "@esbuild/sunos-x64": "0.16.17",
+        "@esbuild/win32-arm64": "0.16.17",
+        "@esbuild/win32-ia32": "0.16.17",
+        "@esbuild/win32-x64": "0.16.17"
+      }
+    },
+    "node_modules/vue": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/vue/-/vue-3.4.18.tgz",
+      "integrity": "sha512-0zLRYamFRe0wF4q2L3O24KQzLyLpL64ye1RUToOgOxuWZsb/FhaNRdGmeozdtVYLz6tl94OXLaK7/WQIrVCw1A==",
+      "dependencies": {
+        "@vue/compiler-dom": "3.4.18",
+        "@vue/compiler-sfc": "3.4.18",
+        "@vue/runtime-dom": "3.4.18",
+        "@vue/server-renderer": "3.4.18",
+        "@vue/shared": "3.4.18"
+      },
+      "peerDependencies": {
+        "typescript": "*"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/vue-eslint-parser": {
+      "version": "9.4.2",
+      "resolved": "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz",
+      "integrity": "sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==",
+      "dev": true,
+      "dependencies": {
+        "debug": "^4.3.4",
+        "eslint-scope": "^7.1.1",
+        "eslint-visitor-keys": "^3.3.0",
+        "espree": "^9.3.1",
+        "esquery": "^1.4.0",
+        "lodash": "^4.17.21",
+        "semver": "^7.3.6"
+      },
+      "engines": {
+        "node": "^14.17.0 || >=16.0.0"
+      },
+      "peerDependencies": {
+        "eslint": ">=6.0.0"
+      }
+    },
+    "node_modules/vue-eslint-parser/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dev": true,
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/vue-eslint-parser/node_modules/semver": {
+      "version": "7.6.0",
+      "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.0.tgz",
+      "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+      "dev": true,
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/vue-eslint-parser/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true
+    },
+    "node_modules/vue-i18n": {
+      "version": "9.9.1",
+      "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.9.1.tgz",
+      "integrity": "sha512-xyQ4VspLdNSPTKBFBPWa1tvtj+9HuockZwgFeD2OhxxXuC2CWeNvV4seu2o9+vbQOyQbhAM5Ez56oxUrrnTWdw==",
+      "dependencies": {
+        "@intlify/core-base": "9.9.1",
+        "@intlify/shared": "9.9.1",
+        "@vue/devtools-api": "^6.5.0"
+      },
+      "engines": {
+        "node": ">= 16"
+      },
+      "peerDependencies": {
+        "vue": "^3.0.0"
+      }
+    },
+    "node_modules/vue-i18n/node_modules/@intlify/core-base": {
+      "version": "9.9.1",
+      "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.9.1.tgz",
+      "integrity": "sha512-qsV15dg7jNX2faBRyKMgZS8UcFJViWEUPLdzZ9UR0kQZpFVeIpc0AG7ZOfeP7pX2T9SQ5jSiorq/tii9nkkafA==",
+      "dependencies": {
+        "@intlify/message-compiler": "9.9.1",
+        "@intlify/shared": "9.9.1"
+      },
+      "engines": {
+        "node": ">= 16"
+      }
+    },
+    "node_modules/vue-i18n/node_modules/@intlify/message-compiler": {
+      "version": "9.9.1",
+      "resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.9.1.tgz",
+      "integrity": "sha512-zTvP6X6HeumHOXuAE1CMMsV6tTX+opKMOxO1OHTCg5N5Sm/F7d8o2jdT6W6L5oHUsJ/vvkGefHIs7Q3hfowmsA==",
+      "dependencies": {
+        "@intlify/shared": "9.9.1",
+        "source-map-js": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 16"
+      }
+    },
+    "node_modules/vue-i18n/node_modules/@intlify/shared": {
+      "version": "9.9.1",
+      "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-9.9.1.tgz",
+      "integrity": "sha512-b3Pta1nwkz5rGq434v0psHwEwHGy1pYCttfcM22IE//K9owbpkEvFptx9VcuRAxjQdrO2If249cmDDjBu5wMDA==",
+      "engines": {
+        "node": ">= 16"
+      }
+    },
+    "node_modules/vue-router": {
+      "version": "4.2.5",
+      "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.2.5.tgz",
+      "integrity": "sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==",
+      "dependencies": {
+        "@vue/devtools-api": "^6.5.0"
+      },
+      "peerDependencies": {
+        "vue": "^3.2.0"
+      }
+    },
+    "node_modules/vue-template-compiler": {
+      "version": "2.7.16",
+      "resolved": "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz",
+      "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==",
+      "dev": true,
+      "dependencies": {
+        "de-indent": "^1.0.2",
+        "he": "^1.2.0"
+      }
+    },
+    "node_modules/vue-tsc": {
+      "version": "1.8.27",
+      "resolved": "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.8.27.tgz",
+      "integrity": "sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==",
+      "dev": true,
+      "dependencies": {
+        "@volar/typescript": "~1.11.1",
+        "@vue/language-core": "1.8.27",
+        "semver": "^7.5.4"
+      },
+      "bin": {
+        "vue-tsc": "bin/vue-tsc.js"
+      },
+      "peerDependencies": {
+        "typescript": "*"
+      }
+    },
+    "node_modules/vue-tsc/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dev": true,
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/vue-tsc/node_modules/semver": {
+      "version": "7.6.0",
+      "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.0.tgz",
+      "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+      "dev": true,
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/vue-tsc/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true
+    },
+    "node_modules/vue/node_modules/@vue/compiler-core": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.4.18.tgz",
+      "integrity": "sha512-F7YK8lMK0iv6b9/Gdk15A67wM0KKZvxDxed0RR60C1z9tIJTKta+urs4j0RTN5XqHISzI3etN3mX0uHhjmoqjQ==",
+      "dependencies": {
+        "@babel/parser": "^7.23.9",
+        "@vue/shared": "3.4.18",
+        "entities": "^4.5.0",
+        "estree-walker": "^2.0.2",
+        "source-map-js": "^1.0.2"
+      }
+    },
+    "node_modules/vue/node_modules/@vue/compiler-dom": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.4.18.tgz",
+      "integrity": "sha512-24Eb8lcMfInefvQ6YlEVS18w5Q66f4+uXWVA+yb7praKbyjHRNuKVWGuinfSSjM0ZIiPi++QWukhkgznBaqpEA==",
+      "dependencies": {
+        "@vue/compiler-core": "3.4.18",
+        "@vue/shared": "3.4.18"
+      }
+    },
+    "node_modules/vue/node_modules/@vue/compiler-sfc": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.4.18.tgz",
+      "integrity": "sha512-rG5tqtnzwrVpMqAQ7FHtvHaV70G6LLfJIWLYZB/jZ9m/hrnZmIQh+H3ewnC5onwe/ibljm9+ZupxeElzqCkTAw==",
+      "dependencies": {
+        "@babel/parser": "^7.23.9",
+        "@vue/compiler-core": "3.4.18",
+        "@vue/compiler-dom": "3.4.18",
+        "@vue/compiler-ssr": "3.4.18",
+        "@vue/shared": "3.4.18",
+        "estree-walker": "^2.0.2",
+        "magic-string": "^0.30.6",
+        "postcss": "^8.4.33",
+        "source-map-js": "^1.0.2"
+      }
+    },
+    "node_modules/vue/node_modules/@vue/compiler-ssr": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.4.18.tgz",
+      "integrity": "sha512-hSlv20oUhPxo2UYUacHgGaxtqP0tvFo6ixxxD6JlXIkwzwoZ9eKK6PFQN4hNK/R13JlNyldwWt/fqGBKgWJ6nQ==",
+      "dependencies": {
+        "@vue/compiler-dom": "3.4.18",
+        "@vue/shared": "3.4.18"
+      }
+    },
+    "node_modules/vue/node_modules/@vue/shared": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.4.18.tgz",
+      "integrity": "sha512-CxouGFxxaW5r1WbrSmWwck3No58rApXgRSBxrqgnY1K+jk20F6DrXJkHdH9n4HVT+/B6G2CAn213Uq3npWiy8Q=="
+    },
+    "node_modules/w3c-hr-time": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
+      "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
+      "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "browser-process-hrtime": "^1.0.0"
+      }
+    },
+    "node_modules/w3c-xmlserializer": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz",
+      "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "xml-name-validator": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/w3c-xmlserializer/node_modules/xml-name-validator": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
+      "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/walker": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmmirror.com/walker/-/walker-1.0.8.tgz",
+      "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "makeerror": "1.0.12"
+      }
+    },
+    "node_modules/watchpack": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.0.tgz",
+      "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
+      "peer": true,
+      "dependencies": {
+        "glob-to-regexp": "^0.4.1",
+        "graceful-fs": "^4.1.2"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
+    "node_modules/webidl-conversions": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
+      "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=10.4"
+      }
+    },
+    "node_modules/webpack": {
+      "version": "5.90.1",
+      "resolved": "https://registry.npmmirror.com/webpack/-/webpack-5.90.1.tgz",
+      "integrity": "sha512-SstPdlAC5IvgFnhiRok8hqJo/+ArAbNv7rhU4fnWGHNVfN59HSQFaxZDSAL3IFG2YmqxuRs+IU33milSxbPlog==",
+      "peer": true,
+      "dependencies": {
+        "@types/eslint-scope": "^3.7.3",
+        "@types/estree": "^1.0.5",
+        "@webassemblyjs/ast": "^1.11.5",
+        "@webassemblyjs/wasm-edit": "^1.11.5",
+        "@webassemblyjs/wasm-parser": "^1.11.5",
+        "acorn": "^8.7.1",
+        "acorn-import-assertions": "^1.9.0",
+        "browserslist": "^4.21.10",
+        "chrome-trace-event": "^1.0.2",
+        "enhanced-resolve": "^5.15.0",
+        "es-module-lexer": "^1.2.1",
+        "eslint-scope": "5.1.1",
+        "events": "^3.2.0",
+        "glob-to-regexp": "^0.4.1",
+        "graceful-fs": "^4.2.9",
+        "json-parse-even-better-errors": "^2.3.1",
+        "loader-runner": "^4.2.0",
+        "mime-types": "^2.1.27",
+        "neo-async": "^2.6.2",
+        "schema-utils": "^3.2.0",
+        "tapable": "^2.1.1",
+        "terser-webpack-plugin": "^5.3.10",
+        "watchpack": "^2.4.0",
+        "webpack-sources": "^3.2.3"
+      },
+      "bin": {
+        "webpack": "bin/webpack.js"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      },
+      "peerDependenciesMeta": {
+        "webpack-cli": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/webpack-sources": {
+      "version": "3.2.3",
+      "resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz",
+      "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
+      "peer": true,
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
+    "node_modules/webpack/node_modules/eslint-scope": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz",
+      "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+      "peer": true,
+      "dependencies": {
+        "esrecurse": "^4.3.0",
+        "estraverse": "^4.1.1"
+      },
+      "engines": {
+        "node": ">=8.0.0"
+      }
+    },
+    "node_modules/webpack/node_modules/estraverse": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz",
+      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+      "peer": true,
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
+    "node_modules/whatwg-encoding": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmmirror.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
+      "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "iconv-lite": "0.4.24"
+      }
+    },
+    "node_modules/whatwg-mimetype": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
+      "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/whatwg-url": {
+      "version": "8.7.0",
+      "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-8.7.0.tgz",
+      "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "lodash": "^4.7.0",
+        "tr46": "^2.1.0",
+        "webidl-conversions": "^6.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/which": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz",
+      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+      "dependencies": {
+        "isexe": "^2.0.0"
+      },
+      "bin": {
+        "node-which": "bin/node-which"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/which-boxed-primitive": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+      "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
+      "dev": true,
+      "dependencies": {
+        "is-bigint": "^1.0.1",
+        "is-boolean-object": "^1.1.0",
+        "is-number-object": "^1.0.4",
+        "is-string": "^1.0.5",
+        "is-symbol": "^1.0.3"
+      }
+    },
+    "node_modules/which-typed-array": {
+      "version": "1.1.14",
+      "resolved": "https://registry.npmmirror.com/which-typed-array/-/which-typed-array-1.1.14.tgz",
+      "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==",
+      "dev": true,
+      "dependencies": {
+        "available-typed-arrays": "^1.0.6",
+        "call-bind": "^1.0.5",
+        "for-each": "^0.3.3",
+        "gopd": "^1.0.1",
+        "has-tostringtag": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/wrap-ansi": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/wrap-ansi/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/wrap-ansi/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/wrap-ansi/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+    },
+    "node_modules/write-file-atomic": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
+      "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "imurmurhash": "^0.1.4",
+        "is-typedarray": "^1.0.0",
+        "signal-exit": "^3.0.2",
+        "typedarray-to-buffer": "^3.1.5"
+      }
+    },
+    "node_modules/ws": {
+      "version": "8.16.0",
+      "resolved": "https://registry.npmmirror.com/ws/-/ws-8.16.0.tgz",
+      "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==",
+      "engines": {
+        "node": ">=10.0.0"
+      },
+      "peerDependencies": {
+        "bufferutil": "^4.0.1",
+        "utf-8-validate": ">=5.0.2"
+      },
+      "peerDependenciesMeta": {
+        "bufferutil": {
+          "optional": true
+        },
+        "utf-8-validate": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/xhr": {
+      "version": "2.6.0",
+      "resolved": "https://registry.npmmirror.com/xhr/-/xhr-2.6.0.tgz",
+      "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==",
+      "dependencies": {
+        "global": "~4.4.0",
+        "is-function": "^1.0.1",
+        "parse-headers": "^2.0.0",
+        "xtend": "^4.0.0"
+      }
+    },
+    "node_modules/xml-name-validator": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
+      "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/xml-parse-from-string": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz",
+      "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g=="
+    },
+    "node_modules/xml2js": {
+      "version": "0.4.23",
+      "resolved": "https://registry.npmmirror.com/xml2js/-/xml2js-0.4.23.tgz",
+      "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==",
+      "dependencies": {
+        "sax": ">=0.6.0",
+        "xmlbuilder": "~11.0.0"
+      },
+      "engines": {
+        "node": ">=4.0.0"
+      }
+    },
+    "node_modules/xmlbuilder": {
+      "version": "11.0.1",
+      "resolved": "https://registry.npmmirror.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
+      "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
+    "node_modules/xmlchars": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/xmlchars/-/xmlchars-2.2.0.tgz",
+      "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
+      "dev": true,
+      "peer": true
+    },
+    "node_modules/xmlhttprequest": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmmirror.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
+      "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==",
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/xregexp": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/xregexp/-/xregexp-3.1.0.tgz",
+      "integrity": "sha512-4Y1x6DyB8xRoxosooa6PlGWqmmSKatbzhrftZ7Purmm4B8R4qIEJG1A2hZsdz5DhmIqS0msC0I7KEq93GphEVg=="
+    },
+    "node_modules/xtend": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz",
+      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+      "engines": {
+        "node": ">=0.4"
+      }
+    },
+    "node_modules/y18n": {
+      "version": "5.0.8",
+      "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz",
+      "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/yallist": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz",
+      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+    },
+    "node_modules/yaml": {
+      "version": "1.10.2",
+      "resolved": "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz",
+      "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/yargs": {
+      "version": "16.2.0",
+      "resolved": "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz",
+      "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+      "dev": true,
+      "peer": true,
+      "dependencies": {
+        "cliui": "^7.0.2",
+        "escalade": "^3.1.1",
+        "get-caller-file": "^2.0.5",
+        "require-directory": "^2.1.1",
+        "string-width": "^4.2.0",
+        "y18n": "^5.0.5",
+        "yargs-parser": "^20.2.2"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/yargs-parser": {
+      "version": "20.2.9",
+      "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz",
+      "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+      "dev": true,
+      "peer": true,
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/yocto-queue": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz",
+      "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+      "engines": {
+        "node": ">=10"
+      }
+    }
+  },
+  "dependencies": {
+    "@aashutoshrathi/word-wrap": {
+      "version": "1.2.6",
+      "resolved": "https://registry.npmmirror.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
+      "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA=="
+    },
+    "@ampproject/remapping": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.1.tgz",
+      "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
+      "requires": {
+        "@jridgewell/gen-mapping": "^0.3.0",
+        "@jridgewell/trace-mapping": "^0.3.9"
+      }
+    },
+    "@babel/code-frame": {
+      "version": "7.23.5",
+      "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.23.5.tgz",
+      "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
+      "requires": {
+        "@babel/highlight": "^7.23.4",
+        "chalk": "^2.4.2"
+      }
+    },
+    "@babel/compat-data": {
+      "version": "7.23.5",
+      "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.23.5.tgz",
+      "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw=="
+    },
+    "@babel/core": {
+      "version": "7.23.9",
+      "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.23.9.tgz",
+      "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==",
+      "requires": {
+        "@ampproject/remapping": "^2.2.0",
+        "@babel/code-frame": "^7.23.5",
+        "@babel/generator": "^7.23.6",
+        "@babel/helper-compilation-targets": "^7.23.6",
+        "@babel/helper-module-transforms": "^7.23.3",
+        "@babel/helpers": "^7.23.9",
+        "@babel/parser": "^7.23.9",
+        "@babel/template": "^7.23.9",
+        "@babel/traverse": "^7.23.9",
+        "@babel/types": "^7.23.9",
+        "convert-source-map": "^2.0.0",
+        "debug": "^4.1.0",
+        "gensync": "^1.0.0-beta.2",
+        "json5": "^2.2.3",
+        "semver": "^6.3.1"
+      }
+    },
+    "@babel/generator": {
+      "version": "7.23.6",
+      "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.23.6.tgz",
+      "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
+      "requires": {
+        "@babel/types": "^7.23.6",
+        "@jridgewell/gen-mapping": "^0.3.2",
+        "@jridgewell/trace-mapping": "^0.3.17",
+        "jsesc": "^2.5.1"
+      }
+    },
+    "@babel/helper-annotate-as-pure": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz",
+      "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.22.5"
+      }
+    },
+    "@babel/helper-builder-binary-assignment-operator-visitor": {
+      "version": "7.22.15",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz",
+      "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.22.15"
+      }
+    },
+    "@babel/helper-compilation-targets": {
+      "version": "7.23.6",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz",
+      "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==",
+      "requires": {
+        "@babel/compat-data": "^7.23.5",
+        "@babel/helper-validator-option": "^7.23.5",
+        "browserslist": "^4.22.2",
+        "lru-cache": "^5.1.1",
+        "semver": "^6.3.1"
+      }
+    },
+    "@babel/helper-create-class-features-plugin": {
+      "version": "7.23.10",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz",
+      "integrity": "sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.22.5",
+        "@babel/helper-environment-visitor": "^7.22.20",
+        "@babel/helper-function-name": "^7.23.0",
+        "@babel/helper-member-expression-to-functions": "^7.23.0",
+        "@babel/helper-optimise-call-expression": "^7.22.5",
+        "@babel/helper-replace-supers": "^7.22.20",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+        "@babel/helper-split-export-declaration": "^7.22.6",
+        "semver": "^6.3.1"
+      }
+    },
+    "@babel/helper-create-regexp-features-plugin": {
+      "version": "7.22.15",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz",
+      "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.22.5",
+        "regexpu-core": "^5.3.1",
+        "semver": "^6.3.1"
+      }
+    },
+    "@babel/helper-define-polyfill-provider": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz",
+      "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-compilation-targets": "^7.22.6",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "debug": "^4.1.1",
+        "lodash.debounce": "^4.0.8",
+        "resolve": "^1.14.2"
+      }
+    },
+    "@babel/helper-environment-visitor": {
+      "version": "7.22.20",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
+      "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA=="
+    },
+    "@babel/helper-function-name": {
+      "version": "7.23.0",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
+      "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
+      "requires": {
+        "@babel/template": "^7.22.15",
+        "@babel/types": "^7.23.0"
+      }
+    },
+    "@babel/helper-hoist-variables": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
+      "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
+      "requires": {
+        "@babel/types": "^7.22.5"
+      }
+    },
+    "@babel/helper-member-expression-to-functions": {
+      "version": "7.23.0",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz",
+      "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.23.0"
+      }
+    },
+    "@babel/helper-module-imports": {
+      "version": "7.22.15",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
+      "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
+      "requires": {
+        "@babel/types": "^7.22.15"
+      }
+    },
+    "@babel/helper-module-transforms": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz",
+      "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==",
+      "requires": {
+        "@babel/helper-environment-visitor": "^7.22.20",
+        "@babel/helper-module-imports": "^7.22.15",
+        "@babel/helper-simple-access": "^7.22.5",
+        "@babel/helper-split-export-declaration": "^7.22.6",
+        "@babel/helper-validator-identifier": "^7.22.20"
+      }
+    },
+    "@babel/helper-optimise-call-expression": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz",
+      "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.22.5"
+      }
+    },
+    "@babel/helper-plugin-utils": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
+      "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
+      "dev": true
+    },
+    "@babel/helper-remap-async-to-generator": {
+      "version": "7.22.20",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz",
+      "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.22.5",
+        "@babel/helper-environment-visitor": "^7.22.20",
+        "@babel/helper-wrap-function": "^7.22.20"
+      }
+    },
+    "@babel/helper-replace-supers": {
+      "version": "7.22.20",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz",
+      "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-environment-visitor": "^7.22.20",
+        "@babel/helper-member-expression-to-functions": "^7.22.15",
+        "@babel/helper-optimise-call-expression": "^7.22.5"
+      }
+    },
+    "@babel/helper-simple-access": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
+      "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
+      "requires": {
+        "@babel/types": "^7.22.5"
+      }
+    },
+    "@babel/helper-skip-transparent-expression-wrappers": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz",
+      "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.22.5"
+      }
+    },
+    "@babel/helper-split-export-declaration": {
+      "version": "7.22.6",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
+      "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
+      "requires": {
+        "@babel/types": "^7.22.5"
+      }
+    },
+    "@babel/helper-string-parser": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
+      "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ=="
+    },
+    "@babel/helper-validator-identifier": {
+      "version": "7.22.20",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+      "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A=="
+    },
+    "@babel/helper-validator-option": {
+      "version": "7.23.5",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz",
+      "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw=="
+    },
+    "@babel/helper-wrap-function": {
+      "version": "7.22.20",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz",
+      "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-function-name": "^7.22.5",
+        "@babel/template": "^7.22.15",
+        "@babel/types": "^7.22.19"
+      }
+    },
+    "@babel/helpers": {
+      "version": "7.23.9",
+      "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.23.9.tgz",
+      "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==",
+      "requires": {
+        "@babel/template": "^7.23.9",
+        "@babel/traverse": "^7.23.9",
+        "@babel/types": "^7.23.9"
+      }
+    },
+    "@babel/highlight": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.23.4.tgz",
+      "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
+      "requires": {
+        "@babel/helper-validator-identifier": "^7.22.20",
+        "chalk": "^2.4.2",
+        "js-tokens": "^4.0.0"
+      }
+    },
+    "@babel/parser": {
+      "version": "7.23.9",
+      "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.23.9.tgz",
+      "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA=="
+    },
+    "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz",
+      "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz",
+      "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+        "@babel/plugin-transform-optional-chaining": "^7.23.3"
+      }
+    },
+    "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
+      "version": "7.23.7",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz",
+      "integrity": "sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-environment-visitor": "^7.22.20",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-proposal-private-property-in-object": {
+      "version": "7.21.0-placeholder-for-preset-env.2",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
+      "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
+      "dev": true,
+      "requires": {}
+    },
+    "@babel/plugin-syntax-async-generators": {
+      "version": "7.8.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
+      "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-bigint": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
+      "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-class-properties": {
+      "version": "7.12.13",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
+      "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.12.13"
+      }
+    },
+    "@babel/plugin-syntax-class-static-block": {
+      "version": "7.14.5",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
+      "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-syntax-dynamic-import": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
+      "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-export-namespace-from": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
+      "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.3"
+      }
+    },
+    "@babel/plugin-syntax-import-assertions": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz",
+      "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-syntax-import-attributes": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz",
+      "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-syntax-import-meta": {
+      "version": "7.10.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
+      "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4"
+      }
+    },
+    "@babel/plugin-syntax-json-strings": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
+      "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-jsx": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz",
+      "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-syntax-logical-assignment-operators": {
+      "version": "7.10.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+      "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4"
+      }
+    },
+    "@babel/plugin-syntax-nullish-coalescing-operator": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+      "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-numeric-separator": {
+      "version": "7.10.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
+      "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4"
+      }
+    },
+    "@babel/plugin-syntax-object-rest-spread": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
+      "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-optional-catch-binding": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+      "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-optional-chaining": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
+      "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-private-property-in-object": {
+      "version": "7.14.5",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
+      "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-syntax-top-level-await": {
+      "version": "7.14.5",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
+      "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.14.5"
+      }
+    },
+    "@babel/plugin-syntax-typescript": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz",
+      "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-syntax-unicode-sets-regex": {
+      "version": "7.18.6",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
+      "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6"
+      }
+    },
+    "@babel/plugin-transform-arrow-functions": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz",
+      "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-transform-async-generator-functions": {
+      "version": "7.23.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz",
+      "integrity": "sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-environment-visitor": "^7.22.20",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-remap-async-to-generator": "^7.22.20",
+        "@babel/plugin-syntax-async-generators": "^7.8.4"
+      }
+    },
+    "@babel/plugin-transform-async-to-generator": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz",
+      "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-remap-async-to-generator": "^7.22.20"
+      }
+    },
+    "@babel/plugin-transform-block-scoped-functions": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz",
+      "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-transform-block-scoping": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz",
+      "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-transform-class-properties": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz",
+      "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-class-features-plugin": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-transform-class-static-block": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz",
+      "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-class-features-plugin": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-class-static-block": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-classes": {
+      "version": "7.23.8",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz",
+      "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.22.5",
+        "@babel/helper-compilation-targets": "^7.23.6",
+        "@babel/helper-environment-visitor": "^7.22.20",
+        "@babel/helper-function-name": "^7.23.0",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-replace-supers": "^7.22.20",
+        "@babel/helper-split-export-declaration": "^7.22.6",
+        "globals": "^11.1.0"
+      }
+    },
+    "@babel/plugin-transform-computed-properties": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz",
+      "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/template": "^7.22.15"
+      }
+    },
+    "@babel/plugin-transform-destructuring": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz",
+      "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-transform-dotall-regex": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz",
+      "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-regexp-features-plugin": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-transform-duplicate-keys": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz",
+      "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-transform-dynamic-import": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz",
+      "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-dynamic-import": "^7.8.3"
+      }
+    },
+    "@babel/plugin-transform-exponentiation-operator": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz",
+      "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-transform-export-namespace-from": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz",
+      "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+      }
+    },
+    "@babel/plugin-transform-for-of": {
+      "version": "7.23.6",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz",
+      "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
+      }
+    },
+    "@babel/plugin-transform-function-name": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz",
+      "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-compilation-targets": "^7.22.15",
+        "@babel/helper-function-name": "^7.23.0",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-transform-json-strings": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz",
+      "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-json-strings": "^7.8.3"
+      }
+    },
+    "@babel/plugin-transform-literals": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz",
+      "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-transform-logical-assignment-operators": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz",
+      "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+      }
+    },
+    "@babel/plugin-transform-member-expression-literals": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz",
+      "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-transform-modules-amd": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz",
+      "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-transforms": "^7.23.3",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-transform-modules-commonjs": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz",
+      "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-transforms": "^7.23.3",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-simple-access": "^7.22.5"
+      }
+    },
+    "@babel/plugin-transform-modules-systemjs": {
+      "version": "7.23.9",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz",
+      "integrity": "sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-hoist-variables": "^7.22.5",
+        "@babel/helper-module-transforms": "^7.23.3",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-validator-identifier": "^7.22.20"
+      }
+    },
+    "@babel/plugin-transform-modules-umd": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz",
+      "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-transforms": "^7.23.3",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-transform-named-capturing-groups-regex": {
+      "version": "7.22.5",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz",
+      "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-transform-new-target": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz",
+      "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-transform-nullish-coalescing-operator": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz",
+      "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
+      }
+    },
+    "@babel/plugin-transform-numeric-separator": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz",
+      "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+      }
+    },
+    "@babel/plugin-transform-object-rest-spread": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz",
+      "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==",
+      "dev": true,
+      "requires": {
+        "@babel/compat-data": "^7.23.3",
+        "@babel/helper-compilation-targets": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+        "@babel/plugin-transform-parameters": "^7.23.3"
+      }
+    },
+    "@babel/plugin-transform-object-super": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz",
+      "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-replace-supers": "^7.22.20"
+      }
+    },
+    "@babel/plugin-transform-optional-catch-binding": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz",
+      "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
+      }
+    },
+    "@babel/plugin-transform-optional-chaining": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz",
+      "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+        "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+      }
+    },
+    "@babel/plugin-transform-parameters": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz",
+      "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-transform-private-methods": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz",
+      "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-class-features-plugin": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-transform-private-property-in-object": {
+      "version": "7.23.4",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz",
+      "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.22.5",
+        "@babel/helper-create-class-features-plugin": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
+      }
+    },
+    "@babel/plugin-transform-property-literals": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz",
+      "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-transform-regenerator": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz",
+      "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "regenerator-transform": "^0.15.2"
+      }
+    },
+    "@babel/plugin-transform-reserved-words": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz",
+      "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-transform-shorthand-properties": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz",
+      "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-transform-spread": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz",
+      "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
+      }
+    },
+    "@babel/plugin-transform-sticky-regex": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz",
+      "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-transform-template-literals": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz",
+      "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-transform-typeof-symbol": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz",
+      "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-transform-typescript": {
+      "version": "7.23.6",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz",
+      "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.22.5",
+        "@babel/helper-create-class-features-plugin": "^7.23.6",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-typescript": "^7.23.3"
+      }
+    },
+    "@babel/plugin-transform-unicode-escapes": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz",
+      "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-transform-unicode-property-regex": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz",
+      "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-regexp-features-plugin": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-transform-unicode-regex": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz",
+      "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-regexp-features-plugin": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/plugin-transform-unicode-sets-regex": {
+      "version": "7.23.3",
+      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz",
+      "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-regexp-features-plugin": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      }
+    },
+    "@babel/preset-env": {
+      "version": "7.23.9",
+      "resolved": "https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.23.9.tgz",
+      "integrity": "sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A==",
+      "dev": true,
+      "requires": {
+        "@babel/compat-data": "^7.23.5",
+        "@babel/helper-compilation-targets": "^7.23.6",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-validator-option": "^7.23.5",
+        "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3",
+        "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3",
+        "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7",
+        "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
+        "@babel/plugin-syntax-async-generators": "^7.8.4",
+        "@babel/plugin-syntax-class-properties": "^7.12.13",
+        "@babel/plugin-syntax-class-static-block": "^7.14.5",
+        "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+        "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
+        "@babel/plugin-syntax-import-assertions": "^7.23.3",
+        "@babel/plugin-syntax-import-attributes": "^7.23.3",
+        "@babel/plugin-syntax-import-meta": "^7.10.4",
+        "@babel/plugin-syntax-json-strings": "^7.8.3",
+        "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
+        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+        "@babel/plugin-syntax-numeric-separator": "^7.10.4",
+        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+        "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+        "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
+        "@babel/plugin-syntax-top-level-await": "^7.14.5",
+        "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
+        "@babel/plugin-transform-arrow-functions": "^7.23.3",
+        "@babel/plugin-transform-async-generator-functions": "^7.23.9",
+        "@babel/plugin-transform-async-to-generator": "^7.23.3",
+        "@babel/plugin-transform-block-scoped-functions": "^7.23.3",
+        "@babel/plugin-transform-block-scoping": "^7.23.4",
+        "@babel/plugin-transform-class-properties": "^7.23.3",
+        "@babel/plugin-transform-class-static-block": "^7.23.4",
+        "@babel/plugin-transform-classes": "^7.23.8",
+        "@babel/plugin-transform-computed-properties": "^7.23.3",
+        "@babel/plugin-transform-destructuring": "^7.23.3",
+        "@babel/plugin-transform-dotall-regex": "^7.23.3",
+        "@babel/plugin-transform-duplicate-keys": "^7.23.3",
+        "@babel/plugin-transform-dynamic-import": "^7.23.4",
+        "@babel/plugin-transform-exponentiation-operator": "^7.23.3",
+        "@babel/plugin-transform-export-namespace-from": "^7.23.4",
+        "@babel/plugin-transform-for-of": "^7.23.6",
+        "@babel/plugin-transform-function-name": "^7.23.3",
+        "@babel/plugin-transform-json-strings": "^7.23.4",
+        "@babel/plugin-transform-literals": "^7.23.3",
+        "@babel/plugin-transform-logical-assignment-operators": "^7.23.4",
+        "@babel/plugin-transform-member-expression-literals": "^7.23.3",
+        "@babel/plugin-transform-modules-amd": "^7.23.3",
+        "@babel/plugin-transform-modules-commonjs": "^7.23.3",
+        "@babel/plugin-transform-modules-systemjs": "^7.23.9",
+        "@babel/plugin-transform-modules-umd": "^7.23.3",
+        "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5",
+        "@babel/plugin-transform-new-target": "^7.23.3",
+        "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4",
+        "@babel/plugin-transform-numeric-separator": "^7.23.4",
+        "@babel/plugin-transform-object-rest-spread": "^7.23.4",
+        "@babel/plugin-transform-object-super": "^7.23.3",
+        "@babel/plugin-transform-optional-catch-binding": "^7.23.4",
+        "@babel/plugin-transform-optional-chaining": "^7.23.4",
+        "@babel/plugin-transform-parameters": "^7.23.3",
+        "@babel/plugin-transform-private-methods": "^7.23.3",
+        "@babel/plugin-transform-private-property-in-object": "^7.23.4",
+        "@babel/plugin-transform-property-literals": "^7.23.3",
+        "@babel/plugin-transform-regenerator": "^7.23.3",
+        "@babel/plugin-transform-reserved-words": "^7.23.3",
+        "@babel/plugin-transform-shorthand-properties": "^7.23.3",
+        "@babel/plugin-transform-spread": "^7.23.3",
+        "@babel/plugin-transform-sticky-regex": "^7.23.3",
+        "@babel/plugin-transform-template-literals": "^7.23.3",
+        "@babel/plugin-transform-typeof-symbol": "^7.23.3",
+        "@babel/plugin-transform-unicode-escapes": "^7.23.3",
+        "@babel/plugin-transform-unicode-property-regex": "^7.23.3",
+        "@babel/plugin-transform-unicode-regex": "^7.23.3",
+        "@babel/plugin-transform-unicode-sets-regex": "^7.23.3",
+        "@babel/preset-modules": "0.1.6-no-external-plugins",
+        "babel-plugin-polyfill-corejs2": "^0.4.8",
+        "babel-plugin-polyfill-corejs3": "^0.9.0",
+        "babel-plugin-polyfill-regenerator": "^0.5.5",
+        "core-js-compat": "^3.31.0",
+        "semver": "^6.3.1"
+      }
+    },
+    "@babel/preset-modules": {
+      "version": "0.1.6-no-external-plugins",
+      "resolved": "https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz",
+      "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/types": "^7.4.4",
+        "esutils": "^2.0.2"
+      }
+    },
+    "@babel/regjsgen": {
+      "version": "0.8.0",
+      "resolved": "https://registry.npmmirror.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
+      "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==",
+      "dev": true
+    },
+    "@babel/runtime": {
+      "version": "7.23.9",
+      "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.23.9.tgz",
+      "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==",
+      "requires": {
+        "regenerator-runtime": "^0.14.0"
+      },
+      "dependencies": {
+        "regenerator-runtime": {
+          "version": "0.14.1",
+          "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+          "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
+        }
+      }
+    },
+    "@babel/template": {
+      "version": "7.23.9",
+      "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.23.9.tgz",
+      "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==",
+      "requires": {
+        "@babel/code-frame": "^7.23.5",
+        "@babel/parser": "^7.23.9",
+        "@babel/types": "^7.23.9"
+      }
+    },
+    "@babel/traverse": {
+      "version": "7.23.9",
+      "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.23.9.tgz",
+      "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==",
+      "requires": {
+        "@babel/code-frame": "^7.23.5",
+        "@babel/generator": "^7.23.6",
+        "@babel/helper-environment-visitor": "^7.22.20",
+        "@babel/helper-function-name": "^7.23.0",
+        "@babel/helper-hoist-variables": "^7.22.5",
+        "@babel/helper-split-export-declaration": "^7.22.6",
+        "@babel/parser": "^7.23.9",
+        "@babel/types": "^7.23.9",
+        "debug": "^4.3.1",
+        "globals": "^11.1.0"
+      }
+    },
+    "@babel/types": {
+      "version": "7.23.9",
+      "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.23.9.tgz",
+      "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==",
+      "requires": {
+        "@babel/helper-string-parser": "^7.23.4",
+        "@babel/helper-validator-identifier": "^7.22.20",
+        "to-fast-properties": "^2.0.0"
+      }
+    },
+    "@bcoe/v8-coverage": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmmirror.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
+      "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
+      "dev": true,
+      "peer": true
+    },
+    "@climblee/uv-ui": {
+      "version": "1.1.20",
+      "resolved": "https://registry.npmmirror.com/@climblee/uv-ui/-/uv-ui-1.1.20.tgz",
+      "integrity": "sha512-jkyesHJsPJkF4Nap9ZmG1/ibKlxXA5M8+ntqKXwwloIsYSYL5SOKb0gyPj17aBOU1PkJpmeiZ8PwnTolhK2/HA=="
+    },
+    "@dcloudio/types": {
+      "version": "3.4.7",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/types/-/types-3.4.7.tgz",
+      "integrity": "sha512-RuErDYDAWY3KMlACT5NhJAKPxwjFjdzt7I/n50xCBvCSnH/84CzDPDJHRmmP6c0VOfMDHmV88V+sRBvBQRSp+w=="
+    },
+    "@dcloudio/uni-app": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-app/-/uni-app-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-sf8PzXHSd/VFCn7X9+QbD4nrY21FnIwjrhyX2hFit7PZK9kpyQluqCmG7YuotuXJzsNML8c8u2O9q5FaeOyTHg==",
+      "requires": {
+        "@dcloudio/uni-cloud": "3.0.0-3081220230817001",
+        "@dcloudio/uni-components": "3.0.0-3081220230817001",
+        "@dcloudio/uni-i18n": "3.0.0-3081220230817001",
+        "@dcloudio/uni-push": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-stat": "3.0.0-3081220230817001",
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "@dcloudio/uni-app-plus": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-app-plus/-/uni-app-plus-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-GpQobx3WbcyOZ49f8JM+febzKvlthFBAxcs4xrbtNVzmkj0jLJoh9GoH37oa7m5DI1k4l5wUuwvg4/JxBbhOSA==",
+      "requires": {
+        "@dcloudio/uni-app-uts": "3.0.0-3081220230817001",
+        "@dcloudio/uni-app-vite": "3.0.0-3081220230817001",
+        "@dcloudio/uni-app-vue": "3.0.0-3081220230817001",
+        "debug": "^4.3.3",
+        "fs-extra": "^10.0.0",
+        "licia": "^1.29.0",
+        "postcss-selector-parser": "^6.0.6"
+      }
+    },
+    "@dcloudio/uni-app-uts": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-app-uts/-/uni-app-uts-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-snMFEpTw5T0TT5uFwp0piytLRB0FBRHDM5ML00E1nrzfts0XlaFKoB4UsvLySG5sE5+Xt8F5/uzKxid3mcgTLQ==",
+      "requires": {
+        "@babel/parser": "^7.16.4",
+        "@babel/types": "^7.20.7",
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-i18n": "3.0.0-3081220230817001",
+        "@dcloudio/uni-nvue-styler": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@rollup/pluginutils": "^4.2.0",
+        "@vue/compiler-core": "3.2.47",
+        "@vue/compiler-sfc": "3.2.47",
+        "@vue/shared": "3.2.47",
+        "debug": "^4.3.3",
+        "es-module-lexer": "^1.2.1",
+        "fs-extra": "^10.0.0",
+        "picocolors": "^1.0.0",
+        "source-map": "^0.6.1"
+      }
+    },
+    "@dcloudio/uni-app-vite": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-app-vite/-/uni-app-vite-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-iHmKh6hjPGh+FC6Fi4qqwT5N31QiWv9JymCLdbkOJRi71A3byDjxoH7ScSEEEg+A5AAPky6LHbmFmznPMeSwAg==",
+      "requires": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-i18n": "3.0.0-3081220230817001",
+        "@dcloudio/uni-nvue-styler": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@rollup/pluginutils": "^4.2.0",
+        "@vitejs/plugin-vue": "^4.2.1",
+        "@vue/compiler-dom": "3.2.47",
+        "@vue/compiler-sfc": "3.2.47",
+        "debug": "^4.3.3",
+        "fs-extra": "^10.0.0",
+        "picocolors": "^1.0.0"
+      }
+    },
+    "@dcloudio/uni-app-vue": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-app-vue/-/uni-app-vue-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-08ZUIn2a+OZWjqvjTbLygWZOY9YXbf2J1ns2letBI9aoMZDx+Sgx2lUFWHDksmOhvApPLKrRjJM0Hmmxi2mjJw=="
+    },
+    "@dcloudio/uni-automator": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-automator/-/uni-automator-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-boaRlUAAXsEh4aN5PbtMVvzdmvXqoEWa8eQBD4oCH36lyGgK8q75vsjLRi4LBFFwNlCNMrYepTNbBCjP+Sgt0g==",
+      "dev": true,
+      "requires": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "address": "^1.1.2",
+        "cross-env": "^7.0.3",
+        "debug": "^4.3.3",
+        "default-gateway": "^6.0.3",
+        "fs-extra": "^10.0.0",
+        "jsonc-parser": "^3.2.0",
+        "licia": "^1.29.0",
+        "qrcode-reader": "^1.0.4",
+        "qrcode-terminal": "^0.12.0",
+        "ws": "^8.4.2"
+      }
+    },
+    "@dcloudio/uni-cli-shared": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-cli-shared/-/uni-cli-shared-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-FOeydfIdKZg+MnQsHSFLXBzzmXtgCWnmEyjw3MHNN5mGwQB6+f7vK8sLw+yjizD/j71eMnh8XXCk+dV3nD/Vzg==",
+      "requires": {
+        "@ampproject/remapping": "^2.1.2",
+        "@babel/core": "^7.21.3",
+        "@babel/parser": "^7.16.4",
+        "@babel/types": "^7.20.7",
+        "@dcloudio/uni-i18n": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@intlify/core-base": "9.1.9",
+        "@intlify/shared": "9.1.9",
+        "@intlify/vue-devtools": "9.1.9",
+        "@rollup/pluginutils": "^4.2.0",
+        "@vue/compiler-core": "3.2.47",
+        "@vue/compiler-dom": "3.2.47",
+        "@vue/compiler-sfc": "3.2.47",
+        "@vue/server-renderer": "3.2.47",
+        "@vue/shared": "3.2.47",
+        "autoprefixer": "^10.4.14",
+        "base64url": "^3.0.1",
+        "chokidar": "^3.5.3",
+        "compare-versions": "^3.6.0",
+        "debug": "^4.3.3",
+        "es-module-lexer": "^1.2.1",
+        "esbuild": "^0.17.5",
+        "estree-walker": "^2.0.2",
+        "fast-glob": "^3.2.11",
+        "fs-extra": "^10.0.0",
+        "hash-sum": "^2.0.0",
+        "jsonc-parser": "^3.0.0",
+        "magic-string": "^0.30.0",
+        "merge": "^2.1.1",
+        "mime": "^3.0.0",
+        "module-alias": "^2.2.2",
+        "os-locale-s-fix": "^1.0.8-fix-1",
+        "picocolors": "^1.0.0",
+        "postcss-import": "^14.0.2",
+        "postcss-load-config": "^3.1.1",
+        "postcss-modules": "^4.3.0",
+        "postcss-selector-parser": "^6.0.6",
+        "resolve": "^1.22.1",
+        "tapable": "^2.2.0",
+        "xregexp": "3.1.0"
+      },
+      "dependencies": {
+        "@vue/reactivity": {
+          "version": "3.2.47",
+          "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.47.tgz",
+          "integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==",
+          "peer": true,
+          "requires": {
+            "@vue/shared": "3.2.47"
+          }
+        },
+        "@vue/runtime-core": {
+          "version": "3.2.47",
+          "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.47.tgz",
+          "integrity": "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==",
+          "peer": true,
+          "requires": {
+            "@vue/reactivity": "3.2.47",
+            "@vue/shared": "3.2.47"
+          }
+        },
+        "@vue/runtime-dom": {
+          "version": "3.2.47",
+          "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz",
+          "integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==",
+          "peer": true,
+          "requires": {
+            "@vue/runtime-core": "3.2.47",
+            "@vue/shared": "3.2.47",
+            "csstype": "^2.6.8"
+          }
+        },
+        "@vue/server-renderer": {
+          "version": "3.2.47",
+          "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.47.tgz",
+          "integrity": "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==",
+          "requires": {
+            "@vue/compiler-ssr": "3.2.47",
+            "@vue/shared": "3.2.47"
+          }
+        },
+        "csstype": {
+          "version": "2.6.21",
+          "resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz",
+          "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==",
+          "peer": true
+        },
+        "vue": {
+          "version": "3.2.47",
+          "resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.47.tgz",
+          "integrity": "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==",
+          "peer": true,
+          "requires": {
+            "@vue/compiler-dom": "3.2.47",
+            "@vue/compiler-sfc": "3.2.47",
+            "@vue/runtime-dom": "3.2.47",
+            "@vue/server-renderer": "3.2.47",
+            "@vue/shared": "3.2.47"
+          }
+        }
+      }
+    },
+    "@dcloudio/uni-cloud": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-cloud/-/uni-cloud-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-rrHN4PvvylrhmivAoSv4h8ZcQ3ZWHnMRXhQWPC9FBR1TInrrxrrAHuMqSZn6pTIXhCiRA3Kuy6aDNVCbt6VA+g==",
+      "requires": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-i18n": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/shared": "3.2.47",
+        "fast-glob": "^3.2.11"
+      }
+    },
+    "@dcloudio/uni-components": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-components/-/uni-components-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-FlIrTgR/9Yp8FWYfhXfLPd0jJtBwJwRBAWWmLNaufkTojm6X7rX8wQOd13n+7gJGKzfXcEV8npOYpVou4P46Pw==",
+      "requires": {
+        "@dcloudio/uni-cloud": "3.0.0-3081220230817001",
+        "@dcloudio/uni-h5": "3.0.0-3081220230817001",
+        "@dcloudio/uni-i18n": "3.0.0-3081220230817001"
+      }
+    },
+    "@dcloudio/uni-h5": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-h5/-/uni-h5-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-m2RCZpYxuAGnXlQKSQ8FGy4OlnUJJ8XMx2HNQWriDwtjDpAGDU8I2LZQZ7MHCNPIUd503y+mgU2NPlSQHnrlkQ==",
+      "requires": {
+        "@dcloudio/uni-h5-vite": "3.0.0-3081220230817001",
+        "@dcloudio/uni-h5-vue": "3.0.0-3081220230817001",
+        "@dcloudio/uni-i18n": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/server-renderer": "3.2.47",
+        "@vue/shared": "3.2.47",
+        "debug": "^4.3.3",
+        "localstorage-polyfill": "^1.0.1",
+        "postcss-selector-parser": "^6.0.6",
+        "safe-area-insets": "^1.4.1",
+        "vue-router": "^4.1.6",
+        "xmlhttprequest": "^1.8.0"
+      },
+      "dependencies": {
+        "@vue/reactivity": {
+          "version": "3.2.47",
+          "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.47.tgz",
+          "integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==",
+          "peer": true,
+          "requires": {
+            "@vue/shared": "3.2.47"
+          }
+        },
+        "@vue/runtime-core": {
+          "version": "3.2.47",
+          "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.47.tgz",
+          "integrity": "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==",
+          "peer": true,
+          "requires": {
+            "@vue/reactivity": "3.2.47",
+            "@vue/shared": "3.2.47"
+          }
+        },
+        "@vue/runtime-dom": {
+          "version": "3.2.47",
+          "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz",
+          "integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==",
+          "peer": true,
+          "requires": {
+            "@vue/runtime-core": "3.2.47",
+            "@vue/shared": "3.2.47",
+            "csstype": "^2.6.8"
+          }
+        },
+        "@vue/server-renderer": {
+          "version": "3.2.47",
+          "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.47.tgz",
+          "integrity": "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==",
+          "requires": {
+            "@vue/compiler-ssr": "3.2.47",
+            "@vue/shared": "3.2.47"
+          }
+        },
+        "csstype": {
+          "version": "2.6.21",
+          "resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz",
+          "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==",
+          "peer": true
+        },
+        "vue": {
+          "version": "3.2.47",
+          "resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.47.tgz",
+          "integrity": "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==",
+          "peer": true,
+          "requires": {
+            "@vue/compiler-dom": "3.2.47",
+            "@vue/compiler-sfc": "3.2.47",
+            "@vue/runtime-dom": "3.2.47",
+            "@vue/server-renderer": "3.2.47",
+            "@vue/shared": "3.2.47"
+          }
+        }
+      }
+    },
+    "@dcloudio/uni-h5-vite": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-h5-vite/-/uni-h5-vite-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-x7F6mUTjHiOx7+lj5yIrzhD7gr0HTNJaku5gV3O8bFjxKLcIkFkAyliKPbqJ4QZCmCCmEfJpOGKrDhk35tlibg==",
+      "requires": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@rollup/pluginutils": "^4.2.0",
+        "@vue/compiler-dom": "3.2.47",
+        "@vue/compiler-sfc": "3.2.47",
+        "@vue/server-renderer": "3.2.47",
+        "@vue/shared": "3.2.47",
+        "debug": "^4.3.3",
+        "fs-extra": "^10.0.0",
+        "mime": "^3.0.0",
+        "module-alias": "^2.2.2"
+      },
+      "dependencies": {
+        "@vue/reactivity": {
+          "version": "3.2.47",
+          "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.47.tgz",
+          "integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==",
+          "peer": true,
+          "requires": {
+            "@vue/shared": "3.2.47"
+          }
+        },
+        "@vue/runtime-core": {
+          "version": "3.2.47",
+          "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.47.tgz",
+          "integrity": "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==",
+          "peer": true,
+          "requires": {
+            "@vue/reactivity": "3.2.47",
+            "@vue/shared": "3.2.47"
+          }
+        },
+        "@vue/runtime-dom": {
+          "version": "3.2.47",
+          "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz",
+          "integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==",
+          "peer": true,
+          "requires": {
+            "@vue/runtime-core": "3.2.47",
+            "@vue/shared": "3.2.47",
+            "csstype": "^2.6.8"
+          }
+        },
+        "@vue/server-renderer": {
+          "version": "3.2.47",
+          "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.47.tgz",
+          "integrity": "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==",
+          "requires": {
+            "@vue/compiler-ssr": "3.2.47",
+            "@vue/shared": "3.2.47"
+          }
+        },
+        "csstype": {
+          "version": "2.6.21",
+          "resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz",
+          "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==",
+          "peer": true
+        },
+        "vue": {
+          "version": "3.2.47",
+          "resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.47.tgz",
+          "integrity": "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==",
+          "peer": true,
+          "requires": {
+            "@vue/compiler-dom": "3.2.47",
+            "@vue/compiler-sfc": "3.2.47",
+            "@vue/runtime-dom": "3.2.47",
+            "@vue/server-renderer": "3.2.47",
+            "@vue/shared": "3.2.47"
+          }
+        }
+      }
+    },
+    "@dcloudio/uni-h5-vue": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-h5-vue/-/uni-h5-vue-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-q1eFoXb5/4whNIJ1CumKmeypPjZofw8xDQRHZeGZ7NVRQ0/MYnEm6A0n/vkmEo1IgTZIY83m/jr6RNg7a9Ko/A==",
+      "requires": {
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/server-renderer": "3.2.47"
+      },
+      "dependencies": {
+        "@vue/reactivity": {
+          "version": "3.2.47",
+          "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.47.tgz",
+          "integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==",
+          "peer": true,
+          "requires": {
+            "@vue/shared": "3.2.47"
+          }
+        },
+        "@vue/runtime-core": {
+          "version": "3.2.47",
+          "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.47.tgz",
+          "integrity": "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==",
+          "peer": true,
+          "requires": {
+            "@vue/reactivity": "3.2.47",
+            "@vue/shared": "3.2.47"
+          }
+        },
+        "@vue/runtime-dom": {
+          "version": "3.2.47",
+          "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz",
+          "integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==",
+          "peer": true,
+          "requires": {
+            "@vue/runtime-core": "3.2.47",
+            "@vue/shared": "3.2.47",
+            "csstype": "^2.6.8"
+          }
+        },
+        "@vue/server-renderer": {
+          "version": "3.2.47",
+          "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.47.tgz",
+          "integrity": "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==",
+          "requires": {
+            "@vue/compiler-ssr": "3.2.47",
+            "@vue/shared": "3.2.47"
+          }
+        },
+        "csstype": {
+          "version": "2.6.21",
+          "resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz",
+          "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==",
+          "peer": true
+        },
+        "vue": {
+          "version": "3.2.47",
+          "resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.47.tgz",
+          "integrity": "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==",
+          "peer": true,
+          "requires": {
+            "@vue/compiler-dom": "3.2.47",
+            "@vue/compiler-sfc": "3.2.47",
+            "@vue/runtime-dom": "3.2.47",
+            "@vue/server-renderer": "3.2.47",
+            "@vue/shared": "3.2.47"
+          }
+        }
+      }
+    },
+    "@dcloudio/uni-i18n": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-i18n/-/uni-i18n-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-ooAIoNCy+DPlMtA4k9eoaJJsYQtici85le+ietIIzLdJoa2YUnudYv9CvG9Mw/RsKQI+MLl96ADAPgUpGzounw=="
+    },
+    "@dcloudio/uni-mp-alipay": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-alipay/-/uni-mp-alipay-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-lZR2u8sxJ/ZaDqaxEmGzgWWKHcjnLGedDTrMh8kOEPLHO6THVNe5TP6XeiTcE0HKJfWEXv6X13erjn0FCstz3A==",
+      "requires": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vite": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vue": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/compiler-core": "3.2.47",
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "@dcloudio/uni-mp-baidu": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-baidu/-/uni-mp-baidu-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-FYwK1AqSc+NvtvaCia/fOP57ELx5O5icHjuwPKMsJv5eGtqlwhXzyvSCoGEFyYQcsWP9ZqYSb3fTuxVlbiEYdA==",
+      "requires": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-compiler": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vite": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vue": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-weixin": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/compiler-core": "3.2.47",
+        "@vue/shared": "3.2.47",
+        "jimp": "^0.10.1",
+        "licia": "^1.29.0",
+        "qrcode-reader": "^1.0.4",
+        "qrcode-terminal": "^0.12.0",
+        "ws": "^8.4.2"
+      }
+    },
+    "@dcloudio/uni-mp-compiler": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-compiler/-/uni-mp-compiler-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-KDfwEr9jFNSkNbYmdDc+zfGuZwXGkz3bW3c4cuV44IncTf/UW2m594Z2UzhJkx/p662aQ2W9M4BFZ0o5QSfQDw==",
+      "requires": {
+        "@babel/generator": "^7.20.5",
+        "@babel/parser": "^7.16.4",
+        "@babel/types": "^7.20.7",
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/compiler-core": "3.2.47",
+        "@vue/compiler-dom": "3.2.47",
+        "@vue/shared": "3.2.47",
+        "estree-walker": "^2.0.2"
+      }
+    },
+    "@dcloudio/uni-mp-jd": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-jd/-/uni-mp-jd-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-sKDppXhk7k8Euce9v7ItQ2cs3+XpQV/DX8FjXzfO9DfjQEKiR/Pyfis7e3ANQrF4V/W3uwK5wgN/PyI3/NRloQ==",
+      "requires": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-compiler": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vite": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vue": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "@dcloudio/uni-mp-kuaishou": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-kuaishou/-/uni-mp-kuaishou-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-wYXwoxcdms8PviNsKg2Y9oqHawKqseoD97sYs94RLDVSnyO9c6NOoUMsYjXwIZXt05E56bJ9EbxDqYDwwJhEKw==",
+      "requires": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-compiler": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vite": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vue": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-weixin": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/compiler-core": "3.2.47",
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "@dcloudio/uni-mp-lark": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-lark/-/uni-mp-lark-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-4aHwULp+Nx55BoJvj1jCXWnVJrzl0ACEbDlXVvxmNUI5tkqn2kYL4AZgrXP1vCx8MHKVPI4E34Z+lrBTfSfKMA==",
+      "requires": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-compiler": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-toutiao": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vite": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vue": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/compiler-core": "3.2.47",
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "@dcloudio/uni-mp-qq": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-qq/-/uni-mp-qq-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-StSsxCCKMdZCghUZ+wdX1otCmlYkIV+O2Z/AxMv772HfIKlpDp44PPaxlKBG4L6+X7h2JsCvyZW1iSznM5A3CQ==",
+      "requires": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vite": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vue": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/shared": "3.2.47",
+        "fs-extra": "^10.0.0"
+      }
+    },
+    "@dcloudio/uni-mp-toutiao": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-toutiao/-/uni-mp-toutiao-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-ZMSNNjQpCV4z+76OA8rDKKhqr+vQmTvKNUOzKfND5KPYhgWbqviEBZ8ptiDT5gaWXMpkUHNfWz32hdi5CLbj5Q==",
+      "requires": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-compiler": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vite": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vue": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/compiler-core": "3.2.47",
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "@dcloudio/uni-mp-vite": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-vite/-/uni-mp-vite-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-jmEbsVOJ1dlj46QiSFMB2C3zbgGivkGf1KXoPTAprv0WZrkmjF1uNLj0pHFOOUnnyHwHPViEApsMOPS4twIjIQ==",
+      "requires": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-i18n": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-compiler": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vue": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/compiler-sfc": "3.2.47",
+        "@vue/shared": "3.2.47",
+        "debug": "^4.3.3"
+      }
+    },
+    "@dcloudio/uni-mp-vue": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-vue/-/uni-mp-vue-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-EfdTH6+qGXRh3402+psl8X4K34/gHfBPaMfxbwMsne1rGnB8ZVXiN73gVXKfCWeznvJqdWuTWmmjqaLoBhjOjA==",
+      "requires": {
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "@dcloudio/uni-mp-weixin": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-mp-weixin/-/uni-mp-weixin-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-vo2k8OaWFOvoXuRX83UCR0AOOKXXwjRDIOX0y/jUC9TX63Ne5OTdRKH9253D9109FrwtrtsUWqnpfn1ynKXl9g==",
+      "requires": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vite": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vue": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/shared": "3.2.47",
+        "jimp": "^0.10.1",
+        "licia": "^1.29.0",
+        "qrcode-reader": "^1.0.4",
+        "qrcode-terminal": "^0.12.0",
+        "ws": "^8.4.2"
+      }
+    },
+    "@dcloudio/uni-nvue-styler": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-nvue-styler/-/uni-nvue-styler-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-EImnyrYHmAc7ibKfIMkBG1uMavS5sPdrtQj52m40o/QNU5kcsqUk2Od9c1ULkQloxhmK2E4FZvXo4cgszE/Txw==",
+      "requires": {
+        "@vue/shared": "3.2.47",
+        "parse-css-font": "^4.0.0",
+        "postcss": "^8.4.23"
+      }
+    },
+    "@dcloudio/uni-push": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-push/-/uni-push-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-1IyVJlBnZVVvY49SQKpZG5Oxak5Wl51NvYEozuYoeBaaTeZObm7B6eyd722sXi0Dd6N1sE3kIdm/XReprK53eg==",
+      "requires": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001"
+      }
+    },
+    "@dcloudio/uni-quickapp-webview": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-quickapp-webview/-/uni-quickapp-webview-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-w6yitVyCKEFSO+UDsJPjc5RfAstIdOEbBHgim0gInTfOl90odmyUPKDxWhwQgS5vqezBXpCj0/6ywVMHvZu+7A==",
+      "requires": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vite": "3.0.0-3081220230817001",
+        "@dcloudio/uni-mp-vue": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "@dcloudio/uni-shared": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-shared/-/uni-shared-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-NI1pBO40VqvnWjwNXad3CqrUYvr4ffGjiDMgJGMP13rgOEAqamU7ozBimoASDVPKyyfSHTeuYuh0gtaaLu4CsQ==",
+      "requires": {
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "@dcloudio/uni-stacktracey": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-stacktracey/-/uni-stacktracey-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-DUTTN8JWXxjO3ryz7uhD3+vazHVMflln15+r0ycWBjXO0p0MepRY3gX5gKCyiq9D3NUIxazcFAUJ6agFVUbDog==",
+      "dev": true
+    },
+    "@dcloudio/uni-stat": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-stat/-/uni-stat-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-xpbsor5WKU1eCbo0dmQ0hBUX6RrdG7DNDzCSD6oimndIXVGLkFhWrIC3brQ7S1G2GQvXdXnXJpUVskI3qNe/uw==",
+      "requires": {
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "debug": "^4.3.3"
+      }
+    },
+    "@dcloudio/uni-ui": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/uni-ui/-/uni-ui-1.5.0.tgz",
+      "integrity": "sha512-E7D37VbRZeh1E2yzrIie8psBckIrErdkUbUA751rlG8zdioGovW3zOuUsKgY+Gh7csMvi6XMEoSacvboe8o4Gw=="
+    },
+    "@dcloudio/vite-plugin-uni": {
+      "version": "3.0.0-3081220230817001",
+      "resolved": "https://registry.npmmirror.com/@dcloudio/vite-plugin-uni/-/vite-plugin-uni-3.0.0-3081220230817001.tgz",
+      "integrity": "sha512-dLeqqyrNNUBTZfI0ppPk4YoD+DBI0gJLeTjpN6bK5i3nFKkju9g2K6IWl62YMObjTiXwQF8qAEDb+fyWoe4Ksw==",
+      "dev": true,
+      "requires": {
+        "@babel/core": "^7.21.3",
+        "@babel/plugin-syntax-import-meta": "^7.10.4",
+        "@babel/plugin-transform-typescript": "^7.20.7",
+        "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+        "@dcloudio/uni-shared": "3.0.0-3081220230817001",
+        "@rollup/pluginutils": "^4.2.0",
+        "@vitejs/plugin-legacy": "^4.0.3",
+        "@vitejs/plugin-vue": "^4.2.1",
+        "@vitejs/plugin-vue-jsx": "^3.0.1",
+        "@vue/compiler-core": "3.2.47",
+        "@vue/compiler-dom": "3.2.47",
+        "@vue/compiler-sfc": "3.2.47",
+        "@vue/shared": "3.2.47",
+        "cac": "6.7.9",
+        "debug": "^4.3.3",
+        "estree-walker": "^2.0.2",
+        "express": "^4.17.1",
+        "fast-glob": "^3.2.11",
+        "fs-extra": "^10.0.0",
+        "hash-sum": "^2.0.0",
+        "jsonc-parser": "^3.0.0",
+        "magic-string": "^0.30.0",
+        "picocolors": "^1.0.0",
+        "terser": "^5.4.0"
+      }
+    },
+    "@esbuild/win32-x64": {
+      "version": "0.17.19",
+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz",
+      "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==",
+      "optional": true
+    },
+    "@eslint-community/eslint-utils": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmmirror.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+      "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+      "requires": {
+        "eslint-visitor-keys": "^3.3.0"
+      }
+    },
+    "@eslint-community/regexpp": {
+      "version": "4.10.0",
+      "resolved": "https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
+      "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA=="
+    },
+    "@eslint/eslintrc": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+      "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+      "requires": {
+        "ajv": "^6.12.4",
+        "debug": "^4.3.2",
+        "espree": "^9.6.0",
+        "globals": "^13.19.0",
+        "ignore": "^5.2.0",
+        "import-fresh": "^3.2.1",
+        "js-yaml": "^4.1.0",
+        "minimatch": "^3.1.2",
+        "strip-json-comments": "^3.1.1"
+      },
+      "dependencies": {
+        "brace-expansion": {
+          "version": "1.1.11",
+          "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz",
+          "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+          "requires": {
+            "balanced-match": "^1.0.0",
+            "concat-map": "0.0.1"
+          }
+        },
+        "globals": {
+          "version": "13.24.0",
+          "resolved": "https://registry.npmmirror.com/globals/-/globals-13.24.0.tgz",
+          "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+          "requires": {
+            "type-fest": "^0.20.2"
+          }
+        },
+        "minimatch": {
+          "version": "3.1.2",
+          "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz",
+          "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+          "requires": {
+            "brace-expansion": "^1.1.7"
+          }
+        },
+        "type-fest": {
+          "version": "0.20.2",
+          "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz",
+          "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="
+        }
+      }
+    },
+    "@eslint/js": {
+      "version": "8.56.0",
+      "resolved": "https://registry.npmmirror.com/@eslint/js/-/js-8.56.0.tgz",
+      "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A=="
+    },
+    "@humanwhocodes/config-array": {
+      "version": "0.11.14",
+      "resolved": "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
+      "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
+      "requires": {
+        "@humanwhocodes/object-schema": "^2.0.2",
+        "debug": "^4.3.1",
+        "minimatch": "^3.0.5"
+      },
+      "dependencies": {
+        "brace-expansion": {
+          "version": "1.1.11",
+          "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz",
+          "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+          "requires": {
+            "balanced-match": "^1.0.0",
+            "concat-map": "0.0.1"
+          }
+        },
+        "minimatch": {
+          "version": "3.1.2",
+          "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz",
+          "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+          "requires": {
+            "brace-expansion": "^1.1.7"
+          }
+        }
+      }
+    },
+    "@humanwhocodes/module-importer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+      "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="
+    },
+    "@humanwhocodes/object-schema": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz",
+      "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw=="
+    },
+    "@intlify/core-base": {
+      "version": "9.1.9",
+      "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.1.9.tgz",
+      "integrity": "sha512-x5T0p/Ja0S8hs5xs+ImKyYckVkL4CzcEXykVYYV6rcbXxJTe2o58IquSqX9bdncVKbRZP7GlBU1EcRaQEEJ+vw==",
+      "requires": {
+        "@intlify/devtools-if": "9.1.9",
+        "@intlify/message-compiler": "9.1.9",
+        "@intlify/message-resolver": "9.1.9",
+        "@intlify/runtime": "9.1.9",
+        "@intlify/shared": "9.1.9",
+        "@intlify/vue-devtools": "9.1.9"
+      }
+    },
+    "@intlify/devtools-if": {
+      "version": "9.1.9",
+      "resolved": "https://registry.npmmirror.com/@intlify/devtools-if/-/devtools-if-9.1.9.tgz",
+      "integrity": "sha512-oKSMKjttG3Ut/1UGEZjSdghuP3fwA15zpDPcjkf/1FjlOIm6uIBGMNS5jXzsZy593u+P/YcnrZD6cD3IVFz9vQ==",
+      "requires": {
+        "@intlify/shared": "9.1.9"
+      }
+    },
+    "@intlify/message-compiler": {
+      "version": "9.1.9",
+      "resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.1.9.tgz",
+      "integrity": "sha512-6YgCMF46Xd0IH2hMRLCssZI3gFG4aywidoWQ3QP4RGYQXQYYfFC54DxhSgfIPpVoPLQ+4AD29eoYmhiHZ+qLFQ==",
+      "requires": {
+        "@intlify/message-resolver": "9.1.9",
+        "@intlify/shared": "9.1.9",
+        "source-map": "0.6.1"
+      }
+    },
+    "@intlify/message-resolver": {
+      "version": "9.1.9",
+      "resolved": "https://registry.npmmirror.com/@intlify/message-resolver/-/message-resolver-9.1.9.tgz",
+      "integrity": "sha512-Lx/DBpigeK0sz2BBbzv5mu9/dAlt98HxwbG7xLawC3O2xMF9MNWU5FtOziwYG6TDIjNq0O/3ZbOJAxwITIWXEA=="
+    },
+    "@intlify/runtime": {
+      "version": "9.1.9",
+      "resolved": "https://registry.npmmirror.com/@intlify/runtime/-/runtime-9.1.9.tgz",
+      "integrity": "sha512-XgPw8+UlHCiie3fI41HPVa/VDJb3/aSH7bLhY1hJvlvNV713PFtb4p4Jo+rlE0gAoMsMCGcsiT982fImolSltg==",
+      "requires": {
+        "@intlify/message-compiler": "9.1.9",
+        "@intlify/message-resolver": "9.1.9",
+        "@intlify/shared": "9.1.9"
+      }
+    },
+    "@intlify/shared": {
+      "version": "9.1.9",
+      "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-9.1.9.tgz",
+      "integrity": "sha512-xKGM1d0EAxdDFCWedcYXOm6V5Pfw/TMudd6/qCdEb4tv0hk9EKeg7lwQF1azE0dP2phvx0yXxrt7UQK+IZjNdw=="
+    },
+    "@intlify/vue-devtools": {
+      "version": "9.1.9",
+      "resolved": "https://registry.npmmirror.com/@intlify/vue-devtools/-/vue-devtools-9.1.9.tgz",
+      "integrity": "sha512-YPehH9uL4vZcGXky4Ev5qQIITnHKIvsD2GKGXgqf+05osMUI6WSEQHaN9USRa318Rs8RyyPCiDfmA0hRu3k7og==",
+      "requires": {
+        "@intlify/message-resolver": "9.1.9",
+        "@intlify/runtime": "9.1.9",
+        "@intlify/shared": "9.1.9"
+      }
+    },
+    "@istanbuljs/load-nyc-config": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
+      "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "camelcase": "^5.3.1",
+        "find-up": "^4.1.0",
+        "get-package-type": "^0.1.0",
+        "js-yaml": "^3.13.1",
+        "resolve-from": "^5.0.0"
+      },
+      "dependencies": {
+        "argparse": {
+          "version": "1.0.10",
+          "resolved": "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz",
+          "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "sprintf-js": "~1.0.2"
+          }
+        },
+        "camelcase": {
+          "version": "5.3.1",
+          "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz",
+          "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+          "dev": true,
+          "peer": true
+        },
+        "find-up": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz",
+          "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "locate-path": "^5.0.0",
+            "path-exists": "^4.0.0"
+          }
+        },
+        "js-yaml": {
+          "version": "3.14.1",
+          "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz",
+          "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "argparse": "^1.0.7",
+            "esprima": "^4.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz",
+          "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "p-locate": "^4.1.0"
+          }
+        },
+        "p-limit": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz",
+          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "p-try": "^2.0.0"
+          }
+        },
+        "p-locate": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz",
+          "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "p-limit": "^2.2.0"
+          }
+        },
+        "resolve-from": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-5.0.0.tgz",
+          "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+          "dev": true,
+          "peer": true
+        }
+      }
+    },
+    "@istanbuljs/schema": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmmirror.com/@istanbuljs/schema/-/schema-0.1.3.tgz",
+      "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
+      "dev": true,
+      "peer": true
+    },
+    "@jest/console": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/@jest/console/-/console-27.5.1.tgz",
+      "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@jest/types": "^27.5.1",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "jest-message-util": "^27.5.1",
+        "jest-util": "^27.5.1",
+        "slash": "^3.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "peer": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "peer": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "@jest/core": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/@jest/core/-/core-27.5.1.tgz",
+      "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@jest/console": "^27.5.1",
+        "@jest/reporters": "^27.5.1",
+        "@jest/test-result": "^27.5.1",
+        "@jest/transform": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "@types/node": "*",
+        "ansi-escapes": "^4.2.1",
+        "chalk": "^4.0.0",
+        "emittery": "^0.8.1",
+        "exit": "^0.1.2",
+        "graceful-fs": "^4.2.9",
+        "jest-changed-files": "^27.5.1",
+        "jest-config": "^27.5.1",
+        "jest-haste-map": "^27.5.1",
+        "jest-message-util": "^27.5.1",
+        "jest-regex-util": "^27.5.1",
+        "jest-resolve": "^27.5.1",
+        "jest-resolve-dependencies": "^27.5.1",
+        "jest-runner": "^27.5.1",
+        "jest-runtime": "^27.5.1",
+        "jest-snapshot": "^27.5.1",
+        "jest-util": "^27.5.1",
+        "jest-validate": "^27.5.1",
+        "jest-watcher": "^27.5.1",
+        "micromatch": "^4.0.4",
+        "rimraf": "^3.0.0",
+        "slash": "^3.0.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "peer": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "peer": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "@jest/environment": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/@jest/environment/-/environment-27.5.1.tgz",
+      "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@jest/fake-timers": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "@types/node": "*",
+        "jest-mock": "^27.5.1"
+      }
+    },
+    "@jest/fake-timers": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz",
+      "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@jest/types": "^27.5.1",
+        "@sinonjs/fake-timers": "^8.0.1",
+        "@types/node": "*",
+        "jest-message-util": "^27.5.1",
+        "jest-mock": "^27.5.1",
+        "jest-util": "^27.5.1"
+      }
+    },
+    "@jest/globals": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/@jest/globals/-/globals-27.5.1.tgz",
+      "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@jest/environment": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "expect": "^27.5.1"
+      }
+    },
+    "@jest/reporters": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/@jest/reporters/-/reporters-27.5.1.tgz",
+      "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@bcoe/v8-coverage": "^0.2.3",
+        "@jest/console": "^27.5.1",
+        "@jest/test-result": "^27.5.1",
+        "@jest/transform": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "collect-v8-coverage": "^1.0.0",
+        "exit": "^0.1.2",
+        "glob": "^7.1.2",
+        "graceful-fs": "^4.2.9",
+        "istanbul-lib-coverage": "^3.0.0",
+        "istanbul-lib-instrument": "^5.1.0",
+        "istanbul-lib-report": "^3.0.0",
+        "istanbul-lib-source-maps": "^4.0.0",
+        "istanbul-reports": "^3.1.3",
+        "jest-haste-map": "^27.5.1",
+        "jest-resolve": "^27.5.1",
+        "jest-util": "^27.5.1",
+        "jest-worker": "^27.5.1",
+        "slash": "^3.0.0",
+        "source-map": "^0.6.0",
+        "string-length": "^4.0.1",
+        "terminal-link": "^2.0.0",
+        "v8-to-istanbul": "^8.1.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "peer": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "peer": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "@jest/source-map": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/@jest/source-map/-/source-map-27.5.1.tgz",
+      "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "callsites": "^3.0.0",
+        "graceful-fs": "^4.2.9",
+        "source-map": "^0.6.0"
+      }
+    },
+    "@jest/test-result": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/@jest/test-result/-/test-result-27.5.1.tgz",
+      "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@jest/console": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "collect-v8-coverage": "^1.0.0"
+      }
+    },
+    "@jest/test-sequencer": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz",
+      "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@jest/test-result": "^27.5.1",
+        "graceful-fs": "^4.2.9",
+        "jest-haste-map": "^27.5.1",
+        "jest-runtime": "^27.5.1"
+      }
+    },
+    "@jest/transform": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/@jest/transform/-/transform-27.5.1.tgz",
+      "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@babel/core": "^7.1.0",
+        "@jest/types": "^27.5.1",
+        "babel-plugin-istanbul": "^6.1.1",
+        "chalk": "^4.0.0",
+        "convert-source-map": "^1.4.0",
+        "fast-json-stable-stringify": "^2.0.0",
+        "graceful-fs": "^4.2.9",
+        "jest-haste-map": "^27.5.1",
+        "jest-regex-util": "^27.5.1",
+        "jest-util": "^27.5.1",
+        "micromatch": "^4.0.4",
+        "pirates": "^4.0.4",
+        "slash": "^3.0.0",
+        "source-map": "^0.6.1",
+        "write-file-atomic": "^3.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "peer": true
+        },
+        "convert-source-map": {
+          "version": "1.9.0",
+          "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.9.0.tgz",
+          "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+          "dev": true,
+          "peer": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "peer": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "@jest/types": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/@jest/types/-/types-27.5.1.tgz",
+      "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "@types/istanbul-reports": "^3.0.0",
+        "@types/node": "*",
+        "@types/yargs": "^16.0.0",
+        "chalk": "^4.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "peer": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "peer": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "@jimp/bmp": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/bmp/-/bmp-0.10.3.tgz",
+      "integrity": "sha512-keMOc5woiDmONXsB/6aXLR4Z5Q+v8lFq3EY2rcj2FmstbDMhRuGbmcBxlEgOqfRjwvtf/wOtJ3Of37oAWtVfLg==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "bmp-js": "^0.1.0",
+        "core-js": "^3.4.1"
+      }
+    },
+    "@jimp/core": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/core/-/core-0.10.3.tgz",
+      "integrity": "sha512-Gd5IpL3U2bFIO57Fh/OA3HCpWm4uW/pU01E75rI03BXfTdz3T+J7TwvyG1XaqsQ7/DSlS99GXtLQPlfFIe28UA==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "any-base": "^1.1.0",
+        "buffer": "^5.2.0",
+        "core-js": "^3.4.1",
+        "exif-parser": "^0.1.12",
+        "file-type": "^9.0.0",
+        "load-bmfont": "^1.3.1",
+        "mkdirp": "^0.5.1",
+        "phin": "^2.9.1",
+        "pixelmatch": "^4.0.2",
+        "tinycolor2": "^1.4.1"
+      }
+    },
+    "@jimp/custom": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/custom/-/custom-0.10.3.tgz",
+      "integrity": "sha512-nZmSI+jwTi5IRyNLbKSXQovoeqsw+D0Jn0SxW08wYQvdkiWA8bTlDQFgQ7HVwCAKBm8oKkDB/ZEo9qvHJ+1gAQ==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/core": "^0.10.3",
+        "core-js": "^3.4.1"
+      }
+    },
+    "@jimp/gif": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/gif/-/gif-0.10.3.tgz",
+      "integrity": "sha512-vjlRodSfz1CrUvvrnUuD/DsLK1GHB/yDZXHthVdZu23zYJIW7/WrIiD1IgQ5wOMV7NocfrvPn2iqUfBP81/WWA==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1",
+        "omggif": "^1.0.9"
+      }
+    },
+    "@jimp/jpeg": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/jpeg/-/jpeg-0.10.3.tgz",
+      "integrity": "sha512-AAANwgUZOt6f6P7LZxY9lyJ9xclqutYJlsxt3JbriXUGJgrrFAIkcKcqv1nObgmQASSAQKYaMV9KdHjMlWFKlQ==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1",
+        "jpeg-js": "^0.3.4"
+      }
+    },
+    "@jimp/plugin-blit": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-blit/-/plugin-blit-0.10.3.tgz",
+      "integrity": "sha512-5zlKlCfx4JWw9qUVC7GI4DzXyxDWyFvgZLaoGFoT00mlXlN75SarlDwc9iZ/2e2kp4bJWxz3cGgG4G/WXrbg3Q==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      }
+    },
+    "@jimp/plugin-blur": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-blur/-/plugin-blur-0.10.3.tgz",
+      "integrity": "sha512-cTOK3rjh1Yjh23jSfA6EHCHjsPJDEGLC8K2y9gM7dnTUK1y9NNmkFS23uHpyjgsWFIoH9oRh2SpEs3INjCpZhQ==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      }
+    },
+    "@jimp/plugin-circle": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-circle/-/plugin-circle-0.10.3.tgz",
+      "integrity": "sha512-51GAPIVelqAcfuUpaM5JWJ0iWl4vEjNXB7p4P7SX5udugK5bxXUjO6KA2qgWmdpHuCKtoNgkzWU9fNSuYp7tCA==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      }
+    },
+    "@jimp/plugin-color": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-color/-/plugin-color-0.10.3.tgz",
+      "integrity": "sha512-RgeHUElmlTH7vpI4WyQrz6u59spiKfVQbsG/XUzfWGamFSixa24ZDwX/yV/Ts+eNaz7pZeIuv533qmKPvw2ujg==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1",
+        "tinycolor2": "^1.4.1"
+      }
+    },
+    "@jimp/plugin-contain": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-contain/-/plugin-contain-0.10.3.tgz",
+      "integrity": "sha512-bYJKW9dqzcB0Ihc6u7jSyKa3juStzbLs2LFr6fu8TzA2WkMS/R8h+ddkiO36+F9ILTWHP0CIA3HFe5OdOGcigw==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      }
+    },
+    "@jimp/plugin-cover": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-cover/-/plugin-cover-0.10.3.tgz",
+      "integrity": "sha512-pOxu0cM0BRPzdV468n4dMocJXoMbTnARDY/EpC3ZW15SpMuc/dr1KhWQHgoQX5kVW1Wt8zgqREAJJCQ5KuPKDA==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      }
+    },
+    "@jimp/plugin-crop": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-crop/-/plugin-crop-0.10.3.tgz",
+      "integrity": "sha512-nB7HgOjjl9PgdHr076xZ3Sr6qHYzeBYBs9qvs3tfEEUeYMNnvzgCCGtUl6eMakazZFCMk3mhKmcB9zQuHFOvkg==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      }
+    },
+    "@jimp/plugin-displace": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-displace/-/plugin-displace-0.10.3.tgz",
+      "integrity": "sha512-8t3fVKCH5IVqI4lewe4lFFjpxxr69SQCz5/tlpDLQZsrNScNJivHdQ09zljTrVTCSgeCqQJIKgH2Q7Sk/pAZ0w==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      }
+    },
+    "@jimp/plugin-dither": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-dither/-/plugin-dither-0.10.3.tgz",
+      "integrity": "sha512-JCX/oNSnEg1kGQ8ffZ66bEgQOLCY3Rn+lrd6v1jjLy/mn9YVZTMsxLtGCXpiCDC2wG/KTmi4862ysmP9do9dAQ==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      }
+    },
+    "@jimp/plugin-fisheye": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-fisheye/-/plugin-fisheye-0.10.3.tgz",
+      "integrity": "sha512-RRZb1wqe+xdocGcFtj2xHU7sF7xmEZmIa6BmrfSchjyA2b32TGPWKnP3qyj7p6LWEsXn+19hRYbjfyzyebPElQ==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      }
+    },
+    "@jimp/plugin-flip": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-flip/-/plugin-flip-0.10.3.tgz",
+      "integrity": "sha512-0epbi8XEzp0wmSjoW9IB0iMu0yNF17aZOxLdURCN3Zr+8nWPs5VNIMqSVa1Y62GSyiMDpVpKF/ITiXre+EqrPg==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      }
+    },
+    "@jimp/plugin-gaussian": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-gaussian/-/plugin-gaussian-0.10.3.tgz",
+      "integrity": "sha512-25eHlFbHUDnMMGpgRBBeQ2AMI4wsqCg46sue0KklI+c2BaZ+dGXmJA5uT8RTOrt64/K9Wz5E+2n7eBnny4dfpQ==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      }
+    },
+    "@jimp/plugin-invert": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-invert/-/plugin-invert-0.10.3.tgz",
+      "integrity": "sha512-effYSApWY/FbtlzqsKXlTLkgloKUiHBKjkQnqh5RL4oQxh/33j6aX+HFdDyQKtsXb8CMd4xd7wyiD2YYabTa0g==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      }
+    },
+    "@jimp/plugin-mask": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-mask/-/plugin-mask-0.10.3.tgz",
+      "integrity": "sha512-twrg8q8TIhM9Z6Jcu9/5f+OCAPaECb0eKrrbbIajJqJ3bCUlj5zbfgIhiQIzjPJ6KjpnFPSqHQfHkU1Vvk/nVw==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      }
+    },
+    "@jimp/plugin-normalize": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-normalize/-/plugin-normalize-0.10.3.tgz",
+      "integrity": "sha512-xkb5eZI/mMlbwKkDN79+1/t/+DBo8bBXZUMsT4gkFgMRKNRZ6NQPxlv1d3QpRzlocsl6UMxrHnhgnXdLAcgrXw==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      }
+    },
+    "@jimp/plugin-print": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-print/-/plugin-print-0.10.3.tgz",
+      "integrity": "sha512-wjRiI6yjXsAgMe6kVjizP+RgleUCLkH256dskjoNvJzmzbEfO7xQw9g6M02VET+emnbY0CO83IkrGm2q43VRyg==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1",
+        "load-bmfont": "^1.4.0"
+      }
+    },
+    "@jimp/plugin-resize": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-resize/-/plugin-resize-0.10.3.tgz",
+      "integrity": "sha512-rf8YmEB1d7Sg+g4LpqF0Mp+dfXfb6JFJkwlAIWPUOR7lGsPWALavEwTW91c0etEdnp0+JB9AFpy6zqq7Lwkq6w==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      }
+    },
+    "@jimp/plugin-rotate": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-rotate/-/plugin-rotate-0.10.3.tgz",
+      "integrity": "sha512-YXLlRjm18fkW9MOHUaVAxWjvgZM851ofOipytz5FyKp4KZWDLk+dZK1JNmVmK7MyVmAzZ5jsgSLhIgj+GgN0Eg==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      }
+    },
+    "@jimp/plugin-scale": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-scale/-/plugin-scale-0.10.3.tgz",
+      "integrity": "sha512-5DXD7x7WVcX1gUgnlFXQa8F+Q3ThRYwJm+aesgrYvDOY+xzRoRSdQvhmdd4JEEue3lyX44DvBSgCIHPtGcEPaw==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      }
+    },
+    "@jimp/plugin-shadow": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-shadow/-/plugin-shadow-0.10.3.tgz",
+      "integrity": "sha512-/nkFXpt2zVcdP4ETdkAUL0fSzyrC5ZFxdcphbYBodqD7fXNqChS/Un1eD4xCXWEpW8cnG9dixZgQgStjywH0Mg==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      }
+    },
+    "@jimp/plugin-threshold": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugin-threshold/-/plugin-threshold-0.10.3.tgz",
+      "integrity": "sha512-Dzh0Yq2wXP2SOnxcbbiyA4LJ2luwrdf1MghNIt9H+NX7B+IWw/N8qA2GuSm9n4BPGSLluuhdAWJqHcTiREriVA==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1"
+      }
+    },
+    "@jimp/plugins": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/plugins/-/plugins-0.10.3.tgz",
+      "integrity": "sha512-jTT3/7hOScf0EIKiAXmxwayHhryhc1wWuIe3FrchjDjr9wgIGNN2a7XwCgPl3fML17DXK1x8EzDneCdh261bkw==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/plugin-blit": "^0.10.3",
+        "@jimp/plugin-blur": "^0.10.3",
+        "@jimp/plugin-circle": "^0.10.3",
+        "@jimp/plugin-color": "^0.10.3",
+        "@jimp/plugin-contain": "^0.10.3",
+        "@jimp/plugin-cover": "^0.10.3",
+        "@jimp/plugin-crop": "^0.10.3",
+        "@jimp/plugin-displace": "^0.10.3",
+        "@jimp/plugin-dither": "^0.10.3",
+        "@jimp/plugin-fisheye": "^0.10.3",
+        "@jimp/plugin-flip": "^0.10.3",
+        "@jimp/plugin-gaussian": "^0.10.3",
+        "@jimp/plugin-invert": "^0.10.3",
+        "@jimp/plugin-mask": "^0.10.3",
+        "@jimp/plugin-normalize": "^0.10.3",
+        "@jimp/plugin-print": "^0.10.3",
+        "@jimp/plugin-resize": "^0.10.3",
+        "@jimp/plugin-rotate": "^0.10.3",
+        "@jimp/plugin-scale": "^0.10.3",
+        "@jimp/plugin-shadow": "^0.10.3",
+        "@jimp/plugin-threshold": "^0.10.3",
+        "core-js": "^3.4.1",
+        "timm": "^1.6.1"
+      }
+    },
+    "@jimp/png": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/png/-/png-0.10.3.tgz",
+      "integrity": "sha512-YKqk/dkl+nGZxSYIDQrqhmaP8tC3IK8H7dFPnnzFVvbhDnyYunqBZZO3SaZUKTichClRw8k/CjBhbc+hifSGWg==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/utils": "^0.10.3",
+        "core-js": "^3.4.1",
+        "pngjs": "^3.3.3"
+      }
+    },
+    "@jimp/tiff": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/tiff/-/tiff-0.10.3.tgz",
+      "integrity": "sha512-7EsJzZ5Y/EtinkBGuwX3Bi4S+zgbKouxjt9c82VJTRJOQgLWsE/RHqcyRCOQBhHAZ9QexYmDz34medfLKdoX0g==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "core-js": "^3.4.1",
+        "utif": "^2.0.1"
+      }
+    },
+    "@jimp/types": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/types/-/types-0.10.3.tgz",
+      "integrity": "sha512-XGmBakiHZqseSWr/puGN+CHzx0IKBSpsKlmEmsNV96HKDiP6eu8NSnwdGCEq2mmIHe0JNcg1hqg59hpwtQ7Tiw==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/bmp": "^0.10.3",
+        "@jimp/gif": "^0.10.3",
+        "@jimp/jpeg": "^0.10.3",
+        "@jimp/png": "^0.10.3",
+        "@jimp/tiff": "^0.10.3",
+        "core-js": "^3.4.1",
+        "timm": "^1.6.1"
+      }
+    },
+    "@jimp/utils": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/@jimp/utils/-/utils-0.10.3.tgz",
+      "integrity": "sha512-VcSlQhkil4ReYmg1KkN+WqHyYfZ2XfZxDsKAHSfST1GEz/RQHxKZbX+KhFKtKflnL0F4e6DlNQj3vznMNXCR2w==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "core-js": "^3.4.1",
+        "regenerator-runtime": "^0.13.3"
+      }
+    },
+    "@jridgewell/gen-mapping": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+      "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+      "requires": {
+        "@jridgewell/set-array": "^1.0.1",
+        "@jridgewell/sourcemap-codec": "^1.4.10",
+        "@jridgewell/trace-mapping": "^0.3.9"
+      }
+    },
+    "@jridgewell/resolve-uri": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
+      "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA=="
+    },
+    "@jridgewell/set-array": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+      "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw=="
+    },
+    "@jridgewell/source-map": {
+      "version": "0.3.5",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.5.tgz",
+      "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==",
+      "requires": {
+        "@jridgewell/gen-mapping": "^0.3.0",
+        "@jridgewell/trace-mapping": "^0.3.9"
+      }
+    },
+    "@jridgewell/sourcemap-codec": {
+      "version": "1.4.15",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+      "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
+    },
+    "@jridgewell/trace-mapping": {
+      "version": "0.3.22",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz",
+      "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==",
+      "requires": {
+        "@jridgewell/resolve-uri": "^3.1.0",
+        "@jridgewell/sourcemap-codec": "^1.4.14"
+      }
+    },
+    "@nodelib/fs.scandir": {
+      "version": "2.1.5",
+      "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+      "requires": {
+        "@nodelib/fs.stat": "2.0.5",
+        "run-parallel": "^1.1.9"
+      }
+    },
+    "@nodelib/fs.stat": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
+    },
+    "@nodelib/fs.walk": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+      "requires": {
+        "@nodelib/fs.scandir": "2.1.5",
+        "fastq": "^1.6.0"
+      }
+    },
+    "@pkgr/core": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmmirror.com/@pkgr/core/-/core-0.1.1.tgz",
+      "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA=="
+    },
+    "@rollup/pluginutils": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz",
+      "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==",
+      "requires": {
+        "estree-walker": "^2.0.1",
+        "picomatch": "^2.2.2"
+      }
+    },
+    "@sinonjs/commons": {
+      "version": "1.8.6",
+      "resolved": "https://registry.npmmirror.com/@sinonjs/commons/-/commons-1.8.6.tgz",
+      "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "type-detect": "4.0.8"
+      }
+    },
+    "@sinonjs/fake-timers": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmmirror.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz",
+      "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@sinonjs/commons": "^1.7.0"
+      }
+    },
+    "@tootallnate/once": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/@tootallnate/once/-/once-1.1.2.tgz",
+      "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
+      "dev": true,
+      "peer": true
+    },
+    "@types/babel__core": {
+      "version": "7.20.5",
+      "resolved": "https://registry.npmmirror.com/@types/babel__core/-/babel__core-7.20.5.tgz",
+      "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@babel/parser": "^7.20.7",
+        "@babel/types": "^7.20.7",
+        "@types/babel__generator": "*",
+        "@types/babel__template": "*",
+        "@types/babel__traverse": "*"
+      }
+    },
+    "@types/babel__generator": {
+      "version": "7.6.8",
+      "resolved": "https://registry.npmmirror.com/@types/babel__generator/-/babel__generator-7.6.8.tgz",
+      "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "@types/babel__template": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmmirror.com/@types/babel__template/-/babel__template-7.4.4.tgz",
+      "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@babel/parser": "^7.1.0",
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "@types/babel__traverse": {
+      "version": "7.20.5",
+      "resolved": "https://registry.npmmirror.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz",
+      "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@babel/types": "^7.20.7"
+      }
+    },
+    "@types/eslint": {
+      "version": "8.56.2",
+      "resolved": "https://registry.npmmirror.com/@types/eslint/-/eslint-8.56.2.tgz",
+      "integrity": "sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw==",
+      "peer": true,
+      "requires": {
+        "@types/estree": "*",
+        "@types/json-schema": "*"
+      }
+    },
+    "@types/eslint-scope": {
+      "version": "3.7.7",
+      "resolved": "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
+      "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
+      "peer": true,
+      "requires": {
+        "@types/eslint": "*",
+        "@types/estree": "*"
+      }
+    },
+    "@types/estree": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.5.tgz",
+      "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
+      "peer": true
+    },
+    "@types/graceful-fs": {
+      "version": "4.1.9",
+      "resolved": "https://registry.npmmirror.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz",
+      "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@types/node": "*"
+      }
+    },
+    "@types/istanbul-lib-coverage": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmmirror.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
+      "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
+      "dev": true,
+      "peer": true
+    },
+    "@types/istanbul-lib-report": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmmirror.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz",
+      "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@types/istanbul-lib-coverage": "*"
+      }
+    },
+    "@types/istanbul-reports": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmmirror.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
+      "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@types/istanbul-lib-report": "*"
+      }
+    },
+    "@types/json-schema": {
+      "version": "7.0.15",
+      "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz",
+      "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="
+    },
+    "@types/json5": {
+      "version": "0.0.29",
+      "resolved": "https://registry.npmmirror.com/@types/json5/-/json5-0.0.29.tgz",
+      "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
+      "dev": true
+    },
+    "@types/node": {
+      "version": "20.11.17",
+      "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.11.17.tgz",
+      "integrity": "sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw==",
+      "requires": {
+        "undici-types": "~5.26.4"
+      }
+    },
+    "@types/prettier": {
+      "version": "2.7.3",
+      "resolved": "https://registry.npmmirror.com/@types/prettier/-/prettier-2.7.3.tgz",
+      "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==",
+      "dev": true,
+      "peer": true
+    },
+    "@types/qs": {
+      "version": "6.9.11",
+      "resolved": "https://registry.npmmirror.com/@types/qs/-/qs-6.9.11.tgz",
+      "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==",
+      "dev": true
+    },
+    "@types/semver": {
+      "version": "7.5.6",
+      "resolved": "https://registry.npmmirror.com/@types/semver/-/semver-7.5.6.tgz",
+      "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==",
+      "dev": true
+    },
+    "@types/stack-utils": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/@types/stack-utils/-/stack-utils-2.0.3.tgz",
+      "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
+      "dev": true,
+      "peer": true
+    },
+    "@types/yargs": {
+      "version": "16.0.9",
+      "resolved": "https://registry.npmmirror.com/@types/yargs/-/yargs-16.0.9.tgz",
+      "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@types/yargs-parser": "*"
+      }
+    },
+    "@types/yargs-parser": {
+      "version": "21.0.3",
+      "resolved": "https://registry.npmmirror.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
+      "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
+      "dev": true,
+      "peer": true
+    },
+    "@typescript-eslint/eslint-plugin": {
+      "version": "6.21.0",
+      "resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz",
+      "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==",
+      "dev": true,
+      "requires": {
+        "@eslint-community/regexpp": "^4.5.1",
+        "@typescript-eslint/scope-manager": "6.21.0",
+        "@typescript-eslint/type-utils": "6.21.0",
+        "@typescript-eslint/utils": "6.21.0",
+        "@typescript-eslint/visitor-keys": "6.21.0",
+        "debug": "^4.3.4",
+        "graphemer": "^1.4.0",
+        "ignore": "^5.2.4",
+        "natural-compare": "^1.4.0",
+        "semver": "^7.5.4",
+        "ts-api-utils": "^1.0.1"
+      },
+      "dependencies": {
+        "lru-cache": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
+          "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+          "dev": true,
+          "requires": {
+            "yallist": "^4.0.0"
+          }
+        },
+        "semver": {
+          "version": "7.6.0",
+          "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.0.tgz",
+          "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+          "dev": true,
+          "requires": {
+            "lru-cache": "^6.0.0"
+          }
+        },
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+          "dev": true
+        }
+      }
+    },
+    "@typescript-eslint/parser": {
+      "version": "6.21.0",
+      "resolved": "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-6.21.0.tgz",
+      "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==",
+      "dev": true,
+      "requires": {
+        "@typescript-eslint/scope-manager": "6.21.0",
+        "@typescript-eslint/types": "6.21.0",
+        "@typescript-eslint/typescript-estree": "6.21.0",
+        "@typescript-eslint/visitor-keys": "6.21.0",
+        "debug": "^4.3.4"
+      }
+    },
+    "@typescript-eslint/scope-manager": {
+      "version": "6.21.0",
+      "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz",
+      "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==",
+      "dev": true,
+      "requires": {
+        "@typescript-eslint/types": "6.21.0",
+        "@typescript-eslint/visitor-keys": "6.21.0"
+      }
+    },
+    "@typescript-eslint/type-utils": {
+      "version": "6.21.0",
+      "resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz",
+      "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==",
+      "dev": true,
+      "requires": {
+        "@typescript-eslint/typescript-estree": "6.21.0",
+        "@typescript-eslint/utils": "6.21.0",
+        "debug": "^4.3.4",
+        "ts-api-utils": "^1.0.1"
+      }
+    },
+    "@typescript-eslint/types": {
+      "version": "6.21.0",
+      "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.21.0.tgz",
+      "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==",
+      "dev": true
+    },
+    "@typescript-eslint/typescript-estree": {
+      "version": "6.21.0",
+      "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz",
+      "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==",
+      "dev": true,
+      "requires": {
+        "@typescript-eslint/types": "6.21.0",
+        "@typescript-eslint/visitor-keys": "6.21.0",
+        "debug": "^4.3.4",
+        "globby": "^11.1.0",
+        "is-glob": "^4.0.3",
+        "minimatch": "9.0.3",
+        "semver": "^7.5.4",
+        "ts-api-utils": "^1.0.1"
+      },
+      "dependencies": {
+        "lru-cache": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
+          "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+          "dev": true,
+          "requires": {
+            "yallist": "^4.0.0"
+          }
+        },
+        "semver": {
+          "version": "7.6.0",
+          "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.0.tgz",
+          "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+          "dev": true,
+          "requires": {
+            "lru-cache": "^6.0.0"
+          }
+        },
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+          "dev": true
+        }
+      }
+    },
+    "@typescript-eslint/utils": {
+      "version": "6.21.0",
+      "resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-6.21.0.tgz",
+      "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==",
+      "dev": true,
+      "requires": {
+        "@eslint-community/eslint-utils": "^4.4.0",
+        "@types/json-schema": "^7.0.12",
+        "@types/semver": "^7.5.0",
+        "@typescript-eslint/scope-manager": "6.21.0",
+        "@typescript-eslint/types": "6.21.0",
+        "@typescript-eslint/typescript-estree": "6.21.0",
+        "semver": "^7.5.4"
+      },
+      "dependencies": {
+        "lru-cache": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
+          "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+          "dev": true,
+          "requires": {
+            "yallist": "^4.0.0"
+          }
+        },
+        "semver": {
+          "version": "7.6.0",
+          "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.0.tgz",
+          "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+          "dev": true,
+          "requires": {
+            "lru-cache": "^6.0.0"
+          }
+        },
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+          "dev": true
+        }
+      }
+    },
+    "@typescript-eslint/visitor-keys": {
+      "version": "6.21.0",
+      "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz",
+      "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==",
+      "dev": true,
+      "requires": {
+        "@typescript-eslint/types": "6.21.0",
+        "eslint-visitor-keys": "^3.4.1"
+      }
+    },
+    "@ungap/structured-clone": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+      "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ=="
+    },
+    "@vitejs/plugin-legacy": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmmirror.com/@vitejs/plugin-legacy/-/plugin-legacy-4.1.1.tgz",
+      "integrity": "sha512-um3gbVouD2Q/g19C0qpDfHwveXDCAHzs8OC3e9g6aXpKoD1H14himgs7wkMnhAynBJy7QqUoZNAXDuqN8zLR2g==",
+      "dev": true,
+      "requires": {
+        "@babel/core": "^7.22.9",
+        "@babel/preset-env": "^7.22.9",
+        "browserslist": "^4.21.9",
+        "core-js": "^3.31.1",
+        "magic-string": "^0.30.1",
+        "regenerator-runtime": "^0.13.11",
+        "systemjs": "^6.14.1"
+      }
+    },
+    "@vitejs/plugin-vue": {
+      "version": "4.6.2",
+      "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz",
+      "integrity": "sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==",
+      "requires": {}
+    },
+    "@vitejs/plugin-vue-jsx": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-3.1.0.tgz",
+      "integrity": "sha512-w9M6F3LSEU5kszVb9An2/MmXNxocAnUb3WhRr8bHlimhDrXNt6n6D2nJQR3UXpGlZHh/EsgouOHCsM8V3Ln+WA==",
+      "dev": true,
+      "requires": {
+        "@babel/core": "^7.23.3",
+        "@babel/plugin-transform-typescript": "^7.23.3",
+        "@vue/babel-plugin-jsx": "^1.1.5"
+      }
+    },
+    "@volar/language-core": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@volar/language-core/-/language-core-1.11.1.tgz",
+      "integrity": "sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==",
+      "dev": true,
+      "requires": {
+        "@volar/source-map": "1.11.1"
+      }
+    },
+    "@volar/source-map": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@volar/source-map/-/source-map-1.11.1.tgz",
+      "integrity": "sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==",
+      "dev": true,
+      "requires": {
+        "muggle-string": "^0.3.1"
+      }
+    },
+    "@volar/typescript": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@volar/typescript/-/typescript-1.11.1.tgz",
+      "integrity": "sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==",
+      "dev": true,
+      "requires": {
+        "@volar/language-core": "1.11.1",
+        "path-browserify": "^1.0.1"
+      }
+    },
+    "@vue/babel-helper-vue-transform-on": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.1.tgz",
+      "integrity": "sha512-jtEXim+pfyHWwvheYwUwSXm43KwQo8nhOBDyjrUITV6X2tB7lJm6n/+4sqR8137UVZZul5hBzWHdZ2uStYpyRQ==",
+      "dev": true
+    },
+    "@vue/babel-plugin-jsx": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.1.tgz",
+      "integrity": "sha512-Yy9qGktktXhB39QE99So/BO2Uwm/ZG+gpL9vMg51ijRRbINvgbuhyJEi4WYmGRMx/MSTfK0xjgZ3/MyY+iLCEg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-jsx": "^7.23.3",
+        "@babel/template": "^7.22.15",
+        "@babel/traverse": "^7.23.7",
+        "@babel/types": "^7.23.6",
+        "@vue/babel-helper-vue-transform-on": "1.2.1",
+        "@vue/babel-plugin-resolve-type": "1.2.1",
+        "camelcase": "^6.3.0",
+        "html-tags": "^3.3.1",
+        "svg-tags": "^1.0.0"
+      }
+    },
+    "@vue/babel-plugin-resolve-type": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.1.tgz",
+      "integrity": "sha512-IOtnI7pHunUzHS/y+EG/yPABIAp0VN8QhQ0UCS09jeMVxgAnI9qdOzO85RXdQGxq+aWCdv8/+k3W0aYO6j/8fQ==",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "^7.23.5",
+        "@babel/helper-module-imports": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/parser": "^7.23.6",
+        "@vue/compiler-sfc": "^3.4.15"
+      },
+      "dependencies": {
+        "@vue/compiler-core": {
+          "version": "3.4.18",
+          "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.4.18.tgz",
+          "integrity": "sha512-F7YK8lMK0iv6b9/Gdk15A67wM0KKZvxDxed0RR60C1z9tIJTKta+urs4j0RTN5XqHISzI3etN3mX0uHhjmoqjQ==",
+          "dev": true,
+          "requires": {
+            "@babel/parser": "^7.23.9",
+            "@vue/shared": "3.4.18",
+            "entities": "^4.5.0",
+            "estree-walker": "^2.0.2",
+            "source-map-js": "^1.0.2"
+          }
+        },
+        "@vue/compiler-dom": {
+          "version": "3.4.18",
+          "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.4.18.tgz",
+          "integrity": "sha512-24Eb8lcMfInefvQ6YlEVS18w5Q66f4+uXWVA+yb7praKbyjHRNuKVWGuinfSSjM0ZIiPi++QWukhkgznBaqpEA==",
+          "dev": true,
+          "requires": {
+            "@vue/compiler-core": "3.4.18",
+            "@vue/shared": "3.4.18"
+          }
+        },
+        "@vue/compiler-sfc": {
+          "version": "3.4.18",
+          "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.4.18.tgz",
+          "integrity": "sha512-rG5tqtnzwrVpMqAQ7FHtvHaV70G6LLfJIWLYZB/jZ9m/hrnZmIQh+H3ewnC5onwe/ibljm9+ZupxeElzqCkTAw==",
+          "dev": true,
+          "requires": {
+            "@babel/parser": "^7.23.9",
+            "@vue/compiler-core": "3.4.18",
+            "@vue/compiler-dom": "3.4.18",
+            "@vue/compiler-ssr": "3.4.18",
+            "@vue/shared": "3.4.18",
+            "estree-walker": "^2.0.2",
+            "magic-string": "^0.30.6",
+            "postcss": "^8.4.33",
+            "source-map-js": "^1.0.2"
+          }
+        },
+        "@vue/compiler-ssr": {
+          "version": "3.4.18",
+          "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.4.18.tgz",
+          "integrity": "sha512-hSlv20oUhPxo2UYUacHgGaxtqP0tvFo6ixxxD6JlXIkwzwoZ9eKK6PFQN4hNK/R13JlNyldwWt/fqGBKgWJ6nQ==",
+          "dev": true,
+          "requires": {
+            "@vue/compiler-dom": "3.4.18",
+            "@vue/shared": "3.4.18"
+          }
+        },
+        "@vue/shared": {
+          "version": "3.4.18",
+          "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.4.18.tgz",
+          "integrity": "sha512-CxouGFxxaW5r1WbrSmWwck3No58rApXgRSBxrqgnY1K+jk20F6DrXJkHdH9n4HVT+/B6G2CAn213Uq3npWiy8Q==",
+          "dev": true
+        }
+      }
+    },
+    "@vue/compiler-core": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.47.tgz",
+      "integrity": "sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==",
+      "requires": {
+        "@babel/parser": "^7.16.4",
+        "@vue/shared": "3.2.47",
+        "estree-walker": "^2.0.2",
+        "source-map": "^0.6.1"
+      }
+    },
+    "@vue/compiler-dom": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz",
+      "integrity": "sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==",
+      "requires": {
+        "@vue/compiler-core": "3.2.47",
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "@vue/compiler-sfc": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz",
+      "integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==",
+      "requires": {
+        "@babel/parser": "^7.16.4",
+        "@vue/compiler-core": "3.2.47",
+        "@vue/compiler-dom": "3.2.47",
+        "@vue/compiler-ssr": "3.2.47",
+        "@vue/reactivity-transform": "3.2.47",
+        "@vue/shared": "3.2.47",
+        "estree-walker": "^2.0.2",
+        "magic-string": "^0.25.7",
+        "postcss": "^8.1.10",
+        "source-map": "^0.6.1"
+      },
+      "dependencies": {
+        "magic-string": {
+          "version": "0.25.9",
+          "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz",
+          "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
+          "requires": {
+            "sourcemap-codec": "^1.4.8"
+          }
+        }
+      }
+    },
+    "@vue/compiler-ssr": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz",
+      "integrity": "sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==",
+      "requires": {
+        "@vue/compiler-dom": "3.2.47",
+        "@vue/shared": "3.2.47"
+      }
+    },
+    "@vue/devtools-api": {
+      "version": "6.5.1",
+      "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.5.1.tgz",
+      "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA=="
+    },
+    "@vue/eslint-config-prettier": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmmirror.com/@vue/eslint-config-prettier/-/eslint-config-prettier-8.0.0.tgz",
+      "integrity": "sha512-55dPqtC4PM/yBjhAr+yEw6+7KzzdkBuLmnhBrDfp4I48+wy+Giqqj9yUr5T2uD/BkBROjjmqnLZmXRdOx/VtQg==",
+      "dev": true,
+      "requires": {
+        "eslint-config-prettier": "^8.8.0",
+        "eslint-plugin-prettier": "^5.0.0"
+      },
+      "dependencies": {
+        "eslint-config-prettier": {
+          "version": "8.10.0",
+          "resolved": "https://registry.npmmirror.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz",
+          "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==",
+          "dev": true,
+          "requires": {}
+        }
+      }
+    },
+    "@vue/eslint-config-typescript": {
+      "version": "12.0.0",
+      "resolved": "https://registry.npmmirror.com/@vue/eslint-config-typescript/-/eslint-config-typescript-12.0.0.tgz",
+      "integrity": "sha512-StxLFet2Qe97T8+7L8pGlhYBBr8Eg05LPuTDVopQV6il+SK6qqom59BA/rcFipUef2jD8P2X44Vd8tMFytfvlg==",
+      "dev": true,
+      "requires": {
+        "@typescript-eslint/eslint-plugin": "^6.7.0",
+        "@typescript-eslint/parser": "^6.7.0",
+        "vue-eslint-parser": "^9.3.1"
+      }
+    },
+    "@vue/language-core": {
+      "version": "1.8.27",
+      "resolved": "https://registry.npmmirror.com/@vue/language-core/-/language-core-1.8.27.tgz",
+      "integrity": "sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==",
+      "dev": true,
+      "requires": {
+        "@volar/language-core": "~1.11.1",
+        "@volar/source-map": "~1.11.1",
+        "@vue/compiler-dom": "^3.3.0",
+        "@vue/shared": "^3.3.0",
+        "computeds": "^0.0.1",
+        "minimatch": "^9.0.3",
+        "muggle-string": "^0.3.1",
+        "path-browserify": "^1.0.1",
+        "vue-template-compiler": "^2.7.14"
+      },
+      "dependencies": {
+        "@vue/compiler-core": {
+          "version": "3.4.18",
+          "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.4.18.tgz",
+          "integrity": "sha512-F7YK8lMK0iv6b9/Gdk15A67wM0KKZvxDxed0RR60C1z9tIJTKta+urs4j0RTN5XqHISzI3etN3mX0uHhjmoqjQ==",
+          "dev": true,
+          "requires": {
+            "@babel/parser": "^7.23.9",
+            "@vue/shared": "3.4.18",
+            "entities": "^4.5.0",
+            "estree-walker": "^2.0.2",
+            "source-map-js": "^1.0.2"
+          }
+        },
+        "@vue/compiler-dom": {
+          "version": "3.4.18",
+          "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.4.18.tgz",
+          "integrity": "sha512-24Eb8lcMfInefvQ6YlEVS18w5Q66f4+uXWVA+yb7praKbyjHRNuKVWGuinfSSjM0ZIiPi++QWukhkgznBaqpEA==",
+          "dev": true,
+          "requires": {
+            "@vue/compiler-core": "3.4.18",
+            "@vue/shared": "3.4.18"
+          }
+        },
+        "@vue/shared": {
+          "version": "3.4.18",
+          "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.4.18.tgz",
+          "integrity": "sha512-CxouGFxxaW5r1WbrSmWwck3No58rApXgRSBxrqgnY1K+jk20F6DrXJkHdH9n4HVT+/B6G2CAn213Uq3npWiy8Q==",
+          "dev": true
+        }
+      }
+    },
+    "@vue/reactivity": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.4.18.tgz",
+      "integrity": "sha512-7uda2/I0jpLiRygprDo5Jxs2HJkOVXcOMlyVlY54yRLxoycBpwGJRwJT9EdGB4adnoqJDXVT2BilUAYwI7qvmg==",
+      "requires": {
+        "@vue/shared": "3.4.18"
+      },
+      "dependencies": {
+        "@vue/shared": {
+          "version": "3.4.18",
+          "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.4.18.tgz",
+          "integrity": "sha512-CxouGFxxaW5r1WbrSmWwck3No58rApXgRSBxrqgnY1K+jk20F6DrXJkHdH9n4HVT+/B6G2CAn213Uq3npWiy8Q=="
+        }
+      }
+    },
+    "@vue/reactivity-transform": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz",
+      "integrity": "sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==",
+      "requires": {
+        "@babel/parser": "^7.16.4",
+        "@vue/compiler-core": "3.2.47",
+        "@vue/shared": "3.2.47",
+        "estree-walker": "^2.0.2",
+        "magic-string": "^0.25.7"
+      },
+      "dependencies": {
+        "magic-string": {
+          "version": "0.25.9",
+          "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz",
+          "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
+          "requires": {
+            "sourcemap-codec": "^1.4.8"
+          }
+        }
+      }
+    },
+    "@vue/runtime-core": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.4.18.tgz",
+      "integrity": "sha512-7mU9diCa+4e+8/wZ7Udw5pwTH10A11sZ1nldmHOUKJnzCwvZxfJqAtw31mIf4T5H2FsLCSBQT3xgioA9vIjyDQ==",
+      "requires": {
+        "@vue/reactivity": "3.4.18",
+        "@vue/shared": "3.4.18"
+      },
+      "dependencies": {
+        "@vue/shared": {
+          "version": "3.4.18",
+          "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.4.18.tgz",
+          "integrity": "sha512-CxouGFxxaW5r1WbrSmWwck3No58rApXgRSBxrqgnY1K+jk20F6DrXJkHdH9n4HVT+/B6G2CAn213Uq3npWiy8Q=="
+        }
+      }
+    },
+    "@vue/runtime-dom": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.4.18.tgz",
+      "integrity": "sha512-2y1Mkzcw1niSfG7z3Qx+2ir9Gb4hdTkZe5p/I8x1aTIKQE0vY0tPAEUPhZm5tx6183gG3D/KwHG728UR0sIufA==",
+      "requires": {
+        "@vue/runtime-core": "3.4.18",
+        "@vue/shared": "3.4.18",
+        "csstype": "^3.1.3"
+      },
+      "dependencies": {
+        "@vue/shared": {
+          "version": "3.4.18",
+          "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.4.18.tgz",
+          "integrity": "sha512-CxouGFxxaW5r1WbrSmWwck3No58rApXgRSBxrqgnY1K+jk20F6DrXJkHdH9n4HVT+/B6G2CAn213Uq3npWiy8Q=="
+        }
+      }
+    },
+    "@vue/server-renderer": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.4.18.tgz",
+      "integrity": "sha512-YJd1wa7mzUN3NRqLEsrwEYWyO+PUBSROIGlCc3J/cvn7Zu6CxhNLgXa8Z4zZ5ja5/nviYO79J1InoPeXgwBTZA==",
+      "requires": {
+        "@vue/compiler-ssr": "3.4.18",
+        "@vue/shared": "3.4.18"
+      },
+      "dependencies": {
+        "@vue/compiler-core": {
+          "version": "3.4.18",
+          "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.4.18.tgz",
+          "integrity": "sha512-F7YK8lMK0iv6b9/Gdk15A67wM0KKZvxDxed0RR60C1z9tIJTKta+urs4j0RTN5XqHISzI3etN3mX0uHhjmoqjQ==",
+          "requires": {
+            "@babel/parser": "^7.23.9",
+            "@vue/shared": "3.4.18",
+            "entities": "^4.5.0",
+            "estree-walker": "^2.0.2",
+            "source-map-js": "^1.0.2"
+          }
+        },
+        "@vue/compiler-dom": {
+          "version": "3.4.18",
+          "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.4.18.tgz",
+          "integrity": "sha512-24Eb8lcMfInefvQ6YlEVS18w5Q66f4+uXWVA+yb7praKbyjHRNuKVWGuinfSSjM0ZIiPi++QWukhkgznBaqpEA==",
+          "requires": {
+            "@vue/compiler-core": "3.4.18",
+            "@vue/shared": "3.4.18"
+          }
+        },
+        "@vue/compiler-ssr": {
+          "version": "3.4.18",
+          "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.4.18.tgz",
+          "integrity": "sha512-hSlv20oUhPxo2UYUacHgGaxtqP0tvFo6ixxxD6JlXIkwzwoZ9eKK6PFQN4hNK/R13JlNyldwWt/fqGBKgWJ6nQ==",
+          "requires": {
+            "@vue/compiler-dom": "3.4.18",
+            "@vue/shared": "3.4.18"
+          }
+        },
+        "@vue/shared": {
+          "version": "3.4.18",
+          "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.4.18.tgz",
+          "integrity": "sha512-CxouGFxxaW5r1WbrSmWwck3No58rApXgRSBxrqgnY1K+jk20F6DrXJkHdH9n4HVT+/B6G2CAn213Uq3npWiy8Q=="
+        }
+      }
+    },
+    "@vue/shared": {
+      "version": "3.2.47",
+      "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.47.tgz",
+      "integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ=="
+    },
+    "@vue/tsconfig": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmmirror.com/@vue/tsconfig/-/tsconfig-0.1.3.tgz",
+      "integrity": "sha512-kQVsh8yyWPvHpb8gIc9l/HIDiiVUy1amynLNpCy8p+FoCiZXCo6fQos5/097MmnNZc9AtseDsCrfkhqCrJ8Olg==",
+      "dev": true,
+      "requires": {}
+    },
+    "@webassemblyjs/ast": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.11.6.tgz",
+      "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==",
+      "peer": true,
+      "requires": {
+        "@webassemblyjs/helper-numbers": "1.11.6",
+        "@webassemblyjs/helper-wasm-bytecode": "1.11.6"
+      }
+    },
+    "@webassemblyjs/floating-point-hex-parser": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz",
+      "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==",
+      "peer": true
+    },
+    "@webassemblyjs/helper-api-error": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz",
+      "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==",
+      "peer": true
+    },
+    "@webassemblyjs/helper-buffer": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz",
+      "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==",
+      "peer": true
+    },
+    "@webassemblyjs/helper-numbers": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz",
+      "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==",
+      "peer": true,
+      "requires": {
+        "@webassemblyjs/floating-point-hex-parser": "1.11.6",
+        "@webassemblyjs/helper-api-error": "1.11.6",
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "@webassemblyjs/helper-wasm-bytecode": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz",
+      "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==",
+      "peer": true
+    },
+    "@webassemblyjs/helper-wasm-section": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz",
+      "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==",
+      "peer": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.11.6",
+        "@webassemblyjs/helper-buffer": "1.11.6",
+        "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+        "@webassemblyjs/wasm-gen": "1.11.6"
+      }
+    },
+    "@webassemblyjs/ieee754": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz",
+      "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==",
+      "peer": true,
+      "requires": {
+        "@xtuc/ieee754": "^1.2.0"
+      }
+    },
+    "@webassemblyjs/leb128": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz",
+      "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==",
+      "peer": true,
+      "requires": {
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "@webassemblyjs/utf8": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz",
+      "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==",
+      "peer": true
+    },
+    "@webassemblyjs/wasm-edit": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz",
+      "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==",
+      "peer": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.11.6",
+        "@webassemblyjs/helper-buffer": "1.11.6",
+        "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+        "@webassemblyjs/helper-wasm-section": "1.11.6",
+        "@webassemblyjs/wasm-gen": "1.11.6",
+        "@webassemblyjs/wasm-opt": "1.11.6",
+        "@webassemblyjs/wasm-parser": "1.11.6",
+        "@webassemblyjs/wast-printer": "1.11.6"
+      }
+    },
+    "@webassemblyjs/wasm-gen": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz",
+      "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==",
+      "peer": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.11.6",
+        "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+        "@webassemblyjs/ieee754": "1.11.6",
+        "@webassemblyjs/leb128": "1.11.6",
+        "@webassemblyjs/utf8": "1.11.6"
+      }
+    },
+    "@webassemblyjs/wasm-opt": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz",
+      "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==",
+      "peer": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.11.6",
+        "@webassemblyjs/helper-buffer": "1.11.6",
+        "@webassemblyjs/wasm-gen": "1.11.6",
+        "@webassemblyjs/wasm-parser": "1.11.6"
+      }
+    },
+    "@webassemblyjs/wasm-parser": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz",
+      "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==",
+      "peer": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.11.6",
+        "@webassemblyjs/helper-api-error": "1.11.6",
+        "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+        "@webassemblyjs/ieee754": "1.11.6",
+        "@webassemblyjs/leb128": "1.11.6",
+        "@webassemblyjs/utf8": "1.11.6"
+      }
+    },
+    "@webassemblyjs/wast-printer": {
+      "version": "1.11.6",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz",
+      "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==",
+      "peer": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.11.6",
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "@xtuc/ieee754": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+      "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+      "peer": true
+    },
+    "@xtuc/long": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz",
+      "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+      "peer": true
+    },
+    "abab": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmmirror.com/abab/-/abab-2.0.6.tgz",
+      "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==",
+      "dev": true,
+      "peer": true
+    },
+    "accepts": {
+      "version": "1.3.8",
+      "resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz",
+      "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+      "dev": true,
+      "requires": {
+        "mime-types": "~2.1.34",
+        "negotiator": "0.6.3"
+      }
+    },
+    "acorn": {
+      "version": "8.11.3",
+      "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.11.3.tgz",
+      "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg=="
+    },
+    "acorn-globals": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/acorn-globals/-/acorn-globals-6.0.0.tgz",
+      "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "acorn": "^7.1.1",
+        "acorn-walk": "^7.1.1"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "7.4.1",
+          "resolved": "https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz",
+          "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+          "dev": true,
+          "peer": true
+        }
+      }
+    },
+    "acorn-import-assertions": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmmirror.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz",
+      "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==",
+      "peer": true,
+      "requires": {}
+    },
+    "acorn-jsx": {
+      "version": "5.3.2",
+      "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+      "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+      "requires": {}
+    },
+    "acorn-walk": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-7.2.0.tgz",
+      "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+      "dev": true,
+      "peer": true
+    },
+    "address": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmmirror.com/address/-/address-1.2.2.tgz",
+      "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==",
+      "dev": true
+    },
+    "agent-base": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz",
+      "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "debug": "4"
+      }
+    },
+    "ajv": {
+      "version": "6.12.6",
+      "resolved": "https://registry.npmmirror.com/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.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+      "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+      "peer": true,
+      "requires": {}
+    },
+    "ansi-escapes": {
+      "version": "4.3.2",
+      "resolved": "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+      "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "type-fest": "^0.21.3"
+      }
+    },
+    "ansi-regex": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz",
+      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
+    },
+    "ansi-styles": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz",
+      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+      "requires": {
+        "color-convert": "^1.9.0"
+      }
+    },
+    "any-base": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/any-base/-/any-base-1.1.0.tgz",
+      "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg=="
+    },
+    "anymatch": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz",
+      "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+      "requires": {
+        "normalize-path": "^3.0.0",
+        "picomatch": "^2.0.4"
+      }
+    },
+    "argparse": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz",
+      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+    },
+    "array-buffer-byte-length": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
+      "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.5",
+        "is-array-buffer": "^3.0.4"
+      }
+    },
+    "array-flatten": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz",
+      "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
+      "dev": true
+    },
+    "array-includes": {
+      "version": "3.1.7",
+      "resolved": "https://registry.npmmirror.com/array-includes/-/array-includes-3.1.7.tgz",
+      "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
+        "get-intrinsic": "^1.2.1",
+        "is-string": "^1.0.7"
+      }
+    },
+    "array-union": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz",
+      "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+      "dev": true
+    },
+    "array.prototype.filter": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz",
+      "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
+        "es-array-method-boxes-properly": "^1.0.0",
+        "is-string": "^1.0.7"
+      }
+    },
+    "array.prototype.findlastindex": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmmirror.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz",
+      "integrity": "sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.5",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.22.3",
+        "es-errors": "^1.3.0",
+        "es-shim-unscopables": "^1.0.2"
+      }
+    },
+    "array.prototype.flat": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmmirror.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
+      "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
+        "es-shim-unscopables": "^1.0.0"
+      }
+    },
+    "array.prototype.flatmap": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmmirror.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz",
+      "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
+        "es-shim-unscopables": "^1.0.0"
+      }
+    },
+    "arraybuffer.prototype.slice": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
+      "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
+      "dev": true,
+      "requires": {
+        "array-buffer-byte-length": "^1.0.1",
+        "call-bind": "^1.0.5",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.22.3",
+        "es-errors": "^1.2.1",
+        "get-intrinsic": "^1.2.3",
+        "is-array-buffer": "^3.0.4",
+        "is-shared-array-buffer": "^1.0.2"
+      }
+    },
+    "asynckit": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz",
+      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+      "dev": true,
+      "peer": true
+    },
+    "autoprefixer": {
+      "version": "10.4.17",
+      "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.17.tgz",
+      "integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==",
+      "requires": {
+        "browserslist": "^4.22.2",
+        "caniuse-lite": "^1.0.30001578",
+        "fraction.js": "^4.3.7",
+        "normalize-range": "^0.1.2",
+        "picocolors": "^1.0.0",
+        "postcss-value-parser": "^4.2.0"
+      }
+    },
+    "available-typed-arrays": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmmirror.com/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz",
+      "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==",
+      "dev": true
+    },
+    "babel-jest": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/babel-jest/-/babel-jest-27.5.1.tgz",
+      "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@jest/transform": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "@types/babel__core": "^7.1.14",
+        "babel-plugin-istanbul": "^6.1.1",
+        "babel-preset-jest": "^27.5.1",
+        "chalk": "^4.0.0",
+        "graceful-fs": "^4.2.9",
+        "slash": "^3.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "peer": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "peer": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "babel-plugin-istanbul": {
+      "version": "6.1.1",
+      "resolved": "https://registry.npmmirror.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
+      "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@istanbuljs/load-nyc-config": "^1.0.0",
+        "@istanbuljs/schema": "^0.1.2",
+        "istanbul-lib-instrument": "^5.0.4",
+        "test-exclude": "^6.0.0"
+      }
+    },
+    "babel-plugin-jest-hoist": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz",
+      "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@babel/template": "^7.3.3",
+        "@babel/types": "^7.3.3",
+        "@types/babel__core": "^7.0.0",
+        "@types/babel__traverse": "^7.0.6"
+      }
+    },
+    "babel-plugin-polyfill-corejs2": {
+      "version": "0.4.8",
+      "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz",
+      "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==",
+      "dev": true,
+      "requires": {
+        "@babel/compat-data": "^7.22.6",
+        "@babel/helper-define-polyfill-provider": "^0.5.0",
+        "semver": "^6.3.1"
+      }
+    },
+    "babel-plugin-polyfill-corejs3": {
+      "version": "0.9.0",
+      "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz",
+      "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-define-polyfill-provider": "^0.5.0",
+        "core-js-compat": "^3.34.0"
+      }
+    },
+    "babel-plugin-polyfill-regenerator": {
+      "version": "0.5.5",
+      "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz",
+      "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-define-polyfill-provider": "^0.5.0"
+      }
+    },
+    "babel-preset-current-node-syntax": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
+      "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@babel/plugin-syntax-async-generators": "^7.8.4",
+        "@babel/plugin-syntax-bigint": "^7.8.3",
+        "@babel/plugin-syntax-class-properties": "^7.8.3",
+        "@babel/plugin-syntax-import-meta": "^7.8.3",
+        "@babel/plugin-syntax-json-strings": "^7.8.3",
+        "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
+        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+        "@babel/plugin-syntax-numeric-separator": "^7.8.3",
+        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+        "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+        "@babel/plugin-syntax-top-level-await": "^7.8.3"
+      }
+    },
+    "babel-preset-jest": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz",
+      "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "babel-plugin-jest-hoist": "^27.5.1",
+        "babel-preset-current-node-syntax": "^1.0.0"
+      }
+    },
+    "balanced-match": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz",
+      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+    },
+    "base64-js": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz",
+      "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
+    },
+    "base64url": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/base64url/-/base64url-3.0.1.tgz",
+      "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A=="
+    },
+    "binary-extensions": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz",
+      "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
+    },
+    "bmp-js": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmmirror.com/bmp-js/-/bmp-js-0.1.0.tgz",
+      "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw=="
+    },
+    "body-parser": {
+      "version": "1.20.1",
+      "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.1.tgz",
+      "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
+      "dev": true,
+      "requires": {
+        "bytes": "3.1.2",
+        "content-type": "~1.0.4",
+        "debug": "2.6.9",
+        "depd": "2.0.0",
+        "destroy": "1.2.0",
+        "http-errors": "2.0.0",
+        "iconv-lite": "0.4.24",
+        "on-finished": "2.4.1",
+        "qs": "6.11.0",
+        "raw-body": "2.5.1",
+        "type-is": "~1.6.18",
+        "unpipe": "1.0.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+          "dev": true
+        },
+        "qs": {
+          "version": "6.11.0",
+          "resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz",
+          "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+          "dev": true,
+          "requires": {
+            "side-channel": "^1.0.4"
+          }
+        }
+      }
+    },
+    "boolbase": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz",
+      "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+      "dev": true
+    },
+    "brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+      "dev": true,
+      "requires": {
+        "balanced-match": "^1.0.0"
+      }
+    },
+    "braces": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz",
+      "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+      "requires": {
+        "fill-range": "^7.0.1"
+      }
+    },
+    "browser-process-hrtime": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
+      "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
+      "dev": true,
+      "peer": true
+    },
+    "browserslist": {
+      "version": "4.22.3",
+      "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.22.3.tgz",
+      "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==",
+      "requires": {
+        "caniuse-lite": "^1.0.30001580",
+        "electron-to-chromium": "^1.4.648",
+        "node-releases": "^2.0.14",
+        "update-browserslist-db": "^1.0.13"
+      }
+    },
+    "bser": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/bser/-/bser-2.1.1.tgz",
+      "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "node-int64": "^0.4.0"
+      }
+    },
+    "buffer": {
+      "version": "5.7.1",
+      "resolved": "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz",
+      "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+      "requires": {
+        "base64-js": "^1.3.1",
+        "ieee754": "^1.1.13"
+      }
+    },
+    "buffer-equal": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmmirror.com/buffer-equal/-/buffer-equal-0.0.1.tgz",
+      "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA=="
+    },
+    "buffer-from": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz",
+      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+    },
+    "builtin-modules": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmmirror.com/builtin-modules/-/builtin-modules-3.3.0.tgz",
+      "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
+      "dev": true
+    },
+    "builtins": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/builtins/-/builtins-5.0.1.tgz",
+      "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==",
+      "dev": true,
+      "requires": {
+        "semver": "^7.0.0"
+      },
+      "dependencies": {
+        "lru-cache": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
+          "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+          "dev": true,
+          "requires": {
+            "yallist": "^4.0.0"
+          }
+        },
+        "semver": {
+          "version": "7.6.0",
+          "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.0.tgz",
+          "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+          "dev": true,
+          "requires": {
+            "lru-cache": "^6.0.0"
+          }
+        },
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+          "dev": true
+        }
+      }
+    },
+    "bytes": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz",
+      "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+      "dev": true
+    },
+    "cac": {
+      "version": "6.7.9",
+      "resolved": "https://registry.npmmirror.com/cac/-/cac-6.7.9.tgz",
+      "integrity": "sha512-XN5qEpfNQCJ8jRaZgitSkkukjMRCGio+X3Ks5KUbGGlPbV+pSem1l9VuzooCBXOiMFshUZgyYqg6rgN8rjkb/w==",
+      "dev": true
+    },
+    "call-bind": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.6.tgz",
+      "integrity": "sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==",
+      "requires": {
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2",
+        "get-intrinsic": "^1.2.3",
+        "set-function-length": "^1.2.0"
+      }
+    },
+    "callsites": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz",
+      "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
+    },
+    "camelcase": {
+      "version": "6.3.0",
+      "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz",
+      "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+      "dev": true
+    },
+    "caniuse-lite": {
+      "version": "1.0.30001585",
+      "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001585.tgz",
+      "integrity": "sha512-yr2BWR1yLXQ8fMpdS/4ZZXpseBgE7o4g41x3a6AJOqZuOi+iE/WdJYAuZ6Y95i4Ohd2Y+9MzIWRR+uGABH4s3Q=="
+    },
+    "chalk": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmmirror.com/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"
+      }
+    },
+    "char-regex": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/char-regex/-/char-regex-1.0.2.tgz",
+      "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
+      "dev": true,
+      "peer": true
+    },
+    "chokidar": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz",
+      "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+      "requires": {
+        "anymatch": "~3.1.2",
+        "braces": "~3.0.2",
+        "fsevents": "~2.3.2",
+        "glob-parent": "~5.1.2",
+        "is-binary-path": "~2.1.0",
+        "is-glob": "~4.0.1",
+        "normalize-path": "~3.0.0",
+        "readdirp": "~3.6.0"
+      }
+    },
+    "chrome-trace-event": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
+      "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
+      "peer": true
+    },
+    "ci-info": {
+      "version": "3.9.0",
+      "resolved": "https://registry.npmmirror.com/ci-info/-/ci-info-3.9.0.tgz",
+      "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
+      "dev": true,
+      "peer": true
+    },
+    "cjs-module-lexer": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmmirror.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz",
+      "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==",
+      "dev": true,
+      "peer": true
+    },
+    "cliui": {
+      "version": "7.0.4",
+      "resolved": "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz",
+      "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "string-width": "^4.2.0",
+        "strip-ansi": "^6.0.0",
+        "wrap-ansi": "^7.0.0"
+      }
+    },
+    "co": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmmirror.com/co/-/co-4.6.0.tgz",
+      "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
+      "dev": true,
+      "peer": true
+    },
+    "collect-v8-coverage": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz",
+      "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==",
+      "dev": true,
+      "peer": true
+    },
+    "color-convert": {
+      "version": "1.9.3",
+      "resolved": "https://registry.npmmirror.com/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.npmmirror.com/color-name/-/color-name-1.1.3.tgz",
+      "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
+    },
+    "combined-stream": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz",
+      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "delayed-stream": "~1.0.0"
+      }
+    },
+    "commander": {
+      "version": "2.20.3",
+      "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz",
+      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+    },
+    "compare-versions": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmmirror.com/compare-versions/-/compare-versions-3.6.0.tgz",
+      "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA=="
+    },
+    "computeds": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmmirror.com/computeds/-/computeds-0.0.1.tgz",
+      "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==",
+      "dev": true
+    },
+    "concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz",
+      "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+    },
+    "content-disposition": {
+      "version": "0.5.4",
+      "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz",
+      "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "5.2.1"
+      }
+    },
+    "content-type": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz",
+      "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+      "dev": true
+    },
+    "convert-source-map": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz",
+      "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="
+    },
+    "cookie": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.5.0.tgz",
+      "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
+      "dev": true
+    },
+    "cookie-signature": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz",
+      "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
+      "dev": true
+    },
+    "core-js": {
+      "version": "3.35.1",
+      "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.35.1.tgz",
+      "integrity": "sha512-IgdsbxNyMskrTFxa9lWHyMwAJU5gXOPP+1yO+K59d50VLVAIDAbs7gIv705KzALModfK3ZrSZTPNpC0PQgIZuw=="
+    },
+    "core-js-compat": {
+      "version": "3.35.1",
+      "resolved": "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.35.1.tgz",
+      "integrity": "sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==",
+      "dev": true,
+      "requires": {
+        "browserslist": "^4.22.2"
+      }
+    },
+    "cross-env": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmmirror.com/cross-env/-/cross-env-7.0.3.tgz",
+      "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==",
+      "dev": true,
+      "requires": {
+        "cross-spawn": "^7.0.1"
+      }
+    },
+    "cross-spawn": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz",
+      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+      "requires": {
+        "path-key": "^3.1.0",
+        "shebang-command": "^2.0.0",
+        "which": "^2.0.1"
+      }
+    },
+    "css-font-size-keywords": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/css-font-size-keywords/-/css-font-size-keywords-1.0.0.tgz",
+      "integrity": "sha512-Q+svMDbMlelgCfH/RVDKtTDaf5021O486ZThQPIpahnIjUkMUslC+WuOQSWTgGSrNCH08Y7tYNEmmy0hkfMI8Q=="
+    },
+    "css-font-stretch-keywords": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/css-font-stretch-keywords/-/css-font-stretch-keywords-1.0.1.tgz",
+      "integrity": "sha512-KmugPO2BNqoyp9zmBIUGwt58UQSfyk1X5DbOlkb2pckDXFSAfjsD5wenb88fNrD6fvS+vu90a/tsPpb9vb0SLg=="
+    },
+    "css-font-style-keywords": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/css-font-style-keywords/-/css-font-style-keywords-1.0.1.tgz",
+      "integrity": "sha512-0Fn0aTpcDktnR1RzaBYorIxQily85M2KXRpzmxQPgh8pxUN9Fcn00I8u9I3grNr1QXVgCl9T5Imx0ZwKU973Vg=="
+    },
+    "css-font-weight-keywords": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/css-font-weight-keywords/-/css-font-weight-keywords-1.0.0.tgz",
+      "integrity": "sha512-5So8/NH+oDD+EzsnF4iaG4ZFHQ3vaViePkL1ZbZ5iC/KrsCY+WHq/lvOgrtmuOQ9pBBZ1ADGpaf+A4lj1Z9eYA=="
+    },
+    "css-list-helpers": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/css-list-helpers/-/css-list-helpers-2.0.0.tgz",
+      "integrity": "sha512-9Bj8tZ0jWbAM3u/U6m/boAzAwLPwtjzFvwivr2piSvyVa3K3rChJzQy4RIHkNkKiZCHrEMWDJWtTR8UyVhdDnQ=="
+    },
+    "css-system-font-keywords": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/css-system-font-keywords/-/css-system-font-keywords-1.0.0.tgz",
+      "integrity": "sha512-1umTtVd/fXS25ftfjB71eASCrYhilmEsvDEI6wG/QplnmlfmVM5HkZ/ZX46DT5K3eblFPgLUHt5BRCb0YXkSFA=="
+    },
+    "cssesc": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz",
+      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
+    },
+    "cssom": {
+      "version": "0.4.4",
+      "resolved": "https://registry.npmmirror.com/cssom/-/cssom-0.4.4.tgz",
+      "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==",
+      "dev": true,
+      "peer": true
+    },
+    "cssstyle": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/cssstyle/-/cssstyle-2.3.0.tgz",
+      "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "cssom": "~0.3.6"
+      },
+      "dependencies": {
+        "cssom": {
+          "version": "0.3.8",
+          "resolved": "https://registry.npmmirror.com/cssom/-/cssom-0.3.8.tgz",
+          "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
+          "dev": true,
+          "peer": true
+        }
+      }
+    },
+    "csstype": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
+      "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
+    },
+    "data-urls": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/data-urls/-/data-urls-2.0.0.tgz",
+      "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "abab": "^2.0.3",
+        "whatwg-mimetype": "^2.3.0",
+        "whatwg-url": "^8.0.0"
+      }
+    },
+    "dayjs": {
+      "version": "1.11.10",
+      "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.10.tgz",
+      "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ=="
+    },
+    "de-indent": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz",
+      "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==",
+      "dev": true
+    },
+    "debug": {
+      "version": "4.3.4",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz",
+      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+      "requires": {
+        "ms": "2.1.2"
+      }
+    },
+    "decimal.js": {
+      "version": "10.4.3",
+      "resolved": "https://registry.npmmirror.com/decimal.js/-/decimal.js-10.4.3.tgz",
+      "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
+      "dev": true,
+      "peer": true
+    },
+    "dedent": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmmirror.com/dedent/-/dedent-0.7.0.tgz",
+      "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==",
+      "dev": true,
+      "peer": true
+    },
+    "deep-is": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz",
+      "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
+    },
+    "deepmerge": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-4.3.1.tgz",
+      "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+      "dev": true,
+      "peer": true
+    },
+    "default-gateway": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmmirror.com/default-gateway/-/default-gateway-6.0.3.tgz",
+      "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==",
+      "dev": true,
+      "requires": {
+        "execa": "^5.0.0"
+      }
+    },
+    "define-data-property": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.2.tgz",
+      "integrity": "sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==",
+      "requires": {
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.2",
+        "gopd": "^1.0.1",
+        "has-property-descriptors": "^1.0.1"
+      }
+    },
+    "define-properties": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.1.tgz",
+      "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+      "dev": true,
+      "requires": {
+        "define-data-property": "^1.0.1",
+        "has-property-descriptors": "^1.0.0",
+        "object-keys": "^1.1.1"
+      }
+    },
+    "delayed-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",
+      "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+      "dev": true,
+      "peer": true
+    },
+    "depd": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz",
+      "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+      "dev": true
+    },
+    "destroy": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz",
+      "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+      "dev": true
+    },
+    "detect-newline": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/detect-newline/-/detect-newline-3.1.0.tgz",
+      "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
+      "dev": true,
+      "peer": true
+    },
+    "diff-sequences": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/diff-sequences/-/diff-sequences-27.5.1.tgz",
+      "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==",
+      "dev": true,
+      "peer": true
+    },
+    "dir-glob": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz",
+      "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+      "dev": true,
+      "requires": {
+        "path-type": "^4.0.0"
+      }
+    },
+    "doctrine": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz",
+      "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+      "requires": {
+        "esutils": "^2.0.2"
+      }
+    },
+    "dom-walk": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmmirror.com/dom-walk/-/dom-walk-0.1.2.tgz",
+      "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="
+    },
+    "domexception": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/domexception/-/domexception-2.0.1.tgz",
+      "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "webidl-conversions": "^5.0.0"
+      },
+      "dependencies": {
+        "webidl-conversions": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
+          "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==",
+          "dev": true,
+          "peer": true
+        }
+      }
+    },
+    "ee-first": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz",
+      "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
+      "dev": true
+    },
+    "electron-to-chromium": {
+      "version": "1.4.665",
+      "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.665.tgz",
+      "integrity": "sha512-UpyCWObBoD+nSZgOC2ToaIdZB0r9GhqT2WahPKiSki6ckkSuKhQNso8V2PrFcHBMleI/eqbKgVQgVC4Wni4ilw=="
+    },
+    "emittery": {
+      "version": "0.8.1",
+      "resolved": "https://registry.npmmirror.com/emittery/-/emittery-0.8.1.tgz",
+      "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==",
+      "dev": true,
+      "peer": true
+    },
+    "emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true,
+      "peer": true
+    },
+    "encodeurl": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz",
+      "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+      "dev": true
+    },
+    "enhanced-resolve": {
+      "version": "5.15.0",
+      "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz",
+      "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==",
+      "peer": true,
+      "requires": {
+        "graceful-fs": "^4.2.4",
+        "tapable": "^2.2.0"
+      }
+    },
+    "entities": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz",
+      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="
+    },
+    "error-ex": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz",
+      "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "is-arrayish": "^0.2.1"
+      }
+    },
+    "es-abstract": {
+      "version": "1.22.3",
+      "resolved": "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.22.3.tgz",
+      "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==",
+      "dev": true,
+      "requires": {
+        "array-buffer-byte-length": "^1.0.0",
+        "arraybuffer.prototype.slice": "^1.0.2",
+        "available-typed-arrays": "^1.0.5",
+        "call-bind": "^1.0.5",
+        "es-set-tostringtag": "^2.0.1",
+        "es-to-primitive": "^1.2.1",
+        "function.prototype.name": "^1.1.6",
+        "get-intrinsic": "^1.2.2",
+        "get-symbol-description": "^1.0.0",
+        "globalthis": "^1.0.3",
+        "gopd": "^1.0.1",
+        "has-property-descriptors": "^1.0.0",
+        "has-proto": "^1.0.1",
+        "has-symbols": "^1.0.3",
+        "hasown": "^2.0.0",
+        "internal-slot": "^1.0.5",
+        "is-array-buffer": "^3.0.2",
+        "is-callable": "^1.2.7",
+        "is-negative-zero": "^2.0.2",
+        "is-regex": "^1.1.4",
+        "is-shared-array-buffer": "^1.0.2",
+        "is-string": "^1.0.7",
+        "is-typed-array": "^1.1.12",
+        "is-weakref": "^1.0.2",
+        "object-inspect": "^1.13.1",
+        "object-keys": "^1.1.1",
+        "object.assign": "^4.1.4",
+        "regexp.prototype.flags": "^1.5.1",
+        "safe-array-concat": "^1.0.1",
+        "safe-regex-test": "^1.0.0",
+        "string.prototype.trim": "^1.2.8",
+        "string.prototype.trimend": "^1.0.7",
+        "string.prototype.trimstart": "^1.0.7",
+        "typed-array-buffer": "^1.0.0",
+        "typed-array-byte-length": "^1.0.0",
+        "typed-array-byte-offset": "^1.0.0",
+        "typed-array-length": "^1.0.4",
+        "unbox-primitive": "^1.0.2",
+        "which-typed-array": "^1.1.13"
+      }
+    },
+    "es-array-method-boxes-properly": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz",
+      "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==",
+      "dev": true
+    },
+    "es-errors": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz",
+      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="
+    },
+    "es-module-lexer": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz",
+      "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w=="
+    },
+    "es-set-tostringtag": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz",
+      "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==",
+      "dev": true,
+      "requires": {
+        "get-intrinsic": "^1.2.2",
+        "has-tostringtag": "^1.0.0",
+        "hasown": "^2.0.0"
+      }
+    },
+    "es-shim-unscopables": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
+      "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
+      "dev": true,
+      "requires": {
+        "hasown": "^2.0.0"
+      }
+    },
+    "es-to-primitive": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/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"
+      }
+    },
+    "esbuild": {
+      "version": "0.17.19",
+      "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.17.19.tgz",
+      "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==",
+      "requires": {
+        "@esbuild/android-arm": "0.17.19",
+        "@esbuild/android-arm64": "0.17.19",
+        "@esbuild/android-x64": "0.17.19",
+        "@esbuild/darwin-arm64": "0.17.19",
+        "@esbuild/darwin-x64": "0.17.19",
+        "@esbuild/freebsd-arm64": "0.17.19",
+        "@esbuild/freebsd-x64": "0.17.19",
+        "@esbuild/linux-arm": "0.17.19",
+        "@esbuild/linux-arm64": "0.17.19",
+        "@esbuild/linux-ia32": "0.17.19",
+        "@esbuild/linux-loong64": "0.17.19",
+        "@esbuild/linux-mips64el": "0.17.19",
+        "@esbuild/linux-ppc64": "0.17.19",
+        "@esbuild/linux-riscv64": "0.17.19",
+        "@esbuild/linux-s390x": "0.17.19",
+        "@esbuild/linux-x64": "0.17.19",
+        "@esbuild/netbsd-x64": "0.17.19",
+        "@esbuild/openbsd-x64": "0.17.19",
+        "@esbuild/sunos-x64": "0.17.19",
+        "@esbuild/win32-arm64": "0.17.19",
+        "@esbuild/win32-ia32": "0.17.19",
+        "@esbuild/win32-x64": "0.17.19"
+      }
+    },
+    "escalade": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.2.tgz",
+      "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA=="
+    },
+    "escape-html": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz",
+      "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
+      "dev": true
+    },
+    "escape-string-regexp": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="
+    },
+    "escodegen": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/escodegen/-/escodegen-2.1.0.tgz",
+      "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "esprima": "^4.0.1",
+        "estraverse": "^5.2.0",
+        "esutils": "^2.0.2",
+        "source-map": "~0.6.1"
+      }
+    },
+    "eslint": {
+      "version": "8.56.0",
+      "resolved": "https://registry.npmmirror.com/eslint/-/eslint-8.56.0.tgz",
+      "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==",
+      "requires": {
+        "@eslint-community/eslint-utils": "^4.2.0",
+        "@eslint-community/regexpp": "^4.6.1",
+        "@eslint/eslintrc": "^2.1.4",
+        "@eslint/js": "8.56.0",
+        "@humanwhocodes/config-array": "^0.11.13",
+        "@humanwhocodes/module-importer": "^1.0.1",
+        "@nodelib/fs.walk": "^1.2.8",
+        "@ungap/structured-clone": "^1.2.0",
+        "ajv": "^6.12.4",
+        "chalk": "^4.0.0",
+        "cross-spawn": "^7.0.2",
+        "debug": "^4.3.2",
+        "doctrine": "^3.0.0",
+        "escape-string-regexp": "^4.0.0",
+        "eslint-scope": "^7.2.2",
+        "eslint-visitor-keys": "^3.4.3",
+        "espree": "^9.6.1",
+        "esquery": "^1.4.2",
+        "esutils": "^2.0.2",
+        "fast-deep-equal": "^3.1.3",
+        "file-entry-cache": "^6.0.1",
+        "find-up": "^5.0.0",
+        "glob-parent": "^6.0.2",
+        "globals": "^13.19.0",
+        "graphemer": "^1.4.0",
+        "ignore": "^5.2.0",
+        "imurmurhash": "^0.1.4",
+        "is-glob": "^4.0.0",
+        "is-path-inside": "^3.0.3",
+        "js-yaml": "^4.1.0",
+        "json-stable-stringify-without-jsonify": "^1.0.1",
+        "levn": "^0.4.1",
+        "lodash.merge": "^4.6.2",
+        "minimatch": "^3.1.2",
+        "natural-compare": "^1.4.0",
+        "optionator": "^0.9.3",
+        "strip-ansi": "^6.0.1",
+        "text-table": "^0.2.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "brace-expansion": {
+          "version": "1.1.11",
+          "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz",
+          "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+          "requires": {
+            "balanced-match": "^1.0.0",
+            "concat-map": "0.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+        },
+        "escape-string-regexp": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+          "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
+        },
+        "glob-parent": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz",
+          "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+          "requires": {
+            "is-glob": "^4.0.3"
+          }
+        },
+        "globals": {
+          "version": "13.24.0",
+          "resolved": "https://registry.npmmirror.com/globals/-/globals-13.24.0.tgz",
+          "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+          "requires": {
+            "type-fest": "^0.20.2"
+          }
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+        },
+        "minimatch": {
+          "version": "3.1.2",
+          "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz",
+          "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+          "requires": {
+            "brace-expansion": "^1.1.7"
+          }
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        },
+        "type-fest": {
+          "version": "0.20.2",
+          "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz",
+          "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="
+        }
+      }
+    },
+    "eslint-compat-utils": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmmirror.com/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz",
+      "integrity": "sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==",
+      "dev": true,
+      "requires": {}
+    },
+    "eslint-config-prettier": {
+      "version": "9.1.0",
+      "resolved": "https://registry.npmmirror.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz",
+      "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==",
+      "requires": {}
+    },
+    "eslint-config-standard": {
+      "version": "17.1.0",
+      "resolved": "https://registry.npmmirror.com/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz",
+      "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==",
+      "dev": true,
+      "requires": {}
+    },
+    "eslint-config-standard-with-typescript": {
+      "version": "39.1.1",
+      "resolved": "https://registry.npmmirror.com/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-39.1.1.tgz",
+      "integrity": "sha512-t6B5Ep8E4I18uuoYeYxINyqcXb2UbC0SOOTxRtBSt2JUs+EzeXbfe2oaiPs71AIdnoWhXDO2fYOHz8df3kV84A==",
+      "dev": true,
+      "requires": {
+        "@typescript-eslint/parser": "^6.4.0",
+        "eslint-config-standard": "17.1.0"
+      }
+    },
+    "eslint-import-resolver-node": {
+      "version": "0.3.9",
+      "resolved": "https://registry.npmmirror.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
+      "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
+      "dev": true,
+      "requires": {
+        "debug": "^3.2.7",
+        "is-core-module": "^2.13.0",
+        "resolve": "^1.22.4"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.7",
+          "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz",
+          "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        }
+      }
+    },
+    "eslint-module-utils": {
+      "version": "2.8.0",
+      "resolved": "https://registry.npmmirror.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz",
+      "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==",
+      "dev": true,
+      "requires": {
+        "debug": "^3.2.7"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.7",
+          "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz",
+          "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        }
+      }
+    },
+    "eslint-plugin-es-x": {
+      "version": "7.5.0",
+      "resolved": "https://registry.npmmirror.com/eslint-plugin-es-x/-/eslint-plugin-es-x-7.5.0.tgz",
+      "integrity": "sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==",
+      "dev": true,
+      "requires": {
+        "@eslint-community/eslint-utils": "^4.1.2",
+        "@eslint-community/regexpp": "^4.6.0",
+        "eslint-compat-utils": "^0.1.2"
+      }
+    },
+    "eslint-plugin-import": {
+      "version": "2.29.1",
+      "resolved": "https://registry.npmmirror.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz",
+      "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==",
+      "dev": true,
+      "requires": {
+        "array-includes": "^3.1.7",
+        "array.prototype.findlastindex": "^1.2.3",
+        "array.prototype.flat": "^1.3.2",
+        "array.prototype.flatmap": "^1.3.2",
+        "debug": "^3.2.7",
+        "doctrine": "^2.1.0",
+        "eslint-import-resolver-node": "^0.3.9",
+        "eslint-module-utils": "^2.8.0",
+        "hasown": "^2.0.0",
+        "is-core-module": "^2.13.1",
+        "is-glob": "^4.0.3",
+        "minimatch": "^3.1.2",
+        "object.fromentries": "^2.0.7",
+        "object.groupby": "^1.0.1",
+        "object.values": "^1.1.7",
+        "semver": "^6.3.1",
+        "tsconfig-paths": "^3.15.0"
+      },
+      "dependencies": {
+        "brace-expansion": {
+          "version": "1.1.11",
+          "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz",
+          "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+          "dev": true,
+          "requires": {
+            "balanced-match": "^1.0.0",
+            "concat-map": "0.0.1"
+          }
+        },
+        "debug": {
+          "version": "3.2.7",
+          "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz",
+          "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "doctrine": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-2.1.0.tgz",
+          "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+          "dev": true,
+          "requires": {
+            "esutils": "^2.0.2"
+          }
+        },
+        "minimatch": {
+          "version": "3.1.2",
+          "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz",
+          "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+          "dev": true,
+          "requires": {
+            "brace-expansion": "^1.1.7"
+          }
+        }
+      }
+    },
+    "eslint-plugin-n": {
+      "version": "16.6.2",
+      "resolved": "https://registry.npmmirror.com/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz",
+      "integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==",
+      "dev": true,
+      "requires": {
+        "@eslint-community/eslint-utils": "^4.4.0",
+        "builtins": "^5.0.1",
+        "eslint-plugin-es-x": "^7.5.0",
+        "get-tsconfig": "^4.7.0",
+        "globals": "^13.24.0",
+        "ignore": "^5.2.4",
+        "is-builtin-module": "^3.2.1",
+        "is-core-module": "^2.12.1",
+        "minimatch": "^3.1.2",
+        "resolve": "^1.22.2",
+        "semver": "^7.5.3"
+      },
+      "dependencies": {
+        "brace-expansion": {
+          "version": "1.1.11",
+          "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz",
+          "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+          "dev": true,
+          "requires": {
+            "balanced-match": "^1.0.0",
+            "concat-map": "0.0.1"
+          }
+        },
+        "globals": {
+          "version": "13.24.0",
+          "resolved": "https://registry.npmmirror.com/globals/-/globals-13.24.0.tgz",
+          "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+          "dev": true,
+          "requires": {
+            "type-fest": "^0.20.2"
+          }
+        },
+        "lru-cache": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
+          "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+          "dev": true,
+          "requires": {
+            "yallist": "^4.0.0"
+          }
+        },
+        "minimatch": {
+          "version": "3.1.2",
+          "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz",
+          "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+          "dev": true,
+          "requires": {
+            "brace-expansion": "^1.1.7"
+          }
+        },
+        "semver": {
+          "version": "7.6.0",
+          "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.0.tgz",
+          "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+          "dev": true,
+          "requires": {
+            "lru-cache": "^6.0.0"
+          }
+        },
+        "type-fest": {
+          "version": "0.20.2",
+          "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz",
+          "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+          "dev": true
+        },
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+          "dev": true
+        }
+      }
+    },
+    "eslint-plugin-prettier": {
+      "version": "5.1.3",
+      "resolved": "https://registry.npmmirror.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz",
+      "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==",
+      "requires": {
+        "prettier-linter-helpers": "^1.0.0",
+        "synckit": "^0.8.6"
+      }
+    },
+    "eslint-plugin-promise": {
+      "version": "6.1.1",
+      "resolved": "https://registry.npmmirror.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz",
+      "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==",
+      "dev": true,
+      "requires": {}
+    },
+    "eslint-plugin-vue": {
+      "version": "9.21.1",
+      "resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-9.21.1.tgz",
+      "integrity": "sha512-XVtI7z39yOVBFJyi8Ljbn7kY9yHzznKXL02qQYn+ta63Iy4A9JFBw6o4OSB9hyD2++tVT+su9kQqetUyCCwhjw==",
+      "dev": true,
+      "requires": {
+        "@eslint-community/eslint-utils": "^4.4.0",
+        "natural-compare": "^1.4.0",
+        "nth-check": "^2.1.1",
+        "postcss-selector-parser": "^6.0.13",
+        "semver": "^7.5.4",
+        "vue-eslint-parser": "^9.4.2",
+        "xml-name-validator": "^4.0.0"
+      },
+      "dependencies": {
+        "lru-cache": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
+          "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+          "dev": true,
+          "requires": {
+            "yallist": "^4.0.0"
+          }
+        },
+        "semver": {
+          "version": "7.6.0",
+          "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.0.tgz",
+          "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+          "dev": true,
+          "requires": {
+            "lru-cache": "^6.0.0"
+          }
+        },
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+          "dev": true
+        }
+      }
+    },
+    "eslint-scope": {
+      "version": "7.2.2",
+      "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.2.2.tgz",
+      "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+      "requires": {
+        "esrecurse": "^4.3.0",
+        "estraverse": "^5.2.0"
+      }
+    },
+    "eslint-visitor-keys": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="
+    },
+    "espree": {
+      "version": "9.6.1",
+      "resolved": "https://registry.npmmirror.com/espree/-/espree-9.6.1.tgz",
+      "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+      "requires": {
+        "acorn": "^8.9.0",
+        "acorn-jsx": "^5.3.2",
+        "eslint-visitor-keys": "^3.4.1"
+      }
+    },
+    "esprima": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz",
+      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+      "dev": true,
+      "peer": true
+    },
+    "esquery": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmmirror.com/esquery/-/esquery-1.5.0.tgz",
+      "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+      "requires": {
+        "estraverse": "^5.1.0"
+      }
+    },
+    "esrecurse": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz",
+      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+      "requires": {
+        "estraverse": "^5.2.0"
+      }
+    },
+    "estraverse": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz",
+      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="
+    },
+    "estree-walker": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
+      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
+    },
+    "esutils": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz",
+      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
+    },
+    "etag": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz",
+      "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+      "dev": true
+    },
+    "events": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz",
+      "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+      "peer": true
+    },
+    "execa": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz",
+      "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+      "dev": true,
+      "requires": {
+        "cross-spawn": "^7.0.3",
+        "get-stream": "^6.0.0",
+        "human-signals": "^2.1.0",
+        "is-stream": "^2.0.0",
+        "merge-stream": "^2.0.0",
+        "npm-run-path": "^4.0.1",
+        "onetime": "^5.1.2",
+        "signal-exit": "^3.0.3",
+        "strip-final-newline": "^2.0.0"
+      }
+    },
+    "exif-parser": {
+      "version": "0.1.12",
+      "resolved": "https://registry.npmmirror.com/exif-parser/-/exif-parser-0.1.12.tgz",
+      "integrity": "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw=="
+    },
+    "exit": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmmirror.com/exit/-/exit-0.1.2.tgz",
+      "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
+      "dev": true,
+      "peer": true
+    },
+    "expect": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/expect/-/expect-27.5.1.tgz",
+      "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@jest/types": "^27.5.1",
+        "jest-get-type": "^27.5.1",
+        "jest-matcher-utils": "^27.5.1",
+        "jest-message-util": "^27.5.1"
+      }
+    },
+    "express": {
+      "version": "4.18.2",
+      "resolved": "https://registry.npmmirror.com/express/-/express-4.18.2.tgz",
+      "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
+      "dev": true,
+      "requires": {
+        "accepts": "~1.3.8",
+        "array-flatten": "1.1.1",
+        "body-parser": "1.20.1",
+        "content-disposition": "0.5.4",
+        "content-type": "~1.0.4",
+        "cookie": "0.5.0",
+        "cookie-signature": "1.0.6",
+        "debug": "2.6.9",
+        "depd": "2.0.0",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "finalhandler": "1.2.0",
+        "fresh": "0.5.2",
+        "http-errors": "2.0.0",
+        "merge-descriptors": "1.0.1",
+        "methods": "~1.1.2",
+        "on-finished": "2.4.1",
+        "parseurl": "~1.3.3",
+        "path-to-regexp": "0.1.7",
+        "proxy-addr": "~2.0.7",
+        "qs": "6.11.0",
+        "range-parser": "~1.2.1",
+        "safe-buffer": "5.2.1",
+        "send": "0.18.0",
+        "serve-static": "1.15.0",
+        "setprototypeof": "1.2.0",
+        "statuses": "2.0.1",
+        "type-is": "~1.6.18",
+        "utils-merge": "1.0.1",
+        "vary": "~1.1.2"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+          "dev": true
+        },
+        "qs": {
+          "version": "6.11.0",
+          "resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz",
+          "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+          "dev": true,
+          "requires": {
+            "side-channel": "^1.0.4"
+          }
+        }
+      }
+    },
+    "fast-deep-equal": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+    },
+    "fast-diff": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/fast-diff/-/fast-diff-1.3.0.tgz",
+      "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw=="
+    },
+    "fast-glob": {
+      "version": "3.3.2",
+      "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz",
+      "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+      "requires": {
+        "@nodelib/fs.stat": "^2.0.2",
+        "@nodelib/fs.walk": "^1.2.3",
+        "glob-parent": "^5.1.2",
+        "merge2": "^1.3.0",
+        "micromatch": "^4.0.4"
+      }
+    },
+    "fast-json-stable-stringify": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+    },
+    "fast-levenshtein": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+      "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="
+    },
+    "fastq": {
+      "version": "1.17.1",
+      "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.17.1.tgz",
+      "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+      "requires": {
+        "reusify": "^1.0.4"
+      }
+    },
+    "fb-watchman": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/fb-watchman/-/fb-watchman-2.0.2.tgz",
+      "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "bser": "2.1.1"
+      }
+    },
+    "file-entry-cache": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+      "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+      "requires": {
+        "flat-cache": "^3.0.4"
+      }
+    },
+    "file-type": {
+      "version": "9.0.0",
+      "resolved": "https://registry.npmmirror.com/file-type/-/file-type-9.0.0.tgz",
+      "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw=="
+    },
+    "fill-range": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz",
+      "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+      "requires": {
+        "to-regex-range": "^5.0.1"
+      }
+    },
+    "finalhandler": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.2.0.tgz",
+      "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
+      "dev": true,
+      "requires": {
+        "debug": "2.6.9",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "on-finished": "2.4.1",
+        "parseurl": "~1.3.3",
+        "statuses": "2.0.1",
+        "unpipe": "~1.0.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+          "dev": true
+        }
+      }
+    },
+    "find-up": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz",
+      "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+      "requires": {
+        "locate-path": "^6.0.0",
+        "path-exists": "^4.0.0"
+      }
+    },
+    "flat-cache": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmmirror.com/flat-cache/-/flat-cache-3.2.0.tgz",
+      "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
+      "requires": {
+        "flatted": "^3.2.9",
+        "keyv": "^4.5.3",
+        "rimraf": "^3.0.2"
+      }
+    },
+    "flatted": {
+      "version": "3.2.9",
+      "resolved": "https://registry.npmmirror.com/flatted/-/flatted-3.2.9.tgz",
+      "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ=="
+    },
+    "for-each": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmmirror.com/for-each/-/for-each-0.3.3.tgz",
+      "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+      "dev": true,
+      "requires": {
+        "is-callable": "^1.1.3"
+      }
+    },
+    "form-data": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/form-data/-/form-data-3.0.1.tgz",
+      "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.8",
+        "mime-types": "^2.1.12"
+      }
+    },
+    "forwarded": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz",
+      "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+      "dev": true
+    },
+    "fraction.js": {
+      "version": "4.3.7",
+      "resolved": "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.3.7.tgz",
+      "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew=="
+    },
+    "fresh": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz",
+      "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+      "dev": true
+    },
+    "fs-extra": {
+      "version": "10.1.0",
+      "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz",
+      "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
+      "requires": {
+        "graceful-fs": "^4.2.0",
+        "jsonfile": "^6.0.1",
+        "universalify": "^2.0.0"
+      }
+    },
+    "fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz",
+      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+    },
+    "function-bind": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz",
+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
+    },
+    "function.prototype.name": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmmirror.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
+      "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
+        "functions-have-names": "^1.2.3"
+      }
+    },
+    "functions-have-names": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz",
+      "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+      "dev": true
+    },
+    "generic-names": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/generic-names/-/generic-names-4.0.0.tgz",
+      "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==",
+      "requires": {
+        "loader-utils": "^3.2.0"
+      }
+    },
+    "gensync": {
+      "version": "1.0.0-beta.2",
+      "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz",
+      "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="
+    },
+    "get-caller-file": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz",
+      "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+      "dev": true,
+      "peer": true
+    },
+    "get-intrinsic": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+      "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+      "requires": {
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2",
+        "has-proto": "^1.0.1",
+        "has-symbols": "^1.0.3",
+        "hasown": "^2.0.0"
+      }
+    },
+    "get-package-type": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmmirror.com/get-package-type/-/get-package-type-0.1.0.tgz",
+      "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
+      "dev": true,
+      "peer": true
+    },
+    "get-stream": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz",
+      "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+      "dev": true
+    },
+    "get-symbol-description": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
+      "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.5",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.4"
+      }
+    },
+    "get-tsconfig": {
+      "version": "4.7.2",
+      "resolved": "https://registry.npmmirror.com/get-tsconfig/-/get-tsconfig-4.7.2.tgz",
+      "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==",
+      "dev": true,
+      "requires": {
+        "resolve-pkg-maps": "^1.0.0"
+      }
+    },
+    "glob": {
+      "version": "7.2.3",
+      "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz",
+      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "requires": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "dependencies": {
+        "brace-expansion": {
+          "version": "1.1.11",
+          "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz",
+          "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+          "requires": {
+            "balanced-match": "^1.0.0",
+            "concat-map": "0.0.1"
+          }
+        },
+        "minimatch": {
+          "version": "3.1.2",
+          "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz",
+          "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+          "requires": {
+            "brace-expansion": "^1.1.7"
+          }
+        }
+      }
+    },
+    "glob-parent": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+      "requires": {
+        "is-glob": "^4.0.1"
+      }
+    },
+    "glob-to-regexp": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+      "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+      "peer": true
+    },
+    "global": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmmirror.com/global/-/global-4.4.0.tgz",
+      "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
+      "requires": {
+        "min-document": "^2.19.0",
+        "process": "^0.11.10"
+      }
+    },
+    "globals": {
+      "version": "11.12.0",
+      "resolved": "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz",
+      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="
+    },
+    "globalthis": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/globalthis/-/globalthis-1.0.3.tgz",
+      "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
+      "dev": true,
+      "requires": {
+        "define-properties": "^1.1.3"
+      }
+    },
+    "globby": {
+      "version": "11.1.0",
+      "resolved": "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz",
+      "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+      "dev": true,
+      "requires": {
+        "array-union": "^2.1.0",
+        "dir-glob": "^3.0.1",
+        "fast-glob": "^3.2.9",
+        "ignore": "^5.2.0",
+        "merge2": "^1.4.1",
+        "slash": "^3.0.0"
+      }
+    },
+    "gopd": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.0.1.tgz",
+      "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+      "requires": {
+        "get-intrinsic": "^1.1.3"
+      }
+    },
+    "graceful-fs": {
+      "version": "4.2.11",
+      "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz",
+      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
+    },
+    "graphemer": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmmirror.com/graphemer/-/graphemer-1.4.0.tgz",
+      "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="
+    },
+    "has-bigints": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.2.tgz",
+      "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
+      "dev": true
+    },
+    "has-flag": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz",
+      "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="
+    },
+    "has-property-descriptors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
+      "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
+      "requires": {
+        "get-intrinsic": "^1.2.2"
+      }
+    },
+    "has-proto": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/has-proto/-/has-proto-1.0.1.tgz",
+      "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
+    },
+    "has-symbols": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz",
+      "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+    },
+    "has-tostringtag": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+      "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+      "dev": true,
+      "requires": {
+        "has-symbols": "^1.0.3"
+      }
+    },
+    "hash-sum": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz",
+      "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg=="
+    },
+    "hasown": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.0.tgz",
+      "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
+      "requires": {
+        "function-bind": "^1.1.2"
+      }
+    },
+    "he": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz",
+      "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+      "dev": true
+    },
+    "heic2any": {
+      "version": "0.0.4",
+      "resolved": "https://registry.npmmirror.com/heic2any/-/heic2any-0.0.4.tgz",
+      "integrity": "sha512-3lLnZiDELfabVH87htnRolZ2iehX9zwpRyGNz22GKXIu0fznlblf0/ftppXKNqS26dqFSeqfIBhAmAj/uSp0cA=="
+    },
+    "html-encoding-sniffer": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
+      "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "whatwg-encoding": "^1.0.5"
+      }
+    },
+    "html-escaper": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/html-escaper/-/html-escaper-2.0.2.tgz",
+      "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
+      "dev": true,
+      "peer": true
+    },
+    "html-tags": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmmirror.com/html-tags/-/html-tags-3.3.1.tgz",
+      "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==",
+      "dev": true
+    },
+    "http-errors": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz",
+      "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+      "dev": true,
+      "requires": {
+        "depd": "2.0.0",
+        "inherits": "2.0.4",
+        "setprototypeof": "1.2.0",
+        "statuses": "2.0.1",
+        "toidentifier": "1.0.1"
+      }
+    },
+    "http-proxy-agent": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
+      "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@tootallnate/once": "1",
+        "agent-base": "6",
+        "debug": "4"
+      }
+    },
+    "https-proxy-agent": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+      "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "agent-base": "6",
+        "debug": "4"
+      }
+    },
+    "human-signals": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz",
+      "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+      "dev": true
+    },
+    "iconv-lite": {
+      "version": "0.4.24",
+      "resolved": "https://registry.npmmirror.com/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.npmmirror.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
+      "integrity": "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg=="
+    },
+    "icss-utils": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmmirror.com/icss-utils/-/icss-utils-5.1.0.tgz",
+      "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
+      "requires": {}
+    },
+    "ieee754": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz",
+      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
+    },
+    "ignore": {
+      "version": "5.3.1",
+      "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.3.1.tgz",
+      "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw=="
+    },
+    "immutable": {
+      "version": "4.3.5",
+      "resolved": "https://registry.npmmirror.com/immutable/-/immutable-4.3.5.tgz",
+      "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw=="
+    },
+    "import-fresh": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz",
+      "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+      "requires": {
+        "parent-module": "^1.0.0",
+        "resolve-from": "^4.0.0"
+      }
+    },
+    "import-local": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/import-local/-/import-local-3.1.0.tgz",
+      "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "pkg-dir": "^4.2.0",
+        "resolve-cwd": "^3.0.0"
+      }
+    },
+    "imurmurhash": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz",
+      "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="
+    },
+    "inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz",
+      "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+      "requires": {
+        "once": "^1.3.0",
+        "wrappy": "1"
+      }
+    },
+    "inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+    },
+    "internal-slot": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.7.tgz",
+      "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==",
+      "dev": true,
+      "requires": {
+        "es-errors": "^1.3.0",
+        "hasown": "^2.0.0",
+        "side-channel": "^1.0.4"
+      }
+    },
+    "invert-kv": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/invert-kv/-/invert-kv-3.0.1.tgz",
+      "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw=="
+    },
+    "ipaddr.js": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+      "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+      "dev": true
+    },
+    "is-array-buffer": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmmirror.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
+      "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "get-intrinsic": "^1.2.1"
+      }
+    },
+    "is-arrayish": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz",
+      "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+      "dev": true,
+      "peer": true
+    },
+    "is-bigint": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/is-bigint/-/is-bigint-1.0.4.tgz",
+      "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+      "dev": true,
+      "requires": {
+        "has-bigints": "^1.0.1"
+      }
+    },
+    "is-binary-path": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz",
+      "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+      "requires": {
+        "binary-extensions": "^2.0.0"
+      }
+    },
+    "is-boolean-object": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+      "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "has-tostringtag": "^1.0.0"
+      }
+    },
+    "is-builtin-module": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmmirror.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
+      "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
+      "dev": true,
+      "requires": {
+        "builtin-modules": "^3.3.0"
+      }
+    },
+    "is-callable": {
+      "version": "1.2.7",
+      "resolved": "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.7.tgz",
+      "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+      "dev": true
+    },
+    "is-core-module": {
+      "version": "2.13.1",
+      "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.13.1.tgz",
+      "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
+      "requires": {
+        "hasown": "^2.0.0"
+      }
+    },
+    "is-date-object": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz",
+      "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+      "dev": true,
+      "requires": {
+        "has-tostringtag": "^1.0.0"
+      }
+    },
+    "is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz",
+      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
+    },
+    "is-fullwidth-code-point": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+      "dev": true,
+      "peer": true
+    },
+    "is-function": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/is-function/-/is-function-1.0.2.tgz",
+      "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ=="
+    },
+    "is-generator-fn": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
+      "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
+      "dev": true,
+      "peer": true
+    },
+    "is-glob": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz",
+      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+      "requires": {
+        "is-extglob": "^2.1.1"
+      }
+    },
+    "is-negative-zero": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
+      "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+      "dev": true
+    },
+    "is-number": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz",
+      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+    },
+    "is-number-object": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmmirror.com/is-number-object/-/is-number-object-1.0.7.tgz",
+      "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+      "dev": true,
+      "requires": {
+        "has-tostringtag": "^1.0.0"
+      }
+    },
+    "is-path-inside": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-3.0.3.tgz",
+      "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ=="
+    },
+    "is-potential-custom-element-name": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
+      "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
+      "dev": true,
+      "peer": true
+    },
+    "is-regex": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/is-regex/-/is-regex-1.1.4.tgz",
+      "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "has-tostringtag": "^1.0.0"
+      }
+    },
+    "is-shared-array-buffer": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+      "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2"
+      }
+    },
+    "is-stream": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz",
+      "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+      "dev": true
+    },
+    "is-string": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmmirror.com/is-string/-/is-string-1.0.7.tgz",
+      "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+      "dev": true,
+      "requires": {
+        "has-tostringtag": "^1.0.0"
+      }
+    },
+    "is-symbol": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/is-symbol/-/is-symbol-1.0.4.tgz",
+      "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+      "dev": true,
+      "requires": {
+        "has-symbols": "^1.0.2"
+      }
+    },
+    "is-typed-array": {
+      "version": "1.1.13",
+      "resolved": "https://registry.npmmirror.com/is-typed-array/-/is-typed-array-1.1.13.tgz",
+      "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
+      "dev": true,
+      "requires": {
+        "which-typed-array": "^1.1.14"
+      }
+    },
+    "is-typedarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/is-typedarray/-/is-typedarray-1.0.0.tgz",
+      "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
+      "dev": true,
+      "peer": true
+    },
+    "is-weakref": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz",
+      "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2"
+      }
+    },
+    "isarray": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmmirror.com/isarray/-/isarray-2.0.5.tgz",
+      "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+      "dev": true
+    },
+    "isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+    },
+    "istanbul-lib-coverage": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmmirror.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
+      "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
+      "dev": true,
+      "peer": true
+    },
+    "istanbul-lib-instrument": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmmirror.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
+      "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@babel/core": "^7.12.3",
+        "@babel/parser": "^7.14.7",
+        "@istanbuljs/schema": "^0.1.2",
+        "istanbul-lib-coverage": "^3.2.0",
+        "semver": "^6.3.0"
+      }
+    },
+    "istanbul-lib-report": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
+      "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "istanbul-lib-coverage": "^3.0.0",
+        "make-dir": "^4.0.0",
+        "supports-color": "^7.1.0"
+      },
+      "dependencies": {
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "peer": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "istanbul-lib-source-maps": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmmirror.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
+      "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "debug": "^4.1.1",
+        "istanbul-lib-coverage": "^3.0.0",
+        "source-map": "^0.6.1"
+      }
+    },
+    "istanbul-reports": {
+      "version": "3.1.6",
+      "resolved": "https://registry.npmmirror.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz",
+      "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "html-escaper": "^2.0.0",
+        "istanbul-lib-report": "^3.0.0"
+      }
+    },
+    "jest": {
+      "version": "27.0.4",
+      "resolved": "https://registry.npmmirror.com/jest/-/jest-27.0.4.tgz",
+      "integrity": "sha512-Px1iKFooXgGSkk1H8dJxxBIrM3tsc5SIuI4kfKYK2J+4rvCvPGr/cXktxh0e9zIPQ5g09kOMNfHQEmusBUf/ZA==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@jest/core": "^27.0.4",
+        "import-local": "^3.0.2",
+        "jest-cli": "^27.0.4"
+      }
+    },
+    "jest-changed-files": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz",
+      "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@jest/types": "^27.5.1",
+        "execa": "^5.0.0",
+        "throat": "^6.0.1"
+      }
+    },
+    "jest-circus": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-circus/-/jest-circus-27.5.1.tgz",
+      "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@jest/environment": "^27.5.1",
+        "@jest/test-result": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "co": "^4.6.0",
+        "dedent": "^0.7.0",
+        "expect": "^27.5.1",
+        "is-generator-fn": "^2.0.0",
+        "jest-each": "^27.5.1",
+        "jest-matcher-utils": "^27.5.1",
+        "jest-message-util": "^27.5.1",
+        "jest-runtime": "^27.5.1",
+        "jest-snapshot": "^27.5.1",
+        "jest-util": "^27.5.1",
+        "pretty-format": "^27.5.1",
+        "slash": "^3.0.0",
+        "stack-utils": "^2.0.3",
+        "throat": "^6.0.1"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "peer": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "peer": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "jest-cli": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-cli/-/jest-cli-27.5.1.tgz",
+      "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@jest/core": "^27.5.1",
+        "@jest/test-result": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "chalk": "^4.0.0",
+        "exit": "^0.1.2",
+        "graceful-fs": "^4.2.9",
+        "import-local": "^3.0.2",
+        "jest-config": "^27.5.1",
+        "jest-util": "^27.5.1",
+        "jest-validate": "^27.5.1",
+        "prompts": "^2.0.1",
+        "yargs": "^16.2.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "peer": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "peer": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "jest-config": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-config/-/jest-config-27.5.1.tgz",
+      "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@babel/core": "^7.8.0",
+        "@jest/test-sequencer": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "babel-jest": "^27.5.1",
+        "chalk": "^4.0.0",
+        "ci-info": "^3.2.0",
+        "deepmerge": "^4.2.2",
+        "glob": "^7.1.1",
+        "graceful-fs": "^4.2.9",
+        "jest-circus": "^27.5.1",
+        "jest-environment-jsdom": "^27.5.1",
+        "jest-environment-node": "^27.5.1",
+        "jest-get-type": "^27.5.1",
+        "jest-jasmine2": "^27.5.1",
+        "jest-regex-util": "^27.5.1",
+        "jest-resolve": "^27.5.1",
+        "jest-runner": "^27.5.1",
+        "jest-util": "^27.5.1",
+        "jest-validate": "^27.5.1",
+        "micromatch": "^4.0.4",
+        "parse-json": "^5.2.0",
+        "pretty-format": "^27.5.1",
+        "slash": "^3.0.0",
+        "strip-json-comments": "^3.1.1"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "peer": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "peer": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "jest-diff": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-diff/-/jest-diff-27.5.1.tgz",
+      "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "chalk": "^4.0.0",
+        "diff-sequences": "^27.5.1",
+        "jest-get-type": "^27.5.1",
+        "pretty-format": "^27.5.1"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "peer": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "peer": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "jest-docblock": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-docblock/-/jest-docblock-27.5.1.tgz",
+      "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "detect-newline": "^3.0.0"
+      }
+    },
+    "jest-each": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-each/-/jest-each-27.5.1.tgz",
+      "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@jest/types": "^27.5.1",
+        "chalk": "^4.0.0",
+        "jest-get-type": "^27.5.1",
+        "jest-util": "^27.5.1",
+        "pretty-format": "^27.5.1"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "peer": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "peer": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "jest-environment-jsdom": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz",
+      "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@jest/environment": "^27.5.1",
+        "@jest/fake-timers": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "@types/node": "*",
+        "jest-mock": "^27.5.1",
+        "jest-util": "^27.5.1",
+        "jsdom": "^16.6.0"
+      }
+    },
+    "jest-environment-node": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz",
+      "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@jest/environment": "^27.5.1",
+        "@jest/fake-timers": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "@types/node": "*",
+        "jest-mock": "^27.5.1",
+        "jest-util": "^27.5.1"
+      }
+    },
+    "jest-get-type": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-get-type/-/jest-get-type-27.5.1.tgz",
+      "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==",
+      "dev": true,
+      "peer": true
+    },
+    "jest-haste-map": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz",
+      "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@jest/types": "^27.5.1",
+        "@types/graceful-fs": "^4.1.2",
+        "@types/node": "*",
+        "anymatch": "^3.0.3",
+        "fb-watchman": "^2.0.0",
+        "fsevents": "^2.3.2",
+        "graceful-fs": "^4.2.9",
+        "jest-regex-util": "^27.5.1",
+        "jest-serializer": "^27.5.1",
+        "jest-util": "^27.5.1",
+        "jest-worker": "^27.5.1",
+        "micromatch": "^4.0.4",
+        "walker": "^1.0.7"
+      }
+    },
+    "jest-jasmine2": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz",
+      "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@jest/environment": "^27.5.1",
+        "@jest/source-map": "^27.5.1",
+        "@jest/test-result": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "co": "^4.6.0",
+        "expect": "^27.5.1",
+        "is-generator-fn": "^2.0.0",
+        "jest-each": "^27.5.1",
+        "jest-matcher-utils": "^27.5.1",
+        "jest-message-util": "^27.5.1",
+        "jest-runtime": "^27.5.1",
+        "jest-snapshot": "^27.5.1",
+        "jest-util": "^27.5.1",
+        "pretty-format": "^27.5.1",
+        "throat": "^6.0.1"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "peer": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "peer": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "jest-leak-detector": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz",
+      "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "jest-get-type": "^27.5.1",
+        "pretty-format": "^27.5.1"
+      }
+    },
+    "jest-matcher-utils": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz",
+      "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "chalk": "^4.0.0",
+        "jest-diff": "^27.5.1",
+        "jest-get-type": "^27.5.1",
+        "pretty-format": "^27.5.1"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "peer": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "peer": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "jest-message-util": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-message-util/-/jest-message-util-27.5.1.tgz",
+      "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@babel/code-frame": "^7.12.13",
+        "@jest/types": "^27.5.1",
+        "@types/stack-utils": "^2.0.0",
+        "chalk": "^4.0.0",
+        "graceful-fs": "^4.2.9",
+        "micromatch": "^4.0.4",
+        "pretty-format": "^27.5.1",
+        "slash": "^3.0.0",
+        "stack-utils": "^2.0.3"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "peer": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "peer": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "jest-mock": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-mock/-/jest-mock-27.5.1.tgz",
+      "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@jest/types": "^27.5.1",
+        "@types/node": "*"
+      }
+    },
+    "jest-pnp-resolver": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmmirror.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
+      "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
+      "dev": true,
+      "peer": true,
+      "requires": {}
+    },
+    "jest-regex-util": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz",
+      "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==",
+      "dev": true,
+      "peer": true
+    },
+    "jest-resolve": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-resolve/-/jest-resolve-27.5.1.tgz",
+      "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@jest/types": "^27.5.1",
+        "chalk": "^4.0.0",
+        "graceful-fs": "^4.2.9",
+        "jest-haste-map": "^27.5.1",
+        "jest-pnp-resolver": "^1.2.2",
+        "jest-util": "^27.5.1",
+        "jest-validate": "^27.5.1",
+        "resolve": "^1.20.0",
+        "resolve.exports": "^1.1.0",
+        "slash": "^3.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "peer": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "peer": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "jest-resolve-dependencies": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz",
+      "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@jest/types": "^27.5.1",
+        "jest-regex-util": "^27.5.1",
+        "jest-snapshot": "^27.5.1"
+      }
+    },
+    "jest-runner": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-runner/-/jest-runner-27.5.1.tgz",
+      "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@jest/console": "^27.5.1",
+        "@jest/environment": "^27.5.1",
+        "@jest/test-result": "^27.5.1",
+        "@jest/transform": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "emittery": "^0.8.1",
+        "graceful-fs": "^4.2.9",
+        "jest-docblock": "^27.5.1",
+        "jest-environment-jsdom": "^27.5.1",
+        "jest-environment-node": "^27.5.1",
+        "jest-haste-map": "^27.5.1",
+        "jest-leak-detector": "^27.5.1",
+        "jest-message-util": "^27.5.1",
+        "jest-resolve": "^27.5.1",
+        "jest-runtime": "^27.5.1",
+        "jest-util": "^27.5.1",
+        "jest-worker": "^27.5.1",
+        "source-map-support": "^0.5.6",
+        "throat": "^6.0.1"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "peer": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "peer": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "jest-runtime": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-runtime/-/jest-runtime-27.5.1.tgz",
+      "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@jest/environment": "^27.5.1",
+        "@jest/fake-timers": "^27.5.1",
+        "@jest/globals": "^27.5.1",
+        "@jest/source-map": "^27.5.1",
+        "@jest/test-result": "^27.5.1",
+        "@jest/transform": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "chalk": "^4.0.0",
+        "cjs-module-lexer": "^1.0.0",
+        "collect-v8-coverage": "^1.0.0",
+        "execa": "^5.0.0",
+        "glob": "^7.1.3",
+        "graceful-fs": "^4.2.9",
+        "jest-haste-map": "^27.5.1",
+        "jest-message-util": "^27.5.1",
+        "jest-mock": "^27.5.1",
+        "jest-regex-util": "^27.5.1",
+        "jest-resolve": "^27.5.1",
+        "jest-snapshot": "^27.5.1",
+        "jest-util": "^27.5.1",
+        "slash": "^3.0.0",
+        "strip-bom": "^4.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "peer": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "peer": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "jest-serializer": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-serializer/-/jest-serializer-27.5.1.tgz",
+      "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@types/node": "*",
+        "graceful-fs": "^4.2.9"
+      }
+    },
+    "jest-snapshot": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz",
+      "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@babel/core": "^7.7.2",
+        "@babel/generator": "^7.7.2",
+        "@babel/plugin-syntax-typescript": "^7.7.2",
+        "@babel/traverse": "^7.7.2",
+        "@babel/types": "^7.0.0",
+        "@jest/transform": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "@types/babel__traverse": "^7.0.4",
+        "@types/prettier": "^2.1.5",
+        "babel-preset-current-node-syntax": "^1.0.0",
+        "chalk": "^4.0.0",
+        "expect": "^27.5.1",
+        "graceful-fs": "^4.2.9",
+        "jest-diff": "^27.5.1",
+        "jest-get-type": "^27.5.1",
+        "jest-haste-map": "^27.5.1",
+        "jest-matcher-utils": "^27.5.1",
+        "jest-message-util": "^27.5.1",
+        "jest-util": "^27.5.1",
+        "natural-compare": "^1.4.0",
+        "pretty-format": "^27.5.1",
+        "semver": "^7.3.2"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "peer": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "peer": true
+        },
+        "lru-cache": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
+          "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "yallist": "^4.0.0"
+          }
+        },
+        "semver": {
+          "version": "7.6.0",
+          "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.0.tgz",
+          "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "lru-cache": "^6.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        },
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+          "dev": true,
+          "peer": true
+        }
+      }
+    },
+    "jest-util": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-util/-/jest-util-27.5.1.tgz",
+      "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@jest/types": "^27.5.1",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "ci-info": "^3.2.0",
+        "graceful-fs": "^4.2.9",
+        "picomatch": "^2.2.3"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "peer": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "peer": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "jest-validate": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-validate/-/jest-validate-27.5.1.tgz",
+      "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@jest/types": "^27.5.1",
+        "camelcase": "^6.2.0",
+        "chalk": "^4.0.0",
+        "jest-get-type": "^27.5.1",
+        "leven": "^3.1.0",
+        "pretty-format": "^27.5.1"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "peer": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "peer": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "jest-watcher": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-watcher/-/jest-watcher-27.5.1.tgz",
+      "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@jest/test-result": "^27.5.1",
+        "@jest/types": "^27.5.1",
+        "@types/node": "*",
+        "ansi-escapes": "^4.2.1",
+        "chalk": "^4.0.0",
+        "jest-util": "^27.5.1",
+        "string-length": "^4.0.1"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "peer": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "peer": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "jest-worker": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz",
+      "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
+      "peer": true,
+      "requires": {
+        "@types/node": "*",
+        "merge-stream": "^2.0.0",
+        "supports-color": "^8.0.0"
+      },
+      "dependencies": {
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "peer": true
+        },
+        "supports-color": {
+          "version": "8.1.1",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz",
+          "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+          "peer": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "jimp": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/jimp/-/jimp-0.10.3.tgz",
+      "integrity": "sha512-meVWmDMtyUG5uYjFkmzu0zBgnCvvxwWNi27c4cg55vWNVC9ES4Lcwb+ogx+uBBQE3Q+dLKjXaLl0JVW+nUNwbQ==",
+      "requires": {
+        "@babel/runtime": "^7.7.2",
+        "@jimp/custom": "^0.10.3",
+        "@jimp/plugins": "^0.10.3",
+        "@jimp/types": "^0.10.3",
+        "core-js": "^3.4.1",
+        "regenerator-runtime": "^0.13.3"
+      }
+    },
+    "jpeg-js": {
+      "version": "0.3.7",
+      "resolved": "https://registry.npmmirror.com/jpeg-js/-/jpeg-js-0.3.7.tgz",
+      "integrity": "sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ=="
+    },
+    "js-tokens": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz",
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+    },
+    "js-yaml": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz",
+      "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+      "requires": {
+        "argparse": "^2.0.1"
+      }
+    },
+    "jsdom": {
+      "version": "16.7.0",
+      "resolved": "https://registry.npmmirror.com/jsdom/-/jsdom-16.7.0.tgz",
+      "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "abab": "^2.0.5",
+        "acorn": "^8.2.4",
+        "acorn-globals": "^6.0.0",
+        "cssom": "^0.4.4",
+        "cssstyle": "^2.3.0",
+        "data-urls": "^2.0.0",
+        "decimal.js": "^10.2.1",
+        "domexception": "^2.0.1",
+        "escodegen": "^2.0.0",
+        "form-data": "^3.0.0",
+        "html-encoding-sniffer": "^2.0.1",
+        "http-proxy-agent": "^4.0.1",
+        "https-proxy-agent": "^5.0.0",
+        "is-potential-custom-element-name": "^1.0.1",
+        "nwsapi": "^2.2.0",
+        "parse5": "6.0.1",
+        "saxes": "^5.0.1",
+        "symbol-tree": "^3.2.4",
+        "tough-cookie": "^4.0.0",
+        "w3c-hr-time": "^1.0.2",
+        "w3c-xmlserializer": "^2.0.0",
+        "webidl-conversions": "^6.1.0",
+        "whatwg-encoding": "^1.0.5",
+        "whatwg-mimetype": "^2.3.0",
+        "whatwg-url": "^8.5.0",
+        "ws": "^7.4.6",
+        "xml-name-validator": "^3.0.0"
+      },
+      "dependencies": {
+        "ws": {
+          "version": "7.5.9",
+          "resolved": "https://registry.npmmirror.com/ws/-/ws-7.5.9.tgz",
+          "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
+          "dev": true,
+          "peer": true,
+          "requires": {}
+        },
+        "xml-name-validator": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
+          "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
+          "dev": true,
+          "peer": true
+        }
+      }
+    },
+    "jsesc": {
+      "version": "2.5.2",
+      "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz",
+      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
+    },
+    "json-buffer": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz",
+      "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
+    },
+    "json-parse-even-better-errors": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+      "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+      "peer": true
+    },
+    "json-schema-traverse": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+    },
+    "json-stable-stringify-without-jsonify": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+      "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="
+    },
+    "json5": {
+      "version": "2.2.3",
+      "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz",
+      "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="
+    },
+    "jsonc-parser": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz",
+      "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA=="
+    },
+    "jsonfile": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz",
+      "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+      "requires": {
+        "graceful-fs": "^4.1.6",
+        "universalify": "^2.0.0"
+      }
+    },
+    "keyv": {
+      "version": "4.5.4",
+      "resolved": "https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz",
+      "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+      "requires": {
+        "json-buffer": "3.0.1"
+      }
+    },
+    "kleur": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmmirror.com/kleur/-/kleur-3.0.3.tgz",
+      "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+      "dev": true,
+      "peer": true
+    },
+    "lcid": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/lcid/-/lcid-3.1.1.tgz",
+      "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==",
+      "requires": {
+        "invert-kv": "^3.0.0"
+      }
+    },
+    "leven": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/leven/-/leven-3.1.0.tgz",
+      "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
+      "dev": true,
+      "peer": true
+    },
+    "levn": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz",
+      "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+      "requires": {
+        "prelude-ls": "^1.2.1",
+        "type-check": "~0.4.0"
+      }
+    },
+    "licia": {
+      "version": "1.39.2",
+      "resolved": "https://registry.npmmirror.com/licia/-/licia-1.39.2.tgz",
+      "integrity": "sha512-4pte7gXufSAa3JcsR0iT+2Lj2RX5Qpj+Nc0n84xs0ynNmw7eJmeZzk2oPTEtsQqwHwtT+NiX0arGkL5HPjTs7g=="
+    },
+    "lilconfig": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz",
+      "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ=="
+    },
+    "lines-and-columns": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+      "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+      "dev": true,
+      "peer": true
+    },
+    "load-bmfont": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/load-bmfont/-/load-bmfont-1.4.1.tgz",
+      "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==",
+      "requires": {
+        "buffer-equal": "0.0.1",
+        "mime": "^1.3.4",
+        "parse-bmfont-ascii": "^1.0.3",
+        "parse-bmfont-binary": "^1.0.5",
+        "parse-bmfont-xml": "^1.1.4",
+        "phin": "^2.9.1",
+        "xhr": "^2.0.1",
+        "xtend": "^4.0.0"
+      },
+      "dependencies": {
+        "mime": {
+          "version": "1.6.0",
+          "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz",
+          "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+        }
+      }
+    },
+    "loader-runner": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.0.tgz",
+      "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
+      "peer": true
+    },
+    "loader-utils": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-3.2.1.tgz",
+      "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw=="
+    },
+    "localstorage-polyfill": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/localstorage-polyfill/-/localstorage-polyfill-1.0.1.tgz",
+      "integrity": "sha512-m4iHVZxFH5734oQcPKU08025gIz2+4bjWR9lulP8ZYxEJR0BpA0w32oJmkzh8y3UI9ci7xCBehQDc3oA1X+VHw=="
+    },
+    "locate-path": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz",
+      "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+      "requires": {
+        "p-locate": "^5.0.0"
+      }
+    },
+    "lodash": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
+      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+      "dev": true
+    },
+    "lodash.camelcase": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+      "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="
+    },
+    "lodash.debounce": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+      "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
+      "dev": true
+    },
+    "lodash.merge": {
+      "version": "4.6.2",
+      "resolved": "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz",
+      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
+    },
+    "lru-cache": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz",
+      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+      "requires": {
+        "yallist": "^3.0.2"
+      }
+    },
+    "magic-string": {
+      "version": "0.30.7",
+      "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.7.tgz",
+      "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==",
+      "requires": {
+        "@jridgewell/sourcemap-codec": "^1.4.15"
+      }
+    },
+    "make-dir": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-4.0.0.tgz",
+      "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "semver": "^7.5.3"
+      },
+      "dependencies": {
+        "lru-cache": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
+          "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "yallist": "^4.0.0"
+          }
+        },
+        "semver": {
+          "version": "7.6.0",
+          "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.0.tgz",
+          "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "lru-cache": "^6.0.0"
+          }
+        },
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+          "dev": true,
+          "peer": true
+        }
+      }
+    },
+    "makeerror": {
+      "version": "1.0.12",
+      "resolved": "https://registry.npmmirror.com/makeerror/-/makeerror-1.0.12.tgz",
+      "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "tmpl": "1.0.5"
+      }
+    },
+    "media-typer": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz",
+      "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+      "dev": true
+    },
+    "merge": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/merge/-/merge-2.1.1.tgz",
+      "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w=="
+    },
+    "merge-descriptors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+      "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==",
+      "dev": true
+    },
+    "merge-stream": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz",
+      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
+    },
+    "merge2": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz",
+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
+    },
+    "methods": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz",
+      "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
+      "dev": true
+    },
+    "micromatch": {
+      "version": "4.0.5",
+      "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz",
+      "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+      "requires": {
+        "braces": "^3.0.2",
+        "picomatch": "^2.3.1"
+      }
+    },
+    "mime": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/mime/-/mime-3.0.0.tgz",
+      "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A=="
+    },
+    "mime-db": {
+      "version": "1.52.0",
+      "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
+      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+    },
+    "mime-types": {
+      "version": "2.1.35",
+      "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
+      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+      "requires": {
+        "mime-db": "1.52.0"
+      }
+    },
+    "mimic-fn": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz",
+      "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+      "dev": true
+    },
+    "min-document": {
+      "version": "2.19.0",
+      "resolved": "https://registry.npmmirror.com/min-document/-/min-document-2.19.0.tgz",
+      "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==",
+      "requires": {
+        "dom-walk": "^0.1.0"
+      }
+    },
+    "minimatch": {
+      "version": "9.0.3",
+      "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.3.tgz",
+      "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+      "dev": true,
+      "requires": {
+        "brace-expansion": "^2.0.1"
+      }
+    },
+    "minimist": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz",
+      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="
+    },
+    "mkdirp": {
+      "version": "0.5.6",
+      "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz",
+      "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+      "requires": {
+        "minimist": "^1.2.6"
+      }
+    },
+    "module-alias": {
+      "version": "2.2.3",
+      "resolved": "https://registry.npmmirror.com/module-alias/-/module-alias-2.2.3.tgz",
+      "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q=="
+    },
+    "ms": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
+      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+    },
+    "muggle-string": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmmirror.com/muggle-string/-/muggle-string-0.3.1.tgz",
+      "integrity": "sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==",
+      "dev": true
+    },
+    "nanoid": {
+      "version": "3.3.7",
+      "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz",
+      "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g=="
+    },
+    "natural-compare": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz",
+      "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="
+    },
+    "negotiator": {
+      "version": "0.6.3",
+      "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz",
+      "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+      "dev": true
+    },
+    "neo-async": {
+      "version": "2.6.2",
+      "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz",
+      "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
+    },
+    "node-int64": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmmirror.com/node-int64/-/node-int64-0.4.0.tgz",
+      "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
+      "dev": true,
+      "peer": true
+    },
+    "node-releases": {
+      "version": "2.0.14",
+      "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.14.tgz",
+      "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw=="
+    },
+    "normalize-path": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz",
+      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+    },
+    "normalize-range": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz",
+      "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA=="
+    },
+    "npm-run-path": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz",
+      "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+      "dev": true,
+      "requires": {
+        "path-key": "^3.0.0"
+      }
+    },
+    "nth-check": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz",
+      "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+      "dev": true,
+      "requires": {
+        "boolbase": "^1.0.0"
+      }
+    },
+    "nwsapi": {
+      "version": "2.2.7",
+      "resolved": "https://registry.npmmirror.com/nwsapi/-/nwsapi-2.2.7.tgz",
+      "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==",
+      "dev": true,
+      "peer": true
+    },
+    "object-inspect": {
+      "version": "1.13.1",
+      "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.1.tgz",
+      "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ=="
+    },
+    "object-keys": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz",
+      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+      "dev": true
+    },
+    "object.assign": {
+      "version": "4.1.5",
+      "resolved": "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.5.tgz",
+      "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.5",
+        "define-properties": "^1.2.1",
+        "has-symbols": "^1.0.3",
+        "object-keys": "^1.1.1"
+      }
+    },
+    "object.fromentries": {
+      "version": "2.0.7",
+      "resolved": "https://registry.npmmirror.com/object.fromentries/-/object.fromentries-2.0.7.tgz",
+      "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1"
+      }
+    },
+    "object.groupby": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/object.groupby/-/object.groupby-1.0.2.tgz",
+      "integrity": "sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==",
+      "dev": true,
+      "requires": {
+        "array.prototype.filter": "^1.0.3",
+        "call-bind": "^1.0.5",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.22.3",
+        "es-errors": "^1.0.0"
+      }
+    },
+    "object.values": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmmirror.com/object.values/-/object.values-1.1.7.tgz",
+      "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1"
+      }
+    },
+    "omggif": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmmirror.com/omggif/-/omggif-1.0.10.tgz",
+      "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw=="
+    },
+    "on-finished": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz",
+      "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+      "dev": true,
+      "requires": {
+        "ee-first": "1.1.1"
+      }
+    },
+    "once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz",
+      "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+      "requires": {
+        "wrappy": "1"
+      }
+    },
+    "onetime": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz",
+      "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+      "dev": true,
+      "requires": {
+        "mimic-fn": "^2.1.0"
+      }
+    },
+    "optionator": {
+      "version": "0.9.3",
+      "resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.9.3.tgz",
+      "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
+      "requires": {
+        "@aashutoshrathi/word-wrap": "^1.2.3",
+        "deep-is": "^0.1.3",
+        "fast-levenshtein": "^2.0.6",
+        "levn": "^0.4.1",
+        "prelude-ls": "^1.2.1",
+        "type-check": "^0.4.0"
+      }
+    },
+    "os-locale-s-fix": {
+      "version": "1.0.8-fix-1",
+      "resolved": "https://registry.npmmirror.com/os-locale-s-fix/-/os-locale-s-fix-1.0.8-fix-1.tgz",
+      "integrity": "sha512-Sv0OvhPiMutICiwORAUefv02DCPb62IelBmo8ZsSrRHyI3FStqIWZvjqDkvtjU+lcujo7UNir+dCwKSqlEQ/5w==",
+      "requires": {
+        "lcid": "^3.0.0"
+      }
+    },
+    "p-limit": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz",
+      "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+      "requires": {
+        "yocto-queue": "^0.1.0"
+      }
+    },
+    "p-locate": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz",
+      "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+      "requires": {
+        "p-limit": "^3.0.2"
+      }
+    },
+    "p-try": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz",
+      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+      "dev": true,
+      "peer": true
+    },
+    "pako": {
+      "version": "1.0.11",
+      "resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz",
+      "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
+    },
+    "parent-module": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz",
+      "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+      "requires": {
+        "callsites": "^3.0.0"
+      }
+    },
+    "parse-bmfont-ascii": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmmirror.com/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz",
+      "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA=="
+    },
+    "parse-bmfont-binary": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmmirror.com/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz",
+      "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA=="
+    },
+    "parse-bmfont-xml": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz",
+      "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==",
+      "requires": {
+        "xml-parse-from-string": "^1.0.0",
+        "xml2js": "^0.4.5"
+      }
+    },
+    "parse-css-font": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/parse-css-font/-/parse-css-font-4.0.0.tgz",
+      "integrity": "sha512-lnY7dTUfjRXsSo5G5C639L8RaBBaVSgL+5hacIFKsNHzeCJQ5SFSZv1DZmc7+wZv/22PFGOq2YbaEHLdaCS/mQ==",
+      "requires": {
+        "css-font-size-keywords": "^1.0.0",
+        "css-font-stretch-keywords": "^1.0.1",
+        "css-font-style-keywords": "^1.0.1",
+        "css-font-weight-keywords": "^1.0.0",
+        "css-list-helpers": "^2.0.0",
+        "css-system-font-keywords": "^1.0.0",
+        "unquote": "^1.1.1"
+      }
+    },
+    "parse-headers": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmmirror.com/parse-headers/-/parse-headers-2.0.5.tgz",
+      "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA=="
+    },
+    "parse-json": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz",
+      "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@babel/code-frame": "^7.0.0",
+        "error-ex": "^1.3.1",
+        "json-parse-even-better-errors": "^2.3.0",
+        "lines-and-columns": "^1.1.6"
+      }
+    },
+    "parse5": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz",
+      "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
+      "dev": true,
+      "peer": true
+    },
+    "parseurl": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz",
+      "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+      "dev": true
+    },
+    "path-browserify": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/path-browserify/-/path-browserify-1.0.1.tgz",
+      "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
+      "dev": true
+    },
+    "path-exists": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz",
+      "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
+    },
+    "path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+    },
+    "path-key": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz",
+      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
+    },
+    "path-parse": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz",
+      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+    },
+    "path-to-regexp": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+      "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==",
+      "dev": true
+    },
+    "path-type": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz",
+      "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+      "dev": true
+    },
+    "phin": {
+      "version": "2.9.3",
+      "resolved": "https://registry.npmmirror.com/phin/-/phin-2.9.3.tgz",
+      "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA=="
+    },
+    "picocolors": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz",
+      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+    },
+    "picomatch": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz",
+      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
+    },
+    "pify": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz",
+      "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="
+    },
+    "pinia": {
+      "version": "2.0.36",
+      "resolved": "https://registry.npmmirror.com/pinia/-/pinia-2.0.36.tgz",
+      "integrity": "sha512-4UKApwjlmJH+VuHKgA+zQMddcCb3ezYnyewQ9NVrsDqZ/j9dMv5+rh+1r48whKNdpFkZAWVxhBp5ewYaYX9JcQ==",
+      "requires": {
+        "@vue/devtools-api": "^6.5.0",
+        "vue-demi": "*"
+      },
+      "dependencies": {
+        "vue-demi": {
+          "version": "0.14.7",
+          "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.7.tgz",
+          "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==",
+          "requires": {}
+        }
+      }
+    },
+    "pinia-plugin-persistedstate": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmmirror.com/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-3.2.1.tgz",
+      "integrity": "sha512-MK++8LRUsGF7r45PjBFES82ISnPzyO6IZx3CH5vyPseFLZCk1g2kgx6l/nW8pEBKxxd4do0P6bJw+mUSZIEZUQ==",
+      "requires": {}
+    },
+    "pirates": {
+      "version": "4.0.6",
+      "resolved": "https://registry.npmmirror.com/pirates/-/pirates-4.0.6.tgz",
+      "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
+      "dev": true,
+      "peer": true
+    },
+    "pixelmatch": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmmirror.com/pixelmatch/-/pixelmatch-4.0.2.tgz",
+      "integrity": "sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==",
+      "requires": {
+        "pngjs": "^3.0.0"
+      }
+    },
+    "pkg-dir": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz",
+      "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "find-up": "^4.0.0"
+      },
+      "dependencies": {
+        "find-up": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz",
+          "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "locate-path": "^5.0.0",
+            "path-exists": "^4.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz",
+          "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "p-locate": "^4.1.0"
+          }
+        },
+        "p-limit": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz",
+          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "p-try": "^2.0.0"
+          }
+        },
+        "p-locate": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz",
+          "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "p-limit": "^2.2.0"
+          }
+        }
+      }
+    },
+    "pngjs": {
+      "version": "3.4.0",
+      "resolved": "https://registry.npmmirror.com/pngjs/-/pngjs-3.4.0.tgz",
+      "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w=="
+    },
+    "postcss": {
+      "version": "8.4.35",
+      "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.35.tgz",
+      "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==",
+      "requires": {
+        "nanoid": "^3.3.7",
+        "picocolors": "^1.0.0",
+        "source-map-js": "^1.0.2"
+      }
+    },
+    "postcss-import": {
+      "version": "14.1.0",
+      "resolved": "https://registry.npmmirror.com/postcss-import/-/postcss-import-14.1.0.tgz",
+      "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==",
+      "requires": {
+        "postcss-value-parser": "^4.0.0",
+        "read-cache": "^1.0.0",
+        "resolve": "^1.1.7"
+      }
+    },
+    "postcss-load-config": {
+      "version": "3.1.4",
+      "resolved": "https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
+      "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
+      "requires": {
+        "lilconfig": "^2.0.5",
+        "yaml": "^1.10.2"
+      }
+    },
+    "postcss-modules": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmmirror.com/postcss-modules/-/postcss-modules-4.3.1.tgz",
+      "integrity": "sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==",
+      "requires": {
+        "generic-names": "^4.0.0",
+        "icss-replace-symbols": "^1.1.0",
+        "lodash.camelcase": "^4.3.0",
+        "postcss-modules-extract-imports": "^3.0.0",
+        "postcss-modules-local-by-default": "^4.0.0",
+        "postcss-modules-scope": "^3.0.0",
+        "postcss-modules-values": "^4.0.0",
+        "string-hash": "^1.1.1"
+      }
+    },
+    "postcss-modules-extract-imports": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz",
+      "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==",
+      "requires": {}
+    },
+    "postcss-modules-local-by-default": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npmmirror.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz",
+      "integrity": "sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==",
+      "requires": {
+        "icss-utils": "^5.0.0",
+        "postcss-selector-parser": "^6.0.2",
+        "postcss-value-parser": "^4.1.0"
+      }
+    },
+    "postcss-modules-scope": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz",
+      "integrity": "sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==",
+      "requires": {
+        "postcss-selector-parser": "^6.0.4"
+      }
+    },
+    "postcss-modules-values": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz",
+      "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==",
+      "requires": {
+        "icss-utils": "^5.0.0"
+      }
+    },
+    "postcss-selector-parser": {
+      "version": "6.0.15",
+      "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz",
+      "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==",
+      "requires": {
+        "cssesc": "^3.0.0",
+        "util-deprecate": "^1.0.2"
+      }
+    },
+    "postcss-value-parser": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+      "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+    },
+    "prelude-ls": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz",
+      "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="
+    },
+    "prettier": {
+      "version": "3.2.5",
+      "resolved": "https://registry.npmmirror.com/prettier/-/prettier-3.2.5.tgz",
+      "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A=="
+    },
+    "prettier-linter-helpers": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
+      "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
+      "requires": {
+        "fast-diff": "^1.1.2"
+      }
+    },
+    "pretty-format": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/pretty-format/-/pretty-format-27.5.1.tgz",
+      "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "ansi-regex": "^5.0.1",
+        "ansi-styles": "^5.0.0",
+        "react-is": "^17.0.1"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-5.2.0.tgz",
+          "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+          "dev": true,
+          "peer": true
+        }
+      }
+    },
+    "process": {
+      "version": "0.11.10",
+      "resolved": "https://registry.npmmirror.com/process/-/process-0.11.10.tgz",
+      "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="
+    },
+    "prompts": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmmirror.com/prompts/-/prompts-2.4.2.tgz",
+      "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "kleur": "^3.0.3",
+        "sisteransi": "^1.0.5"
+      }
+    },
+    "proxy-addr": {
+      "version": "2.0.7",
+      "resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz",
+      "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+      "dev": true,
+      "requires": {
+        "forwarded": "0.2.0",
+        "ipaddr.js": "1.9.1"
+      }
+    },
+    "psl": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmmirror.com/psl/-/psl-1.9.0.tgz",
+      "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
+      "dev": true,
+      "peer": true
+    },
+    "punycode": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz",
+      "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="
+    },
+    "qrcode-reader": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/qrcode-reader/-/qrcode-reader-1.0.4.tgz",
+      "integrity": "sha512-rRjALGNh9zVqvweg1j5OKIQKNsw3bLC+7qwlnead5K/9cb1cEIAGkwikt/09U0K+2IDWGD9CC6SP7tHAjUeqvQ=="
+    },
+    "qrcode-terminal": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npmmirror.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz",
+      "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ=="
+    },
+    "qs": {
+      "version": "6.11.2",
+      "resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.2.tgz",
+      "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+      "requires": {
+        "side-channel": "^1.0.4"
+      }
+    },
+    "querystringify": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/querystringify/-/querystringify-2.2.0.tgz",
+      "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
+      "dev": true,
+      "peer": true
+    },
+    "queue-microtask": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz",
+      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
+    },
+    "randombytes": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz",
+      "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+      "peer": true,
+      "requires": {
+        "safe-buffer": "^5.1.0"
+      }
+    },
+    "range-parser": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz",
+      "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+      "dev": true
+    },
+    "raw-body": {
+      "version": "2.5.1",
+      "resolved": "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.1.tgz",
+      "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
+      "dev": true,
+      "requires": {
+        "bytes": "3.1.2",
+        "http-errors": "2.0.0",
+        "iconv-lite": "0.4.24",
+        "unpipe": "1.0.0"
+      }
+    },
+    "react-is": {
+      "version": "17.0.2",
+      "resolved": "https://registry.npmmirror.com/react-is/-/react-is-17.0.2.tgz",
+      "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
+      "dev": true,
+      "peer": true
+    },
+    "read-cache": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/read-cache/-/read-cache-1.0.0.tgz",
+      "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+      "requires": {
+        "pify": "^2.3.0"
+      }
+    },
+    "readdirp": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz",
+      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+      "requires": {
+        "picomatch": "^2.2.1"
+      }
+    },
+    "regenerate": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz",
+      "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
+      "dev": true
+    },
+    "regenerate-unicode-properties": {
+      "version": "10.1.1",
+      "resolved": "https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz",
+      "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==",
+      "dev": true,
+      "requires": {
+        "regenerate": "^1.4.2"
+      }
+    },
+    "regenerator-runtime": {
+      "version": "0.13.11",
+      "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+      "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
+    },
+    "regenerator-transform": {
+      "version": "0.15.2",
+      "resolved": "https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz",
+      "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==",
+      "dev": true,
+      "requires": {
+        "@babel/runtime": "^7.8.4"
+      }
+    },
+    "regexp.prototype.flags": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz",
+      "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "set-function-name": "^2.0.0"
+      }
+    },
+    "regexpu-core": {
+      "version": "5.3.2",
+      "resolved": "https://registry.npmmirror.com/regexpu-core/-/regexpu-core-5.3.2.tgz",
+      "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==",
+      "dev": true,
+      "requires": {
+        "@babel/regjsgen": "^0.8.0",
+        "regenerate": "^1.4.2",
+        "regenerate-unicode-properties": "^10.1.0",
+        "regjsparser": "^0.9.1",
+        "unicode-match-property-ecmascript": "^2.0.0",
+        "unicode-match-property-value-ecmascript": "^2.1.0"
+      }
+    },
+    "regjsparser": {
+      "version": "0.9.1",
+      "resolved": "https://registry.npmmirror.com/regjsparser/-/regjsparser-0.9.1.tgz",
+      "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
+      "dev": true,
+      "requires": {
+        "jsesc": "~0.5.0"
+      },
+      "dependencies": {
+        "jsesc": {
+          "version": "0.5.0",
+          "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-0.5.0.tgz",
+          "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
+          "dev": true
+        }
+      }
+    },
+    "require-directory": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz",
+      "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+      "dev": true,
+      "peer": true
+    },
+    "requires-port": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz",
+      "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
+      "dev": true,
+      "peer": true
+    },
+    "resolve": {
+      "version": "1.22.8",
+      "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz",
+      "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+      "requires": {
+        "is-core-module": "^2.13.0",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
+      }
+    },
+    "resolve-cwd": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
+      "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "resolve-from": "^5.0.0"
+      },
+      "dependencies": {
+        "resolve-from": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-5.0.0.tgz",
+          "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+          "dev": true,
+          "peer": true
+        }
+      }
+    },
+    "resolve-from": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz",
+      "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
+    },
+    "resolve-pkg-maps": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+      "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+      "dev": true
+    },
+    "resolve.exports": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/resolve.exports/-/resolve.exports-1.1.1.tgz",
+      "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==",
+      "dev": true,
+      "peer": true
+    },
+    "reusify": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz",
+      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
+    },
+    "rimraf": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz",
+      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+      "requires": {
+        "glob": "^7.1.3"
+      }
+    },
+    "rollup": {
+      "version": "3.29.4",
+      "resolved": "https://registry.npmmirror.com/rollup/-/rollup-3.29.4.tgz",
+      "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==",
+      "requires": {
+        "fsevents": "~2.3.2"
+      }
+    },
+    "run-parallel": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz",
+      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+      "requires": {
+        "queue-microtask": "^1.2.2"
+      }
+    },
+    "safe-area-insets": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/safe-area-insets/-/safe-area-insets-1.4.1.tgz",
+      "integrity": "sha512-r/nRWTjFGhhm3w1Z6Kd/jY11srN+lHt2mNl1E/emQGW8ic7n3Avu4noibklfSM+Y34peNphHD/BSZecav0sXYQ=="
+    },
+    "safe-array-concat": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz",
+      "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.5",
+        "get-intrinsic": "^1.2.2",
+        "has-symbols": "^1.0.3",
+        "isarray": "^2.0.5"
+      }
+    },
+    "safe-buffer": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
+    },
+    "safe-regex-test": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
+      "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.6",
+        "es-errors": "^1.3.0",
+        "is-regex": "^1.1.4"
+      }
+    },
+    "safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+      "dev": true
+    },
+    "sass": {
+      "version": "1.70.0",
+      "resolved": "https://registry.npmmirror.com/sass/-/sass-1.70.0.tgz",
+      "integrity": "sha512-uUxNQ3zAHeAx5nRFskBnrWzDUJrrvpCPD5FNAoRvTi0WwremlheES3tg+56PaVtCs5QDRX5CBLxxKMDJMEa1WQ==",
+      "requires": {
+        "chokidar": ">=3.0.0 <4.0.0",
+        "immutable": "^4.0.0",
+        "source-map-js": ">=0.6.2 <2.0.0"
+      }
+    },
+    "sass-loader": {
+      "version": "13.3.3",
+      "resolved": "https://registry.npmmirror.com/sass-loader/-/sass-loader-13.3.3.tgz",
+      "integrity": "sha512-mt5YN2F1MOZr3d/wBRcZxeFgwgkH44wVc2zohO2YF6JiOMkiXe4BYRZpSu2sO1g71mo/j16txzUhsKZlqjVGzA==",
+      "requires": {
+        "neo-async": "^2.6.2"
+      }
+    },
+    "sax": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/sax/-/sax-1.3.0.tgz",
+      "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA=="
+    },
+    "saxes": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/saxes/-/saxes-5.0.1.tgz",
+      "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "xmlchars": "^2.2.0"
+      }
+    },
+    "schema-utils": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz",
+      "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+      "peer": true,
+      "requires": {
+        "@types/json-schema": "^7.0.8",
+        "ajv": "^6.12.5",
+        "ajv-keywords": "^3.5.2"
+      }
+    },
+    "semver": {
+      "version": "6.3.1",
+      "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="
+    },
+    "send": {
+      "version": "0.18.0",
+      "resolved": "https://registry.npmmirror.com/send/-/send-0.18.0.tgz",
+      "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+      "dev": true,
+      "requires": {
+        "debug": "2.6.9",
+        "depd": "2.0.0",
+        "destroy": "1.2.0",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "fresh": "0.5.2",
+        "http-errors": "2.0.0",
+        "mime": "1.6.0",
+        "ms": "2.1.3",
+        "on-finished": "2.4.1",
+        "range-parser": "~1.2.1",
+        "statuses": "2.0.1"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmmirror.com/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.npmmirror.com/ms/-/ms-2.0.0.tgz",
+              "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+              "dev": true
+            }
+          }
+        },
+        "mime": {
+          "version": "1.6.0",
+          "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz",
+          "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+          "dev": true
+        },
+        "ms": {
+          "version": "2.1.3",
+          "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
+          "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+          "dev": true
+        }
+      }
+    },
+    "serialize-javascript": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
+      "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
+      "peer": true,
+      "requires": {
+        "randombytes": "^2.1.0"
+      }
+    },
+    "serve-static": {
+      "version": "1.15.0",
+      "resolved": "https://registry.npmmirror.com/serve-static/-/serve-static-1.15.0.tgz",
+      "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
+      "dev": true,
+      "requires": {
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "parseurl": "~1.3.3",
+        "send": "0.18.0"
+      }
+    },
+    "set-function-length": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/set-function-length/-/set-function-length-1.2.1.tgz",
+      "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==",
+      "requires": {
+        "define-data-property": "^1.1.2",
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2",
+        "get-intrinsic": "^1.2.3",
+        "gopd": "^1.0.1",
+        "has-property-descriptors": "^1.0.1"
+      }
+    },
+    "set-function-name": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/set-function-name/-/set-function-name-2.0.1.tgz",
+      "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==",
+      "dev": true,
+      "requires": {
+        "define-data-property": "^1.0.1",
+        "functions-have-names": "^1.2.3",
+        "has-property-descriptors": "^1.0.0"
+      }
+    },
+    "setprototypeof": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz",
+      "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
+      "dev": true
+    },
+    "shebang-command": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz",
+      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+      "requires": {
+        "shebang-regex": "^3.0.0"
+      }
+    },
+    "shebang-regex": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz",
+      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
+    },
+    "side-channel": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.5.tgz",
+      "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==",
+      "requires": {
+        "call-bind": "^1.0.6",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.4",
+        "object-inspect": "^1.13.1"
+      }
+    },
+    "signal-exit": {
+      "version": "3.0.7",
+      "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz",
+      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+      "dev": true
+    },
+    "sisteransi": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmmirror.com/sisteransi/-/sisteransi-1.0.5.tgz",
+      "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
+      "dev": true,
+      "peer": true
+    },
+    "slash": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz",
+      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+      "dev": true
+    },
+    "source-map": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
+      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+    },
+    "source-map-js": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz",
+      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
+    },
+    "source-map-support": {
+      "version": "0.5.21",
+      "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz",
+      "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+      "requires": {
+        "buffer-from": "^1.0.0",
+        "source-map": "^0.6.0"
+      }
+    },
+    "sourcemap-codec": {
+      "version": "1.4.8",
+      "resolved": "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
+      "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="
+    },
+    "sprintf-js": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz",
+      "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
+      "dev": true,
+      "peer": true
+    },
+    "stack-utils": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmmirror.com/stack-utils/-/stack-utils-2.0.6.tgz",
+      "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "escape-string-regexp": "^2.0.0"
+      },
+      "dependencies": {
+        "escape-string-regexp": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+          "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
+          "dev": true,
+          "peer": true
+        }
+      }
+    },
+    "statuses": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz",
+      "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+      "dev": true
+    },
+    "string-hash": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmmirror.com/string-hash/-/string-hash-1.1.3.tgz",
+      "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A=="
+    },
+    "string-length": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmmirror.com/string-length/-/string-length-4.0.2.tgz",
+      "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "char-regex": "^1.0.2",
+        "strip-ansi": "^6.0.0"
+      }
+    },
+    "string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      }
+    },
+    "string.prototype.trim": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmmirror.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz",
+      "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1"
+      }
+    },
+    "string.prototype.trimend": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz",
+      "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1"
+      }
+    },
+    "string.prototype.trimstart": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz",
+      "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1"
+      }
+    },
+    "strip-ansi": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "requires": {
+        "ansi-regex": "^5.0.1"
+      }
+    },
+    "strip-bom": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/strip-bom/-/strip-bom-4.0.0.tgz",
+      "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
+      "dev": true,
+      "peer": true
+    },
+    "strip-final-newline": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+      "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+      "dev": true
+    },
+    "strip-json-comments": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+      "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="
+    },
+    "supports-color": {
+      "version": "5.5.0",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz",
+      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+      "requires": {
+        "has-flag": "^3.0.0"
+      }
+    },
+    "supports-hyperlinks": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz",
+      "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "has-flag": "^4.0.0",
+        "supports-color": "^7.0.0"
+      },
+      "dependencies": {
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "peer": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "supports-preserve-symlinks-flag": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+    },
+    "svg-tags": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/svg-tags/-/svg-tags-1.0.0.tgz",
+      "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==",
+      "dev": true
+    },
+    "symbol-tree": {
+      "version": "3.2.4",
+      "resolved": "https://registry.npmmirror.com/symbol-tree/-/symbol-tree-3.2.4.tgz",
+      "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
+      "dev": true,
+      "peer": true
+    },
+    "synckit": {
+      "version": "0.8.8",
+      "resolved": "https://registry.npmmirror.com/synckit/-/synckit-0.8.8.tgz",
+      "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==",
+      "requires": {
+        "@pkgr/core": "^0.1.0",
+        "tslib": "^2.6.2"
+      }
+    },
+    "systemjs": {
+      "version": "6.14.3",
+      "resolved": "https://registry.npmmirror.com/systemjs/-/systemjs-6.14.3.tgz",
+      "integrity": "sha512-hQv45irdhXudAOr8r6SVSpJSGtogdGZUbJBRKCE5nsIS7tsxxvnIHqT4IOPWj+P+HcSzeWzHlGCGpmhPDIKe+w==",
+      "dev": true
+    },
+    "tapable": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmmirror.com/tapable/-/tapable-2.2.1.tgz",
+      "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ=="
+    },
+    "terminal-link": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/terminal-link/-/terminal-link-2.1.1.tgz",
+      "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "ansi-escapes": "^4.2.1",
+        "supports-hyperlinks": "^2.0.0"
+      }
+    },
+    "terser": {
+      "version": "5.27.0",
+      "resolved": "https://registry.npmmirror.com/terser/-/terser-5.27.0.tgz",
+      "integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==",
+      "requires": {
+        "@jridgewell/source-map": "^0.3.3",
+        "acorn": "^8.8.2",
+        "commander": "^2.20.0",
+        "source-map-support": "~0.5.20"
+      }
+    },
+    "terser-webpack-plugin": {
+      "version": "5.3.10",
+      "resolved": "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz",
+      "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==",
+      "peer": true,
+      "requires": {
+        "@jridgewell/trace-mapping": "^0.3.20",
+        "jest-worker": "^27.4.5",
+        "schema-utils": "^3.1.1",
+        "serialize-javascript": "^6.0.1",
+        "terser": "^5.26.0"
+      }
+    },
+    "test-exclude": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/test-exclude/-/test-exclude-6.0.0.tgz",
+      "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@istanbuljs/schema": "^0.1.2",
+        "glob": "^7.1.4",
+        "minimatch": "^3.0.4"
+      },
+      "dependencies": {
+        "brace-expansion": {
+          "version": "1.1.11",
+          "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz",
+          "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "balanced-match": "^1.0.0",
+            "concat-map": "0.0.1"
+          }
+        },
+        "minimatch": {
+          "version": "3.1.2",
+          "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz",
+          "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "brace-expansion": "^1.1.7"
+          }
+        }
+      }
+    },
+    "text-table": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz",
+      "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
+    },
+    "throat": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmmirror.com/throat/-/throat-6.0.2.tgz",
+      "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==",
+      "dev": true,
+      "peer": true
+    },
+    "timm": {
+      "version": "1.7.1",
+      "resolved": "https://registry.npmmirror.com/timm/-/timm-1.7.1.tgz",
+      "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw=="
+    },
+    "tinycolor2": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmmirror.com/tinycolor2/-/tinycolor2-1.6.0.tgz",
+      "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw=="
+    },
+    "tmpl": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmmirror.com/tmpl/-/tmpl-1.0.5.tgz",
+      "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
+      "dev": true,
+      "peer": true
+    },
+    "to-fast-properties": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+      "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog=="
+    },
+    "to-regex-range": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz",
+      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+      "requires": {
+        "is-number": "^7.0.0"
+      }
+    },
+    "toidentifier": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz",
+      "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+      "dev": true
+    },
+    "tough-cookie": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmmirror.com/tough-cookie/-/tough-cookie-4.1.3.tgz",
+      "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "psl": "^1.1.33",
+        "punycode": "^2.1.1",
+        "universalify": "^0.2.0",
+        "url-parse": "^1.5.3"
+      },
+      "dependencies": {
+        "universalify": {
+          "version": "0.2.0",
+          "resolved": "https://registry.npmmirror.com/universalify/-/universalify-0.2.0.tgz",
+          "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
+          "dev": true,
+          "peer": true
+        }
+      }
+    },
+    "tr46": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/tr46/-/tr46-2.1.0.tgz",
+      "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "punycode": "^2.1.1"
+      }
+    },
+    "ts-api-utils": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/ts-api-utils/-/ts-api-utils-1.2.1.tgz",
+      "integrity": "sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==",
+      "dev": true,
+      "requires": {}
+    },
+    "tsconfig-paths": {
+      "version": "3.15.0",
+      "resolved": "https://registry.npmmirror.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
+      "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
+      "dev": true,
+      "requires": {
+        "@types/json5": "^0.0.29",
+        "json5": "^1.0.2",
+        "minimist": "^1.2.6",
+        "strip-bom": "^3.0.0"
+      },
+      "dependencies": {
+        "json5": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz",
+          "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+          "dev": true,
+          "requires": {
+            "minimist": "^1.2.0"
+          }
+        },
+        "strip-bom": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmmirror.com/strip-bom/-/strip-bom-3.0.0.tgz",
+          "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+          "dev": true
+        }
+      }
+    },
+    "tslib": {
+      "version": "2.6.2",
+      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.6.2.tgz",
+      "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+    },
+    "type-check": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz",
+      "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+      "requires": {
+        "prelude-ls": "^1.2.1"
+      }
+    },
+    "type-detect": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmmirror.com/type-detect/-/type-detect-4.0.8.tgz",
+      "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+      "dev": true,
+      "peer": true
+    },
+    "type-fest": {
+      "version": "0.21.3",
+      "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.21.3.tgz",
+      "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+      "dev": true,
+      "peer": true
+    },
+    "type-is": {
+      "version": "1.6.18",
+      "resolved": "https://registry.npmmirror.com/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"
+      }
+    },
+    "typed-array-buffer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz",
+      "integrity": "sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.6",
+        "es-errors": "^1.3.0",
+        "is-typed-array": "^1.1.13"
+      }
+    },
+    "typed-array-byte-length": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz",
+      "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "for-each": "^0.3.3",
+        "has-proto": "^1.0.1",
+        "is-typed-array": "^1.1.10"
+      }
+    },
+    "typed-array-byte-offset": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz",
+      "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==",
+      "dev": true,
+      "requires": {
+        "available-typed-arrays": "^1.0.5",
+        "call-bind": "^1.0.2",
+        "for-each": "^0.3.3",
+        "has-proto": "^1.0.1",
+        "is-typed-array": "^1.1.10"
+      }
+    },
+    "typed-array-length": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/typed-array-length/-/typed-array-length-1.0.4.tgz",
+      "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "for-each": "^0.3.3",
+        "is-typed-array": "^1.1.9"
+      }
+    },
+    "typedarray-to-buffer": {
+      "version": "3.1.5",
+      "resolved": "https://registry.npmmirror.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
+      "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "is-typedarray": "^1.0.0"
+      }
+    },
+    "typescript": {
+      "version": "5.3.3",
+      "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.3.3.tgz",
+      "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
+      "devOptional": true
+    },
+    "unbox-primitive": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+      "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "has-bigints": "^1.0.2",
+        "has-symbols": "^1.0.3",
+        "which-boxed-primitive": "^1.0.2"
+      }
+    },
+    "undici-types": {
+      "version": "5.26.5",
+      "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz",
+      "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
+    },
+    "unicode-canonical-property-names-ecmascript": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
+      "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==",
+      "dev": true
+    },
+    "unicode-match-property-ecmascript": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
+      "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
+      "dev": true,
+      "requires": {
+        "unicode-canonical-property-names-ecmascript": "^2.0.0",
+        "unicode-property-aliases-ecmascript": "^2.0.0"
+      }
+    },
+    "unicode-match-property-value-ecmascript": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz",
+      "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==",
+      "dev": true
+    },
+    "unicode-property-aliases-ecmascript": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
+      "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
+      "dev": true
+    },
+    "universalify": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz",
+      "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="
+    },
+    "unpipe": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz",
+      "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+      "dev": true
+    },
+    "unquote": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/unquote/-/unquote-1.1.1.tgz",
+      "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg=="
+    },
+    "update-browserslist-db": {
+      "version": "1.0.13",
+      "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
+      "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
+      "requires": {
+        "escalade": "^3.1.1",
+        "picocolors": "^1.0.0"
+      }
+    },
+    "uri-js": {
+      "version": "4.4.1",
+      "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz",
+      "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+      "requires": {
+        "punycode": "^2.1.0"
+      }
+    },
+    "url-parse": {
+      "version": "1.5.10",
+      "resolved": "https://registry.npmmirror.com/url-parse/-/url-parse-1.5.10.tgz",
+      "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "querystringify": "^2.1.1",
+        "requires-port": "^1.0.0"
+      }
+    },
+    "utif": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/utif/-/utif-2.0.1.tgz",
+      "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==",
+      "requires": {
+        "pako": "^1.0.5"
+      }
+    },
+    "util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+    },
+    "utils-merge": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz",
+      "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+      "dev": true
+    },
+    "v8-to-istanbul": {
+      "version": "8.1.1",
+      "resolved": "https://registry.npmmirror.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz",
+      "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "@types/istanbul-lib-coverage": "^2.0.1",
+        "convert-source-map": "^1.6.0",
+        "source-map": "^0.7.3"
+      },
+      "dependencies": {
+        "convert-source-map": {
+          "version": "1.9.0",
+          "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.9.0.tgz",
+          "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+          "dev": true,
+          "peer": true
+        },
+        "source-map": {
+          "version": "0.7.4",
+          "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.7.4.tgz",
+          "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
+          "dev": true,
+          "peer": true
+        }
+      }
+    },
+    "vary": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz",
+      "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+      "dev": true
+    },
+    "vite": {
+      "version": "4.1.5",
+      "resolved": "https://registry.npmmirror.com/vite/-/vite-4.1.5.tgz",
+      "integrity": "sha512-zJ0RiVkf61kpd7O+VtU6r766xgnTaIknP/lR6sJTZq3HtVJ3HGnTo5DaJhTUtYoTyS/CQwZ6yEVdc/lrmQT7dQ==",
+      "requires": {
+        "esbuild": "^0.16.14",
+        "fsevents": "~2.3.2",
+        "postcss": "^8.4.21",
+        "resolve": "^1.22.1",
+        "rollup": "^3.10.0"
+      },
+      "dependencies": {
+        "@esbuild/win32-x64": {
+          "version": "0.16.17",
+          "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz",
+          "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==",
+          "optional": true
+        },
+        "esbuild": {
+          "version": "0.16.17",
+          "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.16.17.tgz",
+          "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==",
+          "requires": {
+            "@esbuild/android-arm": "0.16.17",
+            "@esbuild/android-arm64": "0.16.17",
+            "@esbuild/android-x64": "0.16.17",
+            "@esbuild/darwin-arm64": "0.16.17",
+            "@esbuild/darwin-x64": "0.16.17",
+            "@esbuild/freebsd-arm64": "0.16.17",
+            "@esbuild/freebsd-x64": "0.16.17",
+            "@esbuild/linux-arm": "0.16.17",
+            "@esbuild/linux-arm64": "0.16.17",
+            "@esbuild/linux-ia32": "0.16.17",
+            "@esbuild/linux-loong64": "0.16.17",
+            "@esbuild/linux-mips64el": "0.16.17",
+            "@esbuild/linux-ppc64": "0.16.17",
+            "@esbuild/linux-riscv64": "0.16.17",
+            "@esbuild/linux-s390x": "0.16.17",
+            "@esbuild/linux-x64": "0.16.17",
+            "@esbuild/netbsd-x64": "0.16.17",
+            "@esbuild/openbsd-x64": "0.16.17",
+            "@esbuild/sunos-x64": "0.16.17",
+            "@esbuild/win32-arm64": "0.16.17",
+            "@esbuild/win32-ia32": "0.16.17",
+            "@esbuild/win32-x64": "0.16.17"
+          }
+        }
+      }
+    },
+    "vue": {
+      "version": "3.4.18",
+      "resolved": "https://registry.npmmirror.com/vue/-/vue-3.4.18.tgz",
+      "integrity": "sha512-0zLRYamFRe0wF4q2L3O24KQzLyLpL64ye1RUToOgOxuWZsb/FhaNRdGmeozdtVYLz6tl94OXLaK7/WQIrVCw1A==",
+      "requires": {
+        "@vue/compiler-dom": "3.4.18",
+        "@vue/compiler-sfc": "3.4.18",
+        "@vue/runtime-dom": "3.4.18",
+        "@vue/server-renderer": "3.4.18",
+        "@vue/shared": "3.4.18"
+      },
+      "dependencies": {
+        "@vue/compiler-core": {
+          "version": "3.4.18",
+          "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.4.18.tgz",
+          "integrity": "sha512-F7YK8lMK0iv6b9/Gdk15A67wM0KKZvxDxed0RR60C1z9tIJTKta+urs4j0RTN5XqHISzI3etN3mX0uHhjmoqjQ==",
+          "requires": {
+            "@babel/parser": "^7.23.9",
+            "@vue/shared": "3.4.18",
+            "entities": "^4.5.0",
+            "estree-walker": "^2.0.2",
+            "source-map-js": "^1.0.2"
+          }
+        },
+        "@vue/compiler-dom": {
+          "version": "3.4.18",
+          "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.4.18.tgz",
+          "integrity": "sha512-24Eb8lcMfInefvQ6YlEVS18w5Q66f4+uXWVA+yb7praKbyjHRNuKVWGuinfSSjM0ZIiPi++QWukhkgznBaqpEA==",
+          "requires": {
+            "@vue/compiler-core": "3.4.18",
+            "@vue/shared": "3.4.18"
+          }
+        },
+        "@vue/compiler-sfc": {
+          "version": "3.4.18",
+          "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.4.18.tgz",
+          "integrity": "sha512-rG5tqtnzwrVpMqAQ7FHtvHaV70G6LLfJIWLYZB/jZ9m/hrnZmIQh+H3ewnC5onwe/ibljm9+ZupxeElzqCkTAw==",
+          "requires": {
+            "@babel/parser": "^7.23.9",
+            "@vue/compiler-core": "3.4.18",
+            "@vue/compiler-dom": "3.4.18",
+            "@vue/compiler-ssr": "3.4.18",
+            "@vue/shared": "3.4.18",
+            "estree-walker": "^2.0.2",
+            "magic-string": "^0.30.6",
+            "postcss": "^8.4.33",
+            "source-map-js": "^1.0.2"
+          }
+        },
+        "@vue/compiler-ssr": {
+          "version": "3.4.18",
+          "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.4.18.tgz",
+          "integrity": "sha512-hSlv20oUhPxo2UYUacHgGaxtqP0tvFo6ixxxD6JlXIkwzwoZ9eKK6PFQN4hNK/R13JlNyldwWt/fqGBKgWJ6nQ==",
+          "requires": {
+            "@vue/compiler-dom": "3.4.18",
+            "@vue/shared": "3.4.18"
+          }
+        },
+        "@vue/shared": {
+          "version": "3.4.18",
+          "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.4.18.tgz",
+          "integrity": "sha512-CxouGFxxaW5r1WbrSmWwck3No58rApXgRSBxrqgnY1K+jk20F6DrXJkHdH9n4HVT+/B6G2CAn213Uq3npWiy8Q=="
+        }
+      }
+    },
+    "vue-eslint-parser": {
+      "version": "9.4.2",
+      "resolved": "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz",
+      "integrity": "sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==",
+      "dev": true,
+      "requires": {
+        "debug": "^4.3.4",
+        "eslint-scope": "^7.1.1",
+        "eslint-visitor-keys": "^3.3.0",
+        "espree": "^9.3.1",
+        "esquery": "^1.4.0",
+        "lodash": "^4.17.21",
+        "semver": "^7.3.6"
+      },
+      "dependencies": {
+        "lru-cache": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
+          "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+          "dev": true,
+          "requires": {
+            "yallist": "^4.0.0"
+          }
+        },
+        "semver": {
+          "version": "7.6.0",
+          "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.0.tgz",
+          "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+          "dev": true,
+          "requires": {
+            "lru-cache": "^6.0.0"
+          }
+        },
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+          "dev": true
+        }
+      }
+    },
+    "vue-i18n": {
+      "version": "9.9.1",
+      "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.9.1.tgz",
+      "integrity": "sha512-xyQ4VspLdNSPTKBFBPWa1tvtj+9HuockZwgFeD2OhxxXuC2CWeNvV4seu2o9+vbQOyQbhAM5Ez56oxUrrnTWdw==",
+      "requires": {
+        "@intlify/core-base": "9.9.1",
+        "@intlify/shared": "9.9.1",
+        "@vue/devtools-api": "^6.5.0"
+      },
+      "dependencies": {
+        "@intlify/core-base": {
+          "version": "9.9.1",
+          "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.9.1.tgz",
+          "integrity": "sha512-qsV15dg7jNX2faBRyKMgZS8UcFJViWEUPLdzZ9UR0kQZpFVeIpc0AG7ZOfeP7pX2T9SQ5jSiorq/tii9nkkafA==",
+          "requires": {
+            "@intlify/message-compiler": "9.9.1",
+            "@intlify/shared": "9.9.1"
+          }
+        },
+        "@intlify/message-compiler": {
+          "version": "9.9.1",
+          "resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.9.1.tgz",
+          "integrity": "sha512-zTvP6X6HeumHOXuAE1CMMsV6tTX+opKMOxO1OHTCg5N5Sm/F7d8o2jdT6W6L5oHUsJ/vvkGefHIs7Q3hfowmsA==",
+          "requires": {
+            "@intlify/shared": "9.9.1",
+            "source-map-js": "^1.0.2"
+          }
+        },
+        "@intlify/shared": {
+          "version": "9.9.1",
+          "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-9.9.1.tgz",
+          "integrity": "sha512-b3Pta1nwkz5rGq434v0psHwEwHGy1pYCttfcM22IE//K9owbpkEvFptx9VcuRAxjQdrO2If249cmDDjBu5wMDA=="
+        }
+      }
+    },
+    "vue-router": {
+      "version": "4.2.5",
+      "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.2.5.tgz",
+      "integrity": "sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==",
+      "requires": {
+        "@vue/devtools-api": "^6.5.0"
+      }
+    },
+    "vue-template-compiler": {
+      "version": "2.7.16",
+      "resolved": "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz",
+      "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==",
+      "dev": true,
+      "requires": {
+        "de-indent": "^1.0.2",
+        "he": "^1.2.0"
+      }
+    },
+    "vue-tsc": {
+      "version": "1.8.27",
+      "resolved": "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.8.27.tgz",
+      "integrity": "sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==",
+      "dev": true,
+      "requires": {
+        "@volar/typescript": "~1.11.1",
+        "@vue/language-core": "1.8.27",
+        "semver": "^7.5.4"
+      },
+      "dependencies": {
+        "lru-cache": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
+          "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+          "dev": true,
+          "requires": {
+            "yallist": "^4.0.0"
+          }
+        },
+        "semver": {
+          "version": "7.6.0",
+          "resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.0.tgz",
+          "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+          "dev": true,
+          "requires": {
+            "lru-cache": "^6.0.0"
+          }
+        },
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+          "dev": true
+        }
+      }
+    },
+    "w3c-hr-time": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
+      "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "browser-process-hrtime": "^1.0.0"
+      }
+    },
+    "w3c-xmlserializer": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz",
+      "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "xml-name-validator": "^3.0.0"
+      },
+      "dependencies": {
+        "xml-name-validator": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
+          "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
+          "dev": true,
+          "peer": true
+        }
+      }
+    },
+    "walker": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmmirror.com/walker/-/walker-1.0.8.tgz",
+      "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "makeerror": "1.0.12"
+      }
+    },
+    "watchpack": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.0.tgz",
+      "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
+      "peer": true,
+      "requires": {
+        "glob-to-regexp": "^0.4.1",
+        "graceful-fs": "^4.1.2"
+      }
+    },
+    "webidl-conversions": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
+      "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
+      "dev": true,
+      "peer": true
+    },
+    "webpack": {
+      "version": "5.90.1",
+      "resolved": "https://registry.npmmirror.com/webpack/-/webpack-5.90.1.tgz",
+      "integrity": "sha512-SstPdlAC5IvgFnhiRok8hqJo/+ArAbNv7rhU4fnWGHNVfN59HSQFaxZDSAL3IFG2YmqxuRs+IU33milSxbPlog==",
+      "peer": true,
+      "requires": {
+        "@types/eslint-scope": "^3.7.3",
+        "@types/estree": "^1.0.5",
+        "@webassemblyjs/ast": "^1.11.5",
+        "@webassemblyjs/wasm-edit": "^1.11.5",
+        "@webassemblyjs/wasm-parser": "^1.11.5",
+        "acorn": "^8.7.1",
+        "acorn-import-assertions": "^1.9.0",
+        "browserslist": "^4.21.10",
+        "chrome-trace-event": "^1.0.2",
+        "enhanced-resolve": "^5.15.0",
+        "es-module-lexer": "^1.2.1",
+        "eslint-scope": "5.1.1",
+        "events": "^3.2.0",
+        "glob-to-regexp": "^0.4.1",
+        "graceful-fs": "^4.2.9",
+        "json-parse-even-better-errors": "^2.3.1",
+        "loader-runner": "^4.2.0",
+        "mime-types": "^2.1.27",
+        "neo-async": "^2.6.2",
+        "schema-utils": "^3.2.0",
+        "tapable": "^2.1.1",
+        "terser-webpack-plugin": "^5.3.10",
+        "watchpack": "^2.4.0",
+        "webpack-sources": "^3.2.3"
+      },
+      "dependencies": {
+        "eslint-scope": {
+          "version": "5.1.1",
+          "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz",
+          "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+          "peer": true,
+          "requires": {
+            "esrecurse": "^4.3.0",
+            "estraverse": "^4.1.1"
+          }
+        },
+        "estraverse": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz",
+          "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+          "peer": true
+        }
+      }
+    },
+    "webpack-sources": {
+      "version": "3.2.3",
+      "resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz",
+      "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
+      "peer": true
+    },
+    "whatwg-encoding": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmmirror.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
+      "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "iconv-lite": "0.4.24"
+      }
+    },
+    "whatwg-mimetype": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
+      "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
+      "dev": true,
+      "peer": true
+    },
+    "whatwg-url": {
+      "version": "8.7.0",
+      "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-8.7.0.tgz",
+      "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "lodash": "^4.7.0",
+        "tr46": "^2.1.0",
+        "webidl-conversions": "^6.1.0"
+      }
+    },
+    "which": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz",
+      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+      "requires": {
+        "isexe": "^2.0.0"
+      }
+    },
+    "which-boxed-primitive": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+      "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
+      "dev": true,
+      "requires": {
+        "is-bigint": "^1.0.1",
+        "is-boolean-object": "^1.1.0",
+        "is-number-object": "^1.0.4",
+        "is-string": "^1.0.5",
+        "is-symbol": "^1.0.3"
+      }
+    },
+    "which-typed-array": {
+      "version": "1.1.14",
+      "resolved": "https://registry.npmmirror.com/which-typed-array/-/which-typed-array-1.1.14.tgz",
+      "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==",
+      "dev": true,
+      "requires": {
+        "available-typed-arrays": "^1.0.6",
+        "call-bind": "^1.0.5",
+        "for-each": "^0.3.3",
+        "gopd": "^1.0.1",
+        "has-tostringtag": "^1.0.1"
+      }
+    },
+    "wrap-ansi": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "peer": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "peer": true
+        }
+      }
+    },
+    "wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+    },
+    "write-file-atomic": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
+      "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "imurmurhash": "^0.1.4",
+        "is-typedarray": "^1.0.0",
+        "signal-exit": "^3.0.2",
+        "typedarray-to-buffer": "^3.1.5"
+      }
+    },
+    "ws": {
+      "version": "8.16.0",
+      "resolved": "https://registry.npmmirror.com/ws/-/ws-8.16.0.tgz",
+      "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==",
+      "requires": {}
+    },
+    "xhr": {
+      "version": "2.6.0",
+      "resolved": "https://registry.npmmirror.com/xhr/-/xhr-2.6.0.tgz",
+      "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==",
+      "requires": {
+        "global": "~4.4.0",
+        "is-function": "^1.0.1",
+        "parse-headers": "^2.0.0",
+        "xtend": "^4.0.0"
+      }
+    },
+    "xml-name-validator": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
+      "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
+      "dev": true
+    },
+    "xml-parse-from-string": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz",
+      "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g=="
+    },
+    "xml2js": {
+      "version": "0.4.23",
+      "resolved": "https://registry.npmmirror.com/xml2js/-/xml2js-0.4.23.tgz",
+      "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==",
+      "requires": {
+        "sax": ">=0.6.0",
+        "xmlbuilder": "~11.0.0"
+      }
+    },
+    "xmlbuilder": {
+      "version": "11.0.1",
+      "resolved": "https://registry.npmmirror.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
+      "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="
+    },
+    "xmlchars": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/xmlchars/-/xmlchars-2.2.0.tgz",
+      "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
+      "dev": true,
+      "peer": true
+    },
+    "xmlhttprequest": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmmirror.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
+      "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA=="
+    },
+    "xregexp": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/xregexp/-/xregexp-3.1.0.tgz",
+      "integrity": "sha512-4Y1x6DyB8xRoxosooa6PlGWqmmSKatbzhrftZ7Purmm4B8R4qIEJG1A2hZsdz5DhmIqS0msC0I7KEq93GphEVg=="
+    },
+    "xtend": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz",
+      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
+    },
+    "y18n": {
+      "version": "5.0.8",
+      "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz",
+      "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+      "dev": true,
+      "peer": true
+    },
+    "yallist": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz",
+      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+    },
+    "yaml": {
+      "version": "1.10.2",
+      "resolved": "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz",
+      "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="
+    },
+    "yargs": {
+      "version": "16.2.0",
+      "resolved": "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz",
+      "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+      "dev": true,
+      "peer": true,
+      "requires": {
+        "cliui": "^7.0.2",
+        "escalade": "^3.1.1",
+        "get-caller-file": "^2.0.5",
+        "require-directory": "^2.1.1",
+        "string-width": "^4.2.0",
+        "y18n": "^5.0.5",
+        "yargs-parser": "^20.2.2"
+      }
+    },
+    "yargs-parser": {
+      "version": "20.2.9",
+      "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz",
+      "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+      "dev": true,
+      "peer": true
+    },
+    "yocto-queue": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz",
+      "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="
+    }
+  }
+}

+ 95 - 0
package.json

@@ -0,0 +1,95 @@
+{
+  "name": "uni-preset-vue",
+  "version": "0.0.0",
+  "scripts": {
+    "dev:app": "uni -p app",
+    "dev:app-android": "uni -p app-android",
+    "dev:app-ios": "uni -p app-ios",
+    "dev:custom": "uni -p",
+    "dev:h5": "uni --mode development",
+    "dev:h5:ssr": "uni --ssr",
+    "dev:mp-alipay": "uni -p mp-alipay",
+    "dev:mp-baidu": "uni -p mp-baidu",
+    "dev:mp-jd": "uni -p mp-jd",
+    "dev:mp-kuaishou": "uni -p mp-kuaishou",
+    "dev:mp-lark": "uni -p mp-lark",
+    "dev:mp-qq": "uni -p mp-qq",
+    "dev:mp-toutiao": "uni -p mp-toutiao",
+    "dev:mp-weixin": "uni -p mp-weixin --mode development",
+    "dev:quickapp-webview": "uni -p quickapp-webview",
+    "dev:quickapp-webview-huawei": "uni -p quickapp-webview-huawei",
+    "dev:quickapp-webview-union": "uni -p quickapp-webview-union",
+    "build:app": "uni build -p app",
+    "build:app-android": "uni build -p app-android",
+    "build:app-ios": "uni build -p app-ios",
+    "build:custom": "uni build -p",
+    "build:h5:pre": "uni build --mode development",
+    "build:h5": "uni build --mode production",
+    "build:h5:ssr": "uni build --ssr",
+    "build:mp-alipay": "uni build -p mp-alipay",
+    "build:mp-baidu": "uni build -p mp-baidu",
+    "build:mp-jd": "uni build -p mp-jd",
+    "build:mp-kuaishou": "uni build -p mp-kuaishou",
+    "build:mp-lark": "uni build -p mp-lark",
+    "build:mp-qq": "uni build -p mp-qq",
+    "build:mp-toutiao": "uni build -p mp-toutiao",
+    "build:mp-weixin": "uni build -p mp-weixin --mode production",
+    "build:quickapp-webview": "uni build -p quickapp-webview",
+    "build:quickapp-webview-huawei": "uni build -p quickapp-webview-huawei",
+    "build:quickapp-webview-union": "uni build -p quickapp-webview-union",
+    "type-check": "vue-tsc --noEmit"
+  },
+  "dependencies": {
+    "@climblee/uv-ui": "^1.1.15",
+    "@dcloudio/uni-app": "3.0.0-3081220230817001",
+    "@dcloudio/uni-app-plus": "3.0.0-3081220230817001",
+    "@dcloudio/uni-components": "3.0.0-3081220230817001",
+    "@dcloudio/uni-h5": "3.0.0-3081220230817001",
+    "@dcloudio/uni-mp-alipay": "3.0.0-3081220230817001",
+    "@dcloudio/uni-mp-baidu": "3.0.0-3081220230817001",
+    "@dcloudio/uni-mp-jd": "3.0.0-3081220230817001",
+    "@dcloudio/uni-mp-kuaishou": "3.0.0-3081220230817001",
+    "@dcloudio/uni-mp-lark": "3.0.0-3081220230817001",
+    "@dcloudio/uni-mp-qq": "3.0.0-3081220230817001",
+    "@dcloudio/uni-mp-toutiao": "3.0.0-3081220230817001",
+    "@dcloudio/uni-mp-weixin": "3.0.0-3081220230817001",
+    "@dcloudio/uni-quickapp-webview": "3.0.0-3081220230817001",
+    "@dcloudio/uni-ui": "^1.4.28",
+    "dayjs": "^1.11.10",
+    "eslint-config-prettier": "^9.0.0",
+    "eslint-plugin-prettier": "^5.0.1",
+    "heic2any": "^0.0.4",
+    "pinia-plugin-persistedstate": "^3.2.0",
+    "prettier": "^3.0.3",
+    "qs": "^6.11.2",
+    "sass": "^1.69.3",
+    "sass-loader": "^13.3.2",
+    "vue": "^3.2.45",
+    "vue-i18n": "^9.1.9"
+  },
+  "devDependencies": {
+    "@dcloudio/types": "^3.4.1",
+    "@dcloudio/uni-automator": "3.0.0-3081220230817001",
+    "@dcloudio/uni-cli-shared": "3.0.0-3081220230817001",
+    "@dcloudio/uni-stacktracey": "3.0.0-3081220230817001",
+    "@dcloudio/vite-plugin-uni": "3.0.0-3081220230817001",
+    "@types/node": "^20.10.1",
+    "@types/qs": "^6.9.9",
+    "@typescript-eslint/eslint-plugin": "^6.8.0",
+    "@vitejs/plugin-vue-jsx": "^3.0.2",
+    "@vue/eslint-config-prettier": "^8.0.0",
+    "@vue/eslint-config-typescript": "^12.0.0",
+    "@vue/runtime-core": "^3.2.45",
+    "@vue/tsconfig": "^0.1.3",
+    "eslint": "^8.51.0",
+    "eslint-config-standard-with-typescript": "^39.1.1",
+    "eslint-plugin-import": "^2.28.1",
+    "eslint-plugin-n": "^16.2.0",
+    "eslint-plugin-promise": "^6.1.1",
+    "eslint-plugin-vue": "^9.17.0",
+    "pinia": "^2.0.36",
+    "typescript": "^5.2.2",
+    "vite": "4.1.5",
+    "vue-tsc": "^1.0.24"
+  }
+}

+ 8 - 0
shims-uni.d.ts

@@ -0,0 +1,8 @@
+/// <reference types='@dcloudio/types' />
+import 'vue'
+
+declare module '@vue/runtime-core' {
+  type Hooks = App.AppInstance & Page.PageInstance
+
+  interface ComponentCustomOptions extends Hooks {}
+}

+ 24 - 0
src/App.vue

@@ -0,0 +1,24 @@
+<script setup lang="ts">
+import { onLaunch, onShow, onHide } from '@dcloudio/uni-app'
+// @ts-ignore
+import { initEid } from './mp_ecard_sdk/main'
+onLaunch(() => {
+  initEid()
+})
+onShow(() => {})
+onHide(() => {})
+</script>
+<style lang="scss">
+/* 注意要写在第一行,同时给style标签加入lang="scss"属性 */
+@import './static/style/common.scss';
+/* #ifdef H5 */
+uni-page-head {
+  display: none;
+}
+
+.uni-app--showleftwindow + .uni-tabbar-bottom {
+  display: none;
+}
+
+/* #endif */
+</style>

+ 89 - 0
src/components/dateSelect/k-bottom-button/KBottomButton.vue

@@ -0,0 +1,89 @@
+<template>
+  <view
+    class="k-button-group"
+    :style="{
+      paddingBottom: safeArea && `${bottomSafeArea || 10}px`,
+      boxShadow: boxShadow ? '0 2px 12px 0 rgba(0, 0, 0, 0.1)' : ''
+    }"
+  >
+    <button
+      v-for="(button, index) in list"
+      class="k-button"
+      :style="{
+        color: button.color,
+        backgroundColor: button.background,
+        border: `2rpx solid ${button.borderColor || 'transparent'}`
+      }"
+      @click="onClick(index)"
+      :key="index"
+    >
+      {{ button.label }}
+    </button>
+  </view>
+</template>
+
+<script>
+export default {
+  options: {
+    virtualHost: true
+  },
+  props: {
+    safeArea: {
+      type: Boolean,
+      default: true
+    },
+    boxShadow: {
+      type: Boolean,
+      default: true
+    },
+    options: {
+      type: [Array, Object],
+      default: () => []
+    },
+    label: {
+      type: String,
+      default: ''
+    }
+  },
+  computed: {
+    list() {
+      if (JSON.stringify(this.options) !== '{}' && this.options.length > 0) {
+        return Array.isArray(this.options) ? this.options : [this.options]
+      } else {
+        return [
+          {
+            label: this.label,
+            color: 'white',
+            background: '#005CEEFF'
+          }
+        ]
+      }
+    }
+  },
+  data() {
+    return {
+      bottomSafeArea: uni.getSystemInfoSync().safeAreaInsets.bottom
+    }
+  },
+  methods: {
+    onClick(index) {
+      this.$emit('onClick', index)
+    }
+  }
+}
+</script>
+<style lang="scss">
+.k-button-group {
+  box-sizing: border-box;
+  display: flex;
+  flex-direction: row;
+  background-color: white;
+  width: 100%;
+  padding: 20rpx 30rpx;
+  column-gap: 24rpx;
+  .k-button {
+    width: 100%;
+    font-size: 32rpx;
+  }
+}
+</style>

+ 115 - 0
src/components/dateSelect/k-bottom-popup/KBottomPopup.vue

@@ -0,0 +1,115 @@
+<script>
+export default {
+  name: 'KBottomPopup',
+  options: {
+    virtualHost: true
+  },
+  // #ifndef VUE3
+  model: {
+    prop: 'value',
+    event: 'input'
+  },
+  // #endif
+  props: {
+    // #ifndef VUE3
+    value: {
+      type: Boolean,
+      default: false
+    },
+    // #endif
+    // #ifdef VUE3
+    modelValue: {
+      type: Boolean,
+      default: false
+    }
+    // #endif
+  },
+  data() {
+    return {
+      stopPropagation: false
+    }
+  },
+  computed: {
+    show() {
+      // #ifdef VUE3
+      return this.modelValue
+      // #endif
+      // #ifndef VUE3
+      return this.value
+      // #endif
+    }
+  },
+  methods: {
+    maskClick() {
+      if (this.stopPropagation) {
+        this.stopPropagation = false
+        return
+      }
+      // #ifndef VUE3
+      this.$emit('input', false)
+      // #endif
+      // #ifdef VUE3
+      this.$emit('update:modelValue', false)
+      // #endif
+    },
+    /** 阻止事件冒泡 */
+    onTouchStart(e) {
+      this.stopPropagation = true
+    }
+  },
+  mounted() {}
+}
+</script>
+
+<template>
+  <view
+    :style="[
+      {
+        opacity: show ? 1 : 0,
+        zIndex: show ? 10086 : -10086
+      }
+    ]"
+    class="k-bottom-popup"
+    @click="maskClick"
+  >
+    <view
+      :class="{
+        fade: !show,
+        'fade-out': show
+      }"
+      class="tran-content"
+      @touchstart="onTouchStart"
+    >
+      <slot></slot>
+    </view>
+  </view>
+</template>
+
+<style lang="scss">
+.k-bottom-popup {
+  position: fixed;
+  width: 100%;
+  height: 100%;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  background-color: rgba(0, 0, 0, 0.4);
+  z-index: -10086;
+  opacity: 0;
+  transition: opacity 0.3s ease-in-out;
+  .fade {
+    transform: translateY(100%);
+  }
+  .fade-out {
+    transform: translateY(0);
+  }
+  .tran-content {
+    position: absolute;
+    right: 0;
+    left: 0;
+    bottom: 0;
+    transition: transform 0.3s ease-in-out;
+  }
+}
+</style>

+ 728 - 0
src/components/dateSelect/k-date-picker/KDatePicker.vue

@@ -0,0 +1,728 @@
+<!-- eslint-disable vue/return-in-computed-property -->
+<script>
+import dayjs from './day'
+import { monthsChinese, weeksChinese, closable, left, left_double } from './utils'
+import KButton from '../k-bottom-button/KBottomButton.vue'
+import KBottomPopup from '../k-bottom-popup/KBottomPopup.vue'
+export default {
+  components: { KBottomPopup, KButton },
+  options: {
+    virtualHost: true
+  },
+  // #ifndef VUE3
+  model: {
+    prop: 'value',
+    event: 'input'
+  },
+  // #endif
+  props: {
+    // #ifndef VUE3
+    value: {
+      type: Boolean,
+      default: false
+    },
+    // #endif
+    confirmText: {
+      type: String,
+      default: '确定'
+    },
+    title: {
+      type: String,
+      default: '请选择'
+    },
+    // #ifdef VUE3
+    modelValue: {
+      type: Boolean,
+      default: false
+    },
+    // #endif
+    defaultValue: {
+      type: [String, Number, Array]
+    },
+    type: {
+      type: String, //"day" | "month" | "year"
+      default: 'day'
+    },
+    safeArea: {
+      type: Boolean,
+      default: true
+    },
+    /** 限制开始时间 **/
+    limitStartDate: {
+      type: [String, Number]
+    },
+    /** 限制结束时间 **/
+    limitEndDate: {
+      type: [String, Number]
+    },
+    /** 格式化数据 **/
+    formatter: {
+      type: String
+    },
+    /** 是否为范围选择器 **/
+    isRange: {
+      type: Boolean,
+      default: () => false
+    },
+    /** 是否为多选 **/
+    multiple: {
+      type: Boolean,
+      default: () => false
+    }
+  },
+  computed: {
+    briefDate() {
+      if (this.type === 'day') {
+        return this.currentDay.format('YYYY年MM月')
+      }
+      if (this.type === 'month') {
+        return this.currentDay.format('YYYY年')
+      }
+      if (this.type === 'year') {
+        return `${this.startYear.format('YYYY')} - ${this.startYear.add(9, 'year').format('YYYY')}`
+      }
+    },
+    selectedDate() {
+      const formatMap = {
+        day: 'YYYY-MM-DD',
+        month: 'YYYY-MM',
+        year: 'YYYY年'
+      }
+      const format = formatMap[this.type]
+      if (this.isRange) {
+        return `${this.rangeStart ? this.rangeStart.format(format) : '-'} 至 ${this.rangeEnd ? this.rangeEnd.format(format) : '-'}`
+      } else {
+        if (this.checked.length > 0) {
+          return this.checked.map((item) => item.format(format)).join('、')
+        } else {
+          return '-'
+        }
+      }
+    },
+    backText() {
+      if (this.type === 'day') {
+        return this.currentDay.format('M')
+      }
+      return ''
+    },
+    blocks() {
+      const dates =
+        this.type === 'day' ? this.days : this.type === 'month' ? this.months : this.years
+      const result = []
+      const chineseMap = {
+        day: (date) => {
+          return date.format('D')
+        },
+        month: (date) => {
+          return monthsChinese[date.month()]
+        },
+        year: (date) => {
+          return date.format('YYYY年')
+        }
+      }
+      for (const date of dates) {
+        if (!date) {
+          result.push(date)
+        } else {
+          const obj = {
+            date,
+            chinese: chineseMap[this.type](date),
+            isLimit:
+              (this.limitStartDate && date.isBefore(dayjs(this.limitStartDate))) ||
+              (this.limitEndDate && date.isAfter(dayjs(this.limitEndDate))),
+            isCurrent: date.startOf(this.type).isSame(this.sameDay.startOf(this.type)),
+            isSelect: this.checked.findIndex((item) => item.valueOf() === date.valueOf()) !== -1,
+            isStart:
+              this.rangeStart && date.startOf(this.type).isSame(this.rangeStart.startOf(this.type)),
+            isEnd:
+              this.rangeEnd && date.startOf(this.type).isSame(this.rangeEnd.startOf(this.type)),
+            isInRange:
+              this.rangeStart &&
+              this.rangeEnd &&
+              date.startOf(this.type).isAfter(this.rangeStart.startOf(this.type)) &&
+              date.startOf(this.type).isBefore(this.rangeEnd.startOf(this.type))
+          }
+          // 若果既是范围起点又是范围终点,那么设置为选中
+          if (this.isRange) {
+            obj.isSelect = obj.isStart && obj.isEnd
+          }
+          result.push(obj)
+        }
+      }
+      return result
+    },
+    days() {
+      const result = []
+      let start = this.currentDay.startOf('month')
+      const end = this.currentDay.endOf('month')
+      //计算当前月的第一天是星期几,然后在result头部补上空字符串
+      const firstDayWeek = start.day()
+      for (let i = 0; i < firstDayWeek; i++) {
+        result.push('')
+      }
+      while (start.isBefore(end)) {
+        result.push(start)
+        start = start.add(1, 'day')
+      }
+      return result
+    },
+    months() {
+      const result = []
+      for (let i = 0; i < 12; i++) {
+        const date = this.currentDay.startOf('year').add(i, 'month')
+        result.push(date)
+      }
+      return result
+    },
+    startYear() {
+      return this.currentDay.subtract(this.currentDay.year() % 10, 'year')
+    },
+    years() {
+      // 根据currentDay生成10个年份,如果是当前年则加上is-current
+      const result = []
+      // 从startYear开始生成一个10年的数组
+      for (let i = 0; i < 10; i++) {
+        const date = this.startYear.add(i, 'year')
+        result.push(date)
+      }
+      return result
+    }
+  },
+  data() {
+    return {
+      sameDay: dayjs(), // 当日
+      rangeStart: null, // 范围选择器开始日期
+      rangeEnd: null, // 范围选择器结束日期
+      checked: [], // 选中的日期
+      currentDay: dayjs(), // 当前选择器显示的日期
+      weeksChinese,
+      left,
+      closable,
+      left_double,
+      show: false
+    }
+  },
+  methods: {
+    onClick() {
+      if (this.isRange) {
+        const _rangeStart = this.rangeStart
+          ? this.formatter
+            ? this.rangeStart.format(this.formatter)
+            : this.rangeStart.valueOf()
+          : null
+        const _rangeEnd = this.rangeEnd
+          ? this.formatter
+            ? this.rangeEnd.format(this.formatter)
+            : this.rangeEnd.valueOf()
+          : null
+        this.$emit('change', [_rangeStart, _rangeEnd])
+      } else {
+        const _checked =
+          this.selectedDate !== '-'
+            ? this.multiple
+              ? this.checked.map((item) =>
+                  this.formatter ? item.format(this.formatter) : item.valueOf()
+                )
+              : this.formatter
+                ? this.checked[0].format(this.formatter)
+                : this.checked[0].valueOf()
+            : null
+        this.$emit('change', _checked)
+      }
+    },
+    handleClickItem(block) {
+      /**当day为空字符串或者在限制开始时间之前,限制开始时间之后 不允许点击 **/
+      if (
+        block === '' ||
+        (this.limitEndDate && block.date.isAfter(dayjs(this.limitEndDate))) ||
+        (this.limitStartDate && block.date.isBefore(dayjs(this.limitStartDate)))
+      )
+        return
+      if (this.isRange) {
+        //如果有结束日期和开始日期,并且点击的不是开始日期和结束日期,则将其设置为开始日期并清除结束日期
+        if (this.rangeStart && this.rangeEnd && !block.isStart && !block.isEnd) {
+          this.rangeStart = block.date
+          this.rangeEnd = null
+          return
+        }
+        // 如果点击的是选择的日期,那么就清除这些选项
+        if (block.isSelect) {
+          this.rangeStart = null
+          this.rangeEnd = null
+          return
+        }
+
+        // 如果重复点击开始日期或者结束日期则取消选择
+        if (block.isStart) {
+          // 如果没有结束日期 那么将结束日期设置为开始日期
+          if (!this.rangeEnd) {
+            this.rangeEnd = block.date
+            return
+          }
+          this.rangeStart = null
+          return
+        }
+        if (block.isEnd) {
+          this.rangeEnd = null
+          return
+        }
+        const setStartAndEndDay = (start) => {
+          if (block.date.isBefore(start)) {
+            this.rangeEnd = start
+            this.rangeStart = block.date
+          } else {
+            this.rangeEnd = block.date
+          }
+        }
+        if (this.rangeStart) {
+          setStartAndEndDay(this.rangeStart)
+        } else {
+          // 如果有结束日期,需要判断是否在结束日期之前
+          if (this.rangeEnd) {
+            setStartAndEndDay(this.rangeEnd)
+          } else {
+            this.rangeStart = block.date
+          }
+        }
+      } else {
+        // 如果重复点击则取消选择
+        if (block.isSelect) {
+          this.checked = this.checked.filter((item) => item.valueOf() !== block.date.valueOf())
+          return
+        }
+        this.multiple ? this.checked.push(block.date) : (this.checked = [block.date])
+      }
+    },
+    toggle(type, direction) {
+      if (this.type === 'day') {
+        this.currentDay = this.currentDay.add(
+          direction === 'left' ? -1 : 1,
+          type === 'single' ? 'month' : 'year'
+        )
+      }
+      if (this.type === 'month') {
+        this.currentDay = this.currentDay.add(direction === 'left' ? -1 : 1, 'year')
+      }
+      if (this.type === 'year') {
+        this.currentDay = this.currentDay.add(direction === 'left' ? -10 : 10, 'year')
+      }
+    },
+    close() {
+      // #ifndef VUE3
+      this.$emit('input', false)
+      // #endif
+      // #ifdef VUE3
+      this.$emit('update:modelValue', false)
+      // #endif
+    },
+    init() {
+      // 检查类型是否为 day | month | year
+      if (!['day', 'month', 'year'].includes(this.type)) {
+        console.error('类型必须为 day | month | year')
+        return
+      }
+      // 检查 isRange和 multiple 是否同时为 true
+      if (this.isRange && this.multiple) {
+        console.error('目前暂不支持时间段的多选')
+        return
+      }
+
+      // 清空原数据
+      this.checked = []
+      this.rangeStart = null
+      this.rangeEnd = null
+      // 初始化数据
+      if (!this.defaultValue) return
+      if (this.isRange) {
+        if (!Array.isArray(this.defaultValue) || this.defaultValue.length !== 2) {
+          console.error('区间选择器的默认值必须为长度为2的数组')
+          return
+        }
+        this.currentDay = dayjs(this.defaultValue[0])
+        this.rangeStart = dayjs(this.defaultValue[0])
+        this.rangeEnd = dayjs(this.defaultValue[1])
+      } else {
+        if (this.multiple && Array.isArray(this.defaultValue)) {
+          this.checked = this.defaultValue.map((item) => dayjs(item))
+        } else {
+          this.checked = [dayjs(this.defaultValue)]
+        }
+        this.currentDay = this.checked[0] ? dayjs(this.checked[0]) : dayjs()
+      }
+    }
+  },
+  mounted() {
+    this.init()
+  },
+  watch: {
+    // #ifdef VUE3
+    modelValue: {
+      handler(value) {
+        this.show = !!value
+      }
+    },
+    // #endif
+    // #ifndef VUE3
+    value: {
+      handler(value) {
+        this.show = !!value
+      }
+    },
+    // #endif
+    show: {
+      handler(value) {
+        // #ifdef VUE3
+        this.$emit('update:modelValue', value)
+        // #endif
+        // #ifndef VUE3
+        this.$emit('input', value)
+        // #endif
+      }
+    },
+    type: {
+      handler() {
+        this.init()
+      }
+    },
+    defaultValue: {
+      handler() {
+        this.init()
+      },
+      deep: true
+    }
+  }
+}
+</script>
+
+<template>
+  <KBottomPopup v-model="show">
+    <view class="k-date-picker">
+      <view class="inner-top">
+        <view>
+          <slot name="left">
+            <text>{{ title }}</text>
+          </slot>
+        </view>
+        <view @click="close">
+          <slot name="right">
+            <image :src="closable" class="image-closable"></image>
+          </slot>
+        </view>
+      </view>
+      <view class="inner-body">
+        <view class="inner-body__arrow">
+          <image
+            v-if="type === 'day'"
+            class="image-arrow"
+            :src="left_double"
+            @click="toggle('double', 'left')"
+          />
+          <image class="image-arrow" :src="left" @click="toggle('single', 'left')" />
+          <view class="brief">{{ briefDate }}</view>
+          <image class="image-arrow right-arrow" :src="left" @click="toggle('single', 'right')" />
+          <image
+            v-if="type === 'day'"
+            class="image-arrow right-arrow"
+            :src="left_double"
+            @click="toggle('double', 'right')"
+          />
+        </view>
+        <view class="inner-body__calendar">
+          <view
+            class="inner-body__calendar_week"
+            :style="{ columnGap: isRange ? '0' : '12rpx' }"
+            v-if="type === 'day'"
+          >
+            <view
+              class="inner-body__calendar_week--item"
+              v-for="(item, index) in weeksChinese"
+              :key="index"
+              >{{ item }}</view
+            >
+          </view>
+          <view
+            class="inner-body__calendar_block"
+            :class="{
+              'is-day': type === 'day',
+              'is-month': type === 'month',
+              'is-year': type === 'year'
+            }"
+            :data-text="backText"
+            :style="{ columnGap: isRange ? '0' : '12rpx' }"
+          >
+            <view
+              class="inner-body__calendar_block--item"
+              :class="{
+                'is-current': block.isCurrent,
+                'is-start': block.isStart,
+                'is-end': block.isEnd,
+                'is-in-range': block.isInRange,
+                'is-selected': block.isSelect,
+                'is-limit': block.isLimit
+              }"
+              v-for="(block, index) in blocks"
+              :key="index"
+              @click="handleClickItem(block)"
+            >
+              {{ block.chinese || '' }}
+            </view>
+          </view>
+        </view>
+        <!--        多选由于需要显示的数据可能会较多,这里不再就多选的数据进行展示-->
+        <view class="selected-wrap" v-if="!multiple">
+          <view class="selected-date">
+            {{ selectedDate }}
+          </view>
+        </view>
+      </view>
+    </view>
+    <KButton
+      :label="confirmText"
+      :box-shadow="false"
+      :safe-area="safeArea"
+      @onClick="onClick"
+    ></KButton>
+  </KBottomPopup>
+</template>
+
+<style lang="scss">
+.k-date-picker {
+  /** 控制提示文字的位置 **/
+  --bottom-offset: 10%;
+  /** 控制提示文字的大小 **/
+  --bottom-font-size: 18rpx;
+  /** 选中时字体的颜色**/
+  --seletct--text-color: white;
+  /** 选中时背景颜色 **/
+  --seletct--background-color: #005ceeff;
+  /** 处于区间的字体颜色 **/
+  --in-range--text-color: #005ceeff;
+  /** 处于区间的背景颜色 **/
+  --in-range--background-color: #f2f6fc;
+  /** 限制的字体颜色 **/
+  --limit--text-color: #a8abb2;
+  /** 限制的背景颜色 **/
+  --limit--background-color: #f5f7fa;
+  /** current的背景颜色 **/
+  --current--background-color: #e4edfe;
+  /** current的字体颜色 **/
+  --current--text-color: #7994b2;
+
+  box-sizing: border-box;
+  width: 100%;
+  padding: 30rpx 30rpx 20rpx;
+  background-color: white;
+  border-radius: 10px 10px 0 0;
+  position: relative;
+  display: flex;
+  flex-direction: column;
+  .is-current {
+    border-radius: 8rpx;
+    background-color: var(--current--background-color);
+    position: relative;
+    --color: var(--current--text-color);
+    &:after {
+      color: var(--color);
+      position: absolute;
+      left: 50%;
+      bottom: var(--bottom-offset);
+      transform: translate(-50%);
+      font-size: var(--bottom-font-size);
+      line-height: var(--bottom-font-size);
+      /* #ifdef APP-PLUS */
+      font-weight: 500;
+      /* #endif */
+    }
+  }
+  .is-day {
+    grid-template-columns: repeat(7, minmax(0, 1fr));
+    .is-current:after {
+      content: '本日';
+    }
+  }
+  .is-month {
+    grid-template-columns: repeat(4, minmax(0, 1fr));
+    margin-top: 24rpx;
+    .is-current:after {
+      content: '';
+    }
+  }
+  .is-year {
+    grid-template-columns: repeat(4, minmax(0, 1fr));
+    margin-top: 24rpx;
+    .is-current:after {
+      content: '本年';
+    }
+  }
+  .inner-top {
+    display: flex;
+    flex-direction: row;
+    justify-content: space-between;
+    align-items: center;
+    padding-bottom: 30rpx;
+  }
+  .inner-body {
+    &__arrow {
+      display: flex;
+      flex-direction: row;
+      align-items: center;
+      justify-content: center;
+    }
+    &__calendar {
+      &_week {
+        display: grid;
+        grid-template-columns: repeat(7, minmax(0, 1fr));
+        &--item {
+          /* #ifdef MP-WEIXIN */
+          font-weight: bolder;
+          /* #endif */
+          /* #ifdef APP-PLUS */
+          font-weight: 500;
+          /* #endif */
+          color: #303133;
+          font-size: 30rpx;
+          display: flex;
+          flex-direction: column;
+          align-items: center;
+          justify-content: center;
+          height: 88rpx;
+        }
+      }
+
+      &_block {
+        &:after {
+          display: block;
+          content: attr(data-text);
+          color: #eef2f8ff;
+          font-size: 280rpx;
+          position: absolute;
+          left: 50%;
+          top: 50%;
+          transform: translate(-50%, -50%);
+          z-index: 1;
+        }
+        position: relative;
+        display: grid;
+        row-gap: 20rpx;
+        &--item {
+          z-index: 2;
+          font-size: 30rpx;
+          color: #7994b2;
+          display: flex;
+          flex-direction: column;
+          align-items: center;
+          justify-content: center;
+          aspect-ratio: 1;
+        }
+      }
+    }
+  }
+  .is-limit {
+    color: var(--limit--text-color) !important;
+    background-color: var(--limit--background-color);
+  }
+  .is-in-range {
+    --color: var(--in-range--text-color) !important;
+    background-color: var(--in-range--background-color) !important;
+    border-radius: 0 !important;
+    color: var(--in-range--text-color) !important;
+  }
+  .is-selected {
+    &:after {
+      content: '' !important;
+      color: var(--seletct--text-color) !important;
+      position: absolute;
+      left: 50%;
+      bottom: var(--bottom-offset);
+      transform: translate(-50%);
+      font-size: var(--bottom-font-size);
+      line-height: var(--bottom-font-size);
+      /* #ifdef APP-PLUS */
+      font-weight: 500;
+      /* #endif */
+    }
+    position: relative;
+    background-color: var(--seletct--background-color) !important;
+    color: var(--seletct--text-color) !important;
+    border-radius: 8rpx !important;
+  }
+  .is-start {
+    &:after {
+      content: '';
+      color: var(--seletct--text-color) !important;
+      position: absolute;
+      left: 50%;
+      bottom: var(--bottom-offset);
+      transform: translate(-50%);
+      font-size: var(--bottom-font-size);
+      line-height: var(--bottom-font-size);
+      /* #ifdef APP-PLUS */
+      font-weight: 500;
+      /* #endif */
+    }
+    position: relative;
+    background-color: var(--seletct--background-color) !important;
+    color: var(--seletct--text-color) !important;
+    border-radius: 8rpx 0 0 8rpx;
+  }
+  .is-end {
+    &:after {
+      content: '';
+      color: var(--seletct--text-color) !important;
+      position: absolute;
+      left: 50%;
+      bottom: var(--bottom-offset);
+      transform: translate(-50%);
+      font-size: var(--bottom-font-size);
+      line-height: var(--bottom-font-size);
+      /* #ifdef APP-PLUS */
+      font-weight: 500;
+      /* #endif */
+    }
+    position: relative;
+    background-color: var(--seletct--background-color) !important;
+    color: var(--seletct--text-color) !important;
+    border-radius: 0 8rpx 8rpx 0;
+  }
+  .image-closable {
+    width: 36rpx;
+    height: 36rpx;
+  }
+  .image-arrow {
+    width: 36rpx;
+    height: 36rpx;
+  }
+  .right-arrow {
+    transform: rotate(180deg);
+  }
+  .brief {
+    margin: 0 30rpx;
+    color: #000000d9;
+    font-size: 30rpx;
+    /* #ifdef MP-WEIXIN */
+    font-weight: bolder;
+    /* #endif */
+    /* #ifdef APP-PLUS */
+    font-weight: 500;
+    /* #endif */
+  }
+  .selected-date {
+    display: flex;
+    flex-direction: row;
+    align-items: center;
+    justify-content: center;
+    padding: 10rpx 0;
+    color: #94a0b4ff;
+    font-size: 30rpx;
+    margin-top: 20rpx;
+    width: 600rpx;
+  }
+  .selected-wrap {
+    display: flex;
+    flex-direction: row;
+    align-items: center;
+    justify-content: center;
+    width: 100%;
+  }
+}
+</style>

+ 444 - 0
src/components/dateSelect/k-date-picker/day.js

@@ -0,0 +1,444 @@
+export default (function () {
+  'use strict'
+  var t = 1e3,
+    e = 6e4,
+    n = 36e5,
+    r = 'millisecond',
+    i = 'second',
+    s = 'minute',
+    u = 'hour',
+    a = 'day',
+    o = 'week',
+    c = 'month',
+    f = 'quarter',
+    h = 'year',
+    d = 'date',
+    l = 'Invalid Date',
+    $ =
+      /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,
+    y = /\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,
+    M = {
+      name: 'en',
+      weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+      months:
+        'January_February_March_April_May_June_July_August_September_October_November_December'.split(
+          '_'
+        ),
+      ordinal: function (t) {
+        var e = ['th', 'st', 'nd', 'rd'],
+          n = t % 100
+        return '[' + t + (e[(n - 20) % 10] || e[n] || e[0]) + ']'
+      }
+    },
+    m = function (t, e, n) {
+      var r = String(t)
+      return !r || r.length >= e ? t : '' + Array(e + 1 - r.length).join(n) + t
+    },
+    v = {
+      s: m,
+      z: function (t) {
+        var e = -t.utcOffset(),
+          n = Math.abs(e),
+          r = Math.floor(n / 60),
+          i = n % 60
+        return (e <= 0 ? '+' : '-') + m(r, 2, '0') + ':' + m(i, 2, '0')
+      },
+      m: function t(e, n) {
+        if (e.date() < n.date()) return -t(n, e)
+        var r = 12 * (n.year() - e.year()) + (n.month() - e.month()),
+          i = e.clone().add(r, c),
+          s = n - i < 0,
+          u = e.clone().add(r + (s ? -1 : 1), c)
+        return +(-(r + (n - i) / (s ? i - u : u - i)) || 0)
+      },
+      a: function (t) {
+        return t < 0 ? Math.ceil(t) || 0 : Math.floor(t)
+      },
+      p: function (t) {
+        return (
+          { M: c, y: h, w: o, d: a, D: d, h: u, m: s, s: i, ms: r, Q: f }[t] ||
+          String(t || '')
+            .toLowerCase()
+            .replace(/s$/, '')
+        )
+      },
+      u: function (t) {
+        return void 0 === t
+      }
+    },
+    g = 'en',
+    D = {}
+  D[g] = M
+  var p = '$isDayjsObject',
+    S = function (t) {
+      return t instanceof _ || !(!t || !t[p])
+    },
+    w = function t(e, n, r) {
+      var i
+      if (!e) return g
+      if ('string' == typeof e) {
+        var s = e.toLowerCase()
+        D[s] && (i = s), n && ((D[s] = n), (i = s))
+        var u = e.split('-')
+        if (!i && u.length > 1) return t(u[0])
+      } else {
+        var a = e.name
+        ;(D[a] = e), (i = a)
+      }
+      return !r && i && (g = i), i || (!r && g)
+    },
+    O = function (t, e) {
+      if (S(t)) return t.clone()
+      var n = 'object' == typeof e ? e : {}
+      return (n.date = t), (n.args = arguments), new _(n)
+    },
+    b = v
+  ;(b.l = w),
+    (b.i = S),
+    (b.w = function (t, e) {
+      return O(t, { locale: e.$L, utc: e.$u, x: e.$x, $offset: e.$offset })
+    })
+  var _ = (function () {
+      function M(t) {
+        ;(this.$L = w(t.locale, null, !0)),
+          this.parse(t),
+          (this.$x = this.$x || t.x || {}),
+          (this[p] = !0)
+      }
+      var m = M.prototype
+      return (
+        (m.parse = function (t) {
+          ;(this.$d = (function (t) {
+            var e = t.date,
+              n = t.utc
+            if (null === e) return new Date(NaN)
+            if (b.u(e)) return new Date()
+            if (e instanceof Date) return new Date(e)
+            if ('string' == typeof e && !/Z$/i.test(e)) {
+              var r = e.match($)
+              if (r) {
+                var i = r[2] - 1 || 0,
+                  s = (r[7] || '0').substring(0, 3)
+                return n
+                  ? new Date(Date.UTC(r[1], i, r[3] || 1, r[4] || 0, r[5] || 0, r[6] || 0, s))
+                  : new Date(r[1], i, r[3] || 1, r[4] || 0, r[5] || 0, r[6] || 0, s)
+              }
+            }
+            return new Date(e)
+          })(t)),
+            this.init()
+        }),
+        (m.init = function () {
+          var t = this.$d
+          ;(this.$y = t.getFullYear()),
+            (this.$M = t.getMonth()),
+            (this.$D = t.getDate()),
+            (this.$W = t.getDay()),
+            (this.$H = t.getHours()),
+            (this.$m = t.getMinutes()),
+            (this.$s = t.getSeconds()),
+            (this.$ms = t.getMilliseconds())
+        }),
+        (m.$utils = function () {
+          return b
+        }),
+        (m.isValid = function () {
+          return !(this.$d.toString() === l)
+        }),
+        (m.isSame = function (t, e) {
+          var n = O(t)
+          return this.startOf(e) <= n && n <= this.endOf(e)
+        }),
+        (m.isAfter = function (t, e) {
+          return O(t) < this.startOf(e)
+        }),
+        (m.isBefore = function (t, e) {
+          return this.endOf(e) < O(t)
+        }),
+        (m.$g = function (t, e, n) {
+          return b.u(t) ? this[e] : this.set(n, t)
+        }),
+        (m.unix = function () {
+          return Math.floor(this.valueOf() / 1e3)
+        }),
+        (m.valueOf = function () {
+          return this.$d.getTime()
+        }),
+        (m.startOf = function (t, e) {
+          var n = this,
+            r = !!b.u(e) || e,
+            f = b.p(t),
+            l = function (t, e) {
+              var i = b.w(n.$u ? Date.UTC(n.$y, e, t) : new Date(n.$y, e, t), n)
+              return r ? i : i.endOf(a)
+            },
+            $ = function (t, e) {
+              return b.w(
+                n.toDate()[t].apply(n.toDate('s'), (r ? [0, 0, 0, 0] : [23, 59, 59, 999]).slice(e)),
+                n
+              )
+            },
+            y = this.$W,
+            M = this.$M,
+            m = this.$D,
+            v = 'set' + (this.$u ? 'UTC' : '')
+          switch (f) {
+            case h:
+              return r ? l(1, 0) : l(31, 11)
+            case c:
+              return r ? l(1, M) : l(0, M + 1)
+            case o:
+              var g = this.$locale().weekStart || 0,
+                D = (y < g ? y + 7 : y) - g
+              return l(r ? m - D : m + (6 - D), M)
+            case a:
+            case d:
+              return $(v + 'Hours', 0)
+            case u:
+              return $(v + 'Minutes', 1)
+            case s:
+              return $(v + 'Seconds', 2)
+            case i:
+              return $(v + 'Milliseconds', 3)
+            default:
+              return this.clone()
+          }
+        }),
+        (m.endOf = function (t) {
+          return this.startOf(t, !1)
+        }),
+        (m.$set = function (t, e) {
+          var n,
+            o = b.p(t),
+            f = 'set' + (this.$u ? 'UTC' : ''),
+            l = ((n = {}),
+            (n[a] = f + 'Date'),
+            (n[d] = f + 'Date'),
+            (n[c] = f + 'Month'),
+            (n[h] = f + 'FullYear'),
+            (n[u] = f + 'Hours'),
+            (n[s] = f + 'Minutes'),
+            (n[i] = f + 'Seconds'),
+            (n[r] = f + 'Milliseconds'),
+            n)[o],
+            $ = o === a ? this.$D + (e - this.$W) : e
+          if (o === c || o === h) {
+            var y = this.clone().set(d, 1)
+            y.$d[l]($), y.init(), (this.$d = y.set(d, Math.min(this.$D, y.daysInMonth())).$d)
+          } else l && this.$d[l]($)
+          return this.init(), this
+        }),
+        (m.set = function (t, e) {
+          return this.clone().$set(t, e)
+        }),
+        (m.get = function (t) {
+          return this[b.p(t)]()
+        }),
+        (m.add = function (r, f) {
+          var d,
+            l = this
+          r = Number(r)
+          var $ = b.p(f),
+            y = function (t) {
+              var e = O(l)
+              return b.w(e.date(e.date() + Math.round(t * r)), l)
+            }
+          if ($ === c) return this.set(c, this.$M + r)
+          if ($ === h) return this.set(h, this.$y + r)
+          if ($ === a) return y(1)
+          if ($ === o) return y(7)
+          var M = ((d = {}), (d[s] = e), (d[u] = n), (d[i] = t), d)[$] || 1,
+            m = this.$d.getTime() + r * M
+          return b.w(m, this)
+        }),
+        (m.subtract = function (t, e) {
+          return this.add(-1 * t, e)
+        }),
+        (m.format = function (t) {
+          var e = this,
+            n = this.$locale()
+          if (!this.isValid()) return n.invalidDate || l
+          var r = t || 'YYYY-MM-DDTHH:mm:ssZ',
+            i = b.z(this),
+            s = this.$H,
+            u = this.$m,
+            a = this.$M,
+            o = n.weekdays,
+            c = n.months,
+            f = n.meridiem,
+            h = function (t, n, i, s) {
+              return (t && (t[n] || t(e, r))) || i[n].slice(0, s)
+            },
+            d = function (t) {
+              return b.s(s % 12 || 12, t, '0')
+            },
+            $ =
+              f ||
+              function (t, e, n) {
+                var r = t < 12 ? 'AM' : 'PM'
+                return n ? r.toLowerCase() : r
+              }
+          return r.replace(y, function (t, r) {
+            return (
+              r ||
+              (function (t) {
+                switch (t) {
+                  case 'YY':
+                    return String(e.$y).slice(-2)
+                  case 'YYYY':
+                    return b.s(e.$y, 4, '0')
+                  case 'M':
+                    return a + 1
+                  case 'MM':
+                    return b.s(a + 1, 2, '0')
+                  case 'MMM':
+                    return h(n.monthsShort, a, c, 3)
+                  case 'MMMM':
+                    return h(c, a)
+                  case 'D':
+                    return e.$D
+                  case 'DD':
+                    return b.s(e.$D, 2, '0')
+                  case 'd':
+                    return String(e.$W)
+                  case 'dd':
+                    return h(n.weekdaysMin, e.$W, o, 2)
+                  case 'ddd':
+                    return h(n.weekdaysShort, e.$W, o, 3)
+                  case 'dddd':
+                    return o[e.$W]
+                  case 'H':
+                    return String(s)
+                  case 'HH':
+                    return b.s(s, 2, '0')
+                  case 'h':
+                    return d(1)
+                  case 'hh':
+                    return d(2)
+                  case 'a':
+                    return $(s, u, !0)
+                  case 'A':
+                    return $(s, u, !1)
+                  case 'm':
+                    return String(u)
+                  case 'mm':
+                    return b.s(u, 2, '0')
+                  case 's':
+                    return String(e.$s)
+                  case 'ss':
+                    return b.s(e.$s, 2, '0')
+                  case 'SSS':
+                    return b.s(e.$ms, 3, '0')
+                  case 'Z':
+                    return i
+                }
+                return null
+              })(t) ||
+              i.replace(':', '')
+            )
+          })
+        }),
+        (m.utcOffset = function () {
+          return 15 * -Math.round(this.$d.getTimezoneOffset() / 15)
+        }),
+        (m.diff = function (r, d, l) {
+          var $,
+            y = this,
+            M = b.p(d),
+            m = O(r),
+            v = (m.utcOffset() - this.utcOffset()) * e,
+            g = this - m,
+            D = function () {
+              return b.m(y, m)
+            }
+          switch (M) {
+            case h:
+              $ = D() / 12
+              break
+            case c:
+              $ = D()
+              break
+            case f:
+              $ = D() / 3
+              break
+            case o:
+              $ = (g - v) / 6048e5
+              break
+            case a:
+              $ = (g - v) / 864e5
+              break
+            case u:
+              $ = g / n
+              break
+            case s:
+              $ = g / e
+              break
+            case i:
+              $ = g / t
+              break
+            default:
+              $ = g
+          }
+          return l ? $ : b.a($)
+        }),
+        (m.daysInMonth = function () {
+          return this.endOf(c).$D
+        }),
+        (m.$locale = function () {
+          return D[this.$L]
+        }),
+        (m.locale = function (t, e) {
+          if (!t) return this.$L
+          var n = this.clone(),
+            r = w(t, e, !0)
+          return r && (n.$L = r), n
+        }),
+        (m.clone = function () {
+          return b.w(this.$d, this)
+        }),
+        (m.toDate = function () {
+          return new Date(this.valueOf())
+        }),
+        (m.toJSON = function () {
+          return this.isValid() ? this.toISOString() : null
+        }),
+        (m.toISOString = function () {
+          return this.$d.toISOString()
+        }),
+        (m.toString = function () {
+          return this.$d.toUTCString()
+        }),
+        M
+      )
+    })(),
+    k = _.prototype
+  return (
+    (O.prototype = k),
+    [
+      ['$ms', r],
+      ['$s', i],
+      ['$m', s],
+      ['$H', u],
+      ['$W', a],
+      ['$M', c],
+      ['$y', h],
+      ['$D', d]
+    ].forEach(function (t) {
+      k[t[1]] = function (e) {
+        return this.$g(e, t[0], t[1])
+      }
+    }),
+    (O.extend = function (t, e) {
+      return t.$i || (t(e, _, O), (t.$i = !0)), O
+    }),
+    (O.locale = w),
+    (O.isDayjs = S),
+    (O.unix = function (t) {
+      return O(1e3 * t)
+    }),
+    (O.en = D[g]),
+    (O.Ls = D),
+    (O.p = {}),
+    O
+  )
+})()

+ 23 - 0
src/components/dateSelect/k-date-picker/utils.js

@@ -0,0 +1,23 @@
+const weeksChinese = ['日', '一', '二', '三', '四', '五', '六']
+const monthsChinese = [
+  '一月',
+  '二月',
+  '三月',
+  '四月',
+  '五月',
+  '六月',
+  '七月',
+  '八月',
+  '九月',
+  '十月',
+  '十一月',
+  '十二月'
+]
+const left =
+  'data:image/svg+xml;base64,PHN2ZyBjbGFzcz0iaWNvbiIgd2lkdGg9IjU0IiBoZWlnaHQ9IjU0IiB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiMyYzJjMmMiIGQ9Ik0zODQgNTEybDE5MiAxOTIgMjkuODY3LTI5Ljg2N0w0NDMuNzMzIDUxMmwxNjIuMTM0LTE2Mi4xMzNMNTc2IDMyMCAzODQgNTEyeiIvPjwvc3ZnPg=='
+const left_double =
+  'data:image/svg+xml;base64,PHN2ZyBjbGFzcz0iaWNvbiIgd2lkdGg9IjU0IiBoZWlnaHQ9IjU0IiB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiMyYzJjMmMiIGQ9Ik01NTAuNCA0OTQuOTMzbDE5MiAxOTIgMjkuODY3LTI5Ljg2Ni0xNjIuMTM0LTE2Mi4xMzRMNzcyLjI2NyAzMzIuOCA3NDIuNCAzMDIuOTMzbC0xOTIgMTkyem0tMjU2IDBsMTkyIDE5MiAyOS44NjctMjkuODY2LTE2Mi4xMzQtMTYyLjEzNEw1MTYuMjY3IDMzMi44IDQ4Ni40IDMwMi45MzNsLTE5MiAxOTJ6Ii8+PC9zdmc+'
+const closable =
+  'data:image/svg+xml;base64,PHN2ZyBjbGFzcz0iaWNvbiIgd2lkdGg9IjU0IiBoZWlnaHQ9IjU0IiB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiMyYzJjMmMiIGQ9Ik00ODEuODM1IDUxMkwxNTUuNTg0IDE4NS43NWEyMS4zMzMgMjEuMzMzIDAgMCAxIDMwLjE2NS0zMC4xNjZMNTEyIDQ4MS44MzRsMzI2LjI1LTMyNi4yNWEyMS4zMzMgMjEuMzMzIDAgMCAxIDMwLjE2NiAzMC4xNjVMNTQyLjE2NiA1MTJsMzI2LjI1IDMyNi4yNWEyMS4zMzMgMjEuMzMzIDAgMCAxLTMwLjE2NSAzMC4xNjZMNTEyIDU0Mi4xNjZsLTMyNi4yNSAzMjYuMjVhMjEuMzMzIDIxLjMzMyAwIDEgMS0zMC4xNjYtMzAuMTY1TDQ4MS44MzQgNTEyeiIvPjwvc3ZnPg=='
+
+export { weeksChinese, monthsChinese, left, left_double, closable }

+ 45 - 0
src/components/noData/index.vue

@@ -0,0 +1,45 @@
+<!--
+ * @Description: 无数据
+ * @Author: hanyu
+ * @Date: 2020-07-21 10:14:59
+ * @LastEditTime: 2022/12/01
+ * @LastEditors: Please set LastEditors
+-->
+<template>
+  <view class="">
+    <view class="no-data">
+      <image src="@/static/images/common/no-data.png" />
+      <text class="txt">{{ desc }}</text>
+    </view>
+  </view>
+</template>
+
+<script setup lang="ts">
+const props = withDefaults(
+  defineProps<{
+    desc?: string
+  }>(),
+  {
+    desc: '暂无数据'
+  }
+)
+</script>
+<style lang="scss" scoped>
+.no-data {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  padding-top: 300rpx;
+  flex-direction: column;
+
+  .txt {
+    margin-top: 28rpx;
+    font-size: 28rpx;
+    color: #898989;
+  }
+  image {
+    width: 300rpx;
+    height: 260rpx;
+  }
+}
+</style>

+ 147 - 0
src/components/sharePopup/index.vue

@@ -0,0 +1,147 @@
+<template>
+  <uv-popup ref="shrePopupRef" mode="bottom" round="15" @change="popupChange">
+    <view class="share-popup">
+      <view class="btns">
+        <button class="btn" plain="true" @click="close">取消</button>
+        <button
+          :disabled="disabled"
+          class="btn confirm"
+          plain="true"
+          :data-title="shareTitle"
+          :data-id="sharePopupId"
+          :data-packageId="packageId"
+          :data-remark="remark || ''"
+          open-type="share"
+        >
+          确定
+        </button>
+      </view>
+      <view class="tips"> 注意:不能针对非医疗专业人员转发处方药相关宣传信息。 </view>
+      <view class="remark">
+        <view class="title">备注</view>
+        <uv-input v-model="remark" />
+      </view>
+      <view class="picker">
+        <view class="title">选择执行包</view>
+        <picker-view @change="pickerChange" @pickstart="pickStart" @pickend="pickEnd">
+          <picker-view-column class="picker-view-column">
+            <view class="picker-item" v-for="item in packageList" :key="item.packageList">{{
+              item.label
+            }}</view>
+          </picker-view-column>
+        </picker-view>
+      </view>
+    </view>
+  </uv-popup>
+</template>
+
+<script setup lang="ts">
+import { getPackageListByTaskTypeApi } from '@/service/modules/getTask'
+import { ref, watch } from 'vue'
+import { defineEmits } from 'vue'
+
+const emit = defineEmits(['initInfo'])
+
+const props = defineProps({
+  sharePopupType: String,
+  sharePopupId: String,
+  shareTitle: String
+})
+
+watch(
+  () => props.sharePopupId,
+  () => {
+    shrePopupRef.value.open()
+    getPackageListByTaskType()
+  }
+)
+
+const remark = ref()
+const disabled = ref(false)
+
+const shrePopupRef = ref()
+
+const packageId = ref('')
+const packageList = ref()
+const getPackageListByTaskType = async () => {
+  if (props.sharePopupType) {
+    const res = await getPackageListByTaskTypeApi(props.sharePopupType)
+    packageList.value = res.data
+    if (res.data.length) {
+      packageId.value = res.data[0].value
+    }
+  }
+}
+
+const pickerChange = (e: any) => {
+  const val = e.detail.value[0]
+  packageId.value = packageList.value[val].value
+}
+
+const pickStart = () => {
+  disabled.value = true
+}
+const pickEnd = () => {
+  disabled.value = false
+}
+
+const close = () => {
+  shrePopupRef.value.close()
+}
+
+const popupChange = (e: any) => {
+  if (!e.show) {
+    emit('initInfo')
+  }
+}
+defineExpose({
+  close
+})
+</script>
+
+<style lang="scss" scoped>
+.share-popup {
+  height: 65vh;
+  padding: 30rpx;
+  .btns {
+    height: 80rpx;
+    padding: 0 20rpx;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+
+    .btn {
+      margin: 0;
+      height: 80rpx;
+      font-size: 30rpx;
+      border: none;
+    }
+    .confirm {
+      color: #6eb657;
+    }
+  }
+  .tips {
+    margin-top: 30rpx;
+    color: #f91f1f;
+    font-size: 24rpx;
+    line-height: 30rpx;
+  }
+  .remark {
+    margin-top: 30rpx;
+    .title {
+      margin-bottom: 20rpx;
+    }
+  }
+  .picker {
+    margin-top: 30rpx;
+    .picker-view-column {
+      margin-top: 30rpx;
+      height: 25vh;
+      .picker-item {
+        text-align: center;
+        line-height: 68rpx;
+      }
+    }
+  }
+}
+</style>

+ 89 - 0
src/components/tabber/index.vue

@@ -0,0 +1,89 @@
+<template>
+  <uv-tabbar :value="current" @change="change" activeColor="#6eb657">
+    <uv-tabbar-item v-for="item in currList" :text="item.text" :key="item.text" :name="item.name">
+      <template v-slot:active-icon>
+        <image class="icon" :src="item.selectedIconPath"></image>
+      </template>
+      <template v-slot:inactive-icon>
+        <image class="icon" :src="item.iconPath"></image>
+      </template>
+    </uv-tabbar-item>
+  </uv-tabbar>
+</template>
+
+<script setup lang="ts">
+import { onShow } from '@dcloudio/uni-app'
+import { ref } from 'vue'
+import { useTabbar } from '@/store/tabbar'
+const tabbar = useTabbar()
+const listA = [
+  {
+    text: '工作台',
+    name: 'work',
+    path: '/pages/index/index',
+    iconPath: '/static/images/common/tabbar/work.png',
+    selectedIconPath: '/static/images/common/tabbar/workAct.png'
+  },
+  {
+    text: '资讯',
+    name: 'news',
+    path: '/pages/news/index',
+    iconPath: '/static/images/common/tabbar/news.png',
+    selectedIconPath: '/static/images/common/tabbar/newsAct.png'
+  },
+  {
+    text: '我的',
+    name: 'mine',
+    path: '/pages/mine/index',
+    iconPath: '/static/images/common/tabbar/mine.png',
+    selectedIconPath: '/static/images/common/tabbar/mineAct.png'
+  }
+]
+const listB = [
+  {
+    text: '工作台',
+    name: 'work',
+    path: '/pages/index/index',
+    iconPath: '/static/images/common/tabbar/work.png',
+    selectedIconPath: '/static/images/common/tabbar/workAct.png'
+  },
+  {
+    text: '我的',
+    name: 'mine',
+    path: '/pages/mine/index',
+    iconPath: '/static/images/common/tabbar/mine.png',
+    selectedIconPath: '/static/images/common/tabbar/mineAct.png'
+  }
+]
+
+const currList = ref(listA)
+
+const current = ref()
+onShow(() => {
+  if (tabbar.roleType === 0) {
+    currList.value = listA
+  } else {
+    currList.value = listB
+  }
+  current.value = tabbar.currentTabbar
+})
+
+const change = (name: string) => {
+  if (name === current.value) return
+  const curr = currList.value.find((item) => item.name === name)
+  tabbar.setCurrentTabbar(name)
+  if (curr) {
+    const path = curr.path
+    uni.switchTab({
+      url: path
+    })
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.icon {
+  width: 36rpx;
+  height: 36rpx;
+}
+</style>

+ 150 - 0
src/components/table/tableData.vue

@@ -0,0 +1,150 @@
+<template>
+  <view class="table">
+    <uni-table border stripe emptyText="暂无更多数据">
+      <!-- 表头行 -->
+      <uni-tr>
+        <uni-th align="center" width="50">序号</uni-th>
+        <uni-th align="center">上级服务类型</uni-th>
+        <uni-th align="center" width="50">占比(%)</uni-th>
+        <uni-th align="center">任务类型</uni-th>
+        <uni-th align="center" width="50">积分值</uni-th>
+        <uni-th align="center" width="50">任务个数</uni-th>
+        <uni-th align="center" width="80">任务积分值</uni-th>
+      </uni-tr>
+      <!-- 表格数据行 -->
+      <uni-tr v-for="(item, index) in tableData" :key="item?.taskTypeId" index>
+        <uni-td>{{ index + 1 }}</uni-td>
+        <uni-td>{{ showInfo(item, index) }}</uni-td>
+        <uni-td>
+          <text
+            :class="{
+              error: item.score != 0 && (item.percentage < 25 || item.percentage > 50)
+            }"
+            >{{ showPercentage(item, index) }}</text
+          >
+        </uni-td>
+        <uni-td>{{ item.taskTypeName }}</uni-td>
+        <uni-td>{{ item.score }}</uni-td>
+        <uni-td>
+          <input type="number" @blur="(e) => change(e, index, item)" v-model="item.qty" />
+        </uni-td>
+        <uni-td>{{ item.subtotal }}</uni-td>
+      </uni-tr>
+      <!-- 结尾 -->
+      <uni-tr>
+        <uni-td>总计</uni-td>
+        <uni-td>---</uni-td>
+        <uni-td>---</uni-td>
+        <uni-td>---</uni-td>
+        <uni-td>---</uni-td>
+        <uni-td>{{ totalQty }}</uni-td>
+        <uni-td>{{ totalsubtotal }}</uni-td>
+      </uni-tr>
+    </uni-table>
+  </view>
+</template>
+
+<script setup lang="ts">
+import { getWmtasktypePageApi } from '@/service/modules/objectivesList'
+import { onMounted, ref } from 'vue'
+
+const porops = defineProps({
+  planScore: Number
+})
+
+const tableData = ref<any[]>([])
+
+const getList = async () => {
+  const obj = {
+    current: 1,
+    size: 100,
+    status: '3'
+  }
+  const res = await getWmtasktypePageApi(obj)
+  tableData.value = res?.data?.records.map((item: any) => {
+    if (item.delFlag == 0) {
+      const obj = {
+        qty: 0,
+        subtotal: 0,
+        editable: false,
+        baseId: item.baseId,
+        percentage: 0,
+        taskTypeName: item.taskTypeName,
+        score: item.score,
+        taskTypeId: item.id
+      }
+      return obj
+    }
+  })
+}
+
+const showInfo = (item: any, index: number) => {
+  if (index === 0) {
+    return item.baseId
+  }
+  if (tableData.value[index - 1].baseId === item.baseId) {
+    return ''
+  } else {
+    return item.baseId
+  }
+}
+const showPercentage = (item: any, index: number) => {
+  if (index === 0) {
+    return item.percentage
+  }
+  if (tableData.value[index - 1].baseId === item.baseId) {
+    return ''
+  } else {
+    return item.percentage
+  }
+}
+
+onMounted(() => {
+  getList()
+})
+
+const totalQty = ref(0)
+const totalsubtotal = ref(0)
+
+const calculatePercentage = (part, total) => {
+  if (total === 0) return 0 // 避免除以0错误
+  return Number(((part / total) * 100).toFixed(2))
+}
+
+const change = (detail: any, index: number, row: any) => {
+  tableData.value[index].subtotal = tableData.value[index].qty * tableData.value[index].score
+  totalQty.value = tableData.value.reduce((sum, row) => Number(sum) + Number(row.qty), 0)
+  totalsubtotal.value = tableData.value.reduce((sum, row) => Number(sum) + Number(row.subtotal), 0)
+
+  const allSubtotal = tableData.value.reduce((accumulator, currentValue) => {
+    if (currentValue.baseId === row.baseId) {
+      return accumulator + currentValue.subtotal
+    }
+    return accumulator
+  }, 0)
+
+  const percentage = calculatePercentage(allSubtotal, porops.planScore)
+  tableData.value.forEach((item) => {
+    if (item.baseId === row.baseId) {
+      item.percentage = percentage
+    }
+  })
+}
+
+const getData = () => {
+  return tableData.value
+}
+defineExpose({ getData })
+</script>
+
+<style lang="scss" scoped>
+.table {
+  width: 700rpx;
+  min-height: 300rpx;
+  background-color: #fff;
+  border-radius: 12rpx;
+}
+.error {
+  color: #f78989;
+}
+</style>

+ 123 - 0
src/components/table/tableDetail.vue

@@ -0,0 +1,123 @@
+<template>
+  <view class="table">
+    <uni-table border stripe emptyText="暂无更多数据">
+      <!-- 表头行 -->
+      <uni-tr>
+        <uni-th align="center" width="50">序号</uni-th>
+        <uni-th align="center">上级服务类型</uni-th>
+        <uni-th align="center" width="50">占比(%)</uni-th>
+        <uni-th align="center">任务类型</uni-th>
+        <uni-th align="center" width="50">积分值</uni-th>
+        <uni-th align="center" width="50">任务个数</uni-th>
+        <uni-th align="center" width="80">任务积分值</uni-th>
+      </uni-tr>
+      <!-- 表格数据行 -->
+      <uni-tr v-for="(item, index) in tableData" :key="item?.taskTypeId" index>
+        <uni-td>{{ index + 1 }}</uni-td>
+        <uni-td>{{ showInfo(item, index) }}</uni-td>
+        <uni-td>
+          <text
+            :class="{
+              error: item.score != 0 && (item.percentage < 25 || item.percentage > 50)
+            }"
+            >{{ showPercentage(item, index) }}</text
+          >
+        </uni-td>
+        <uni-td>{{ item.taskTypeName }}</uni-td>
+        <uni-td>{{ item.score }}</uni-td>
+        <uni-td>
+          <input type="number" @blur="(e) => change(e, index, item)" v-model="item.qty" />
+        </uni-td>
+        <uni-td>{{ item.subtotal }}</uni-td>
+      </uni-tr>
+      <!-- 结尾 -->
+      <uni-tr>
+        <uni-td>总计</uni-td>
+        <uni-td>---</uni-td>
+        <uni-td>---</uni-td>
+        <uni-td>---</uni-td>
+        <uni-td>---</uni-td>
+        <uni-td>{{ totalQty }}</uni-td>
+        <uni-td>{{ totalsubtotal }}</uni-td>
+      </uni-tr>
+    </uni-table>
+  </view>
+</template>
+
+<script setup lang="ts">
+import { getPlanDetailsApi } from '@/service/modules/objectivesList'
+import { ref } from 'vue'
+
+const porops = defineProps({
+  planScore: Number
+})
+
+const tableData = ref<any[]>([])
+const totalQty = ref(0)
+const totalsubtotal = ref(0)
+const getDetail = async (id: string) => {
+  const res = await getPlanDetailsApi(id)
+  tableData.value = res.data.items
+  totalQty.value = res.data.qty
+  totalsubtotal.value = res.data.total
+
+  let arr = tableData.value.map((item) => item.baseId)
+  arr = [...new Set(arr)]
+  for (let currBaseId of arr) {
+    const allSubtotal = tableData.value.reduce((accumulator, currentValue) => {
+      if (currentValue.baseId === currBaseId) {
+        return accumulator + currentValue.subtotal
+      }
+      return accumulator
+    }, 0)
+    const percentage = calculatePercentage(allSubtotal, porops.planScore)
+    tableData.value.forEach((item) => {
+      if (item.baseId === currBaseId) {
+        item.percentage = percentage
+      }
+    })
+  }
+
+  return res
+}
+
+const calculatePercentage = (part, total) => {
+  if (total === 0) return 0 // 避免除以0错误
+  return Number(((part / total) * 100).toFixed(2))
+}
+
+const showInfo = (item: any, index: number) => {
+  if (index === 0) {
+    return item.baseId
+  }
+  if (tableData.value[index - 1].baseId === item.baseId) {
+    return ''
+  } else {
+    return item.baseId
+  }
+}
+const showPercentage = (item: any, index: number) => {
+  if (index === 0) {
+    return item.percentage
+  }
+  if (tableData.value[index - 1].baseId === item.baseId) {
+    return ''
+  } else {
+    return item.percentage
+  }
+}
+
+defineExpose({ getDetail })
+</script>
+
+<style lang="scss" scoped>
+.table {
+  width: 700rpx;
+  min-height: 300rpx;
+  background-color: #fff;
+  border-radius: 12rpx;
+}
+.error {
+  color: #f78989;
+}
+</style>

+ 221 - 0
src/components/uploadImg/index.vue

@@ -0,0 +1,221 @@
+<template>
+  <view class="upload" @click="beforeUploadImg">
+    <view class="icon-add"></view>
+    <view class="icon-add rotate"></view>
+    <canvas
+      :style="{
+        width: `${thumbWidth}px`,
+        height: `${thumbHeight}px`,
+        position: 'fixed',
+        left: '10000rpx'
+      }"
+      canvas-id="myCanvas"
+    ></canvas>
+  </view>
+</template>
+
+<script setup lang="ts">
+import { uploadFile } from '@/utils/upload'
+import { onMounted, defineEmits, ref, getCurrentInstance } from 'vue'
+import { getWxLocationApi } from '@/wxUtils/index'
+import { qqmapsdk } from '@/wxUtils/QQMapWX'
+
+const emit = defineEmits(['uploadImgInfo'])
+
+const { ctx: _this } = getCurrentInstance() as any
+
+const porops = defineProps({
+  count: Number
+})
+
+interface imgType {
+  path: string
+  url: string
+}
+
+const sourceType = ref<string[]>([])
+
+const beforeUploadImg = () => {
+  uni.showActionSheet({
+    itemList: ['相机', '从相册选择'],
+    success: function (res) {
+      if (res.tapIndex === 0) {
+        sourceType.value = ['camera']
+      } else {
+        sourceType.value = ['album']
+      }
+      uploadImg()
+    },
+    fail: function (res) {
+      console.log('res', res)
+    }
+  })
+}
+
+onMounted(() => {
+  getLocation()
+})
+
+const address = ref()
+const getLocation = async () => {
+  try {
+    const res: any = await getWxLocationApi()
+    qqmapsdk.reverseGeocoder({
+      location: {
+        latitude: res?.latitude,
+        longitude: res?.longitude
+      },
+      success: function (res: any) {
+        const result = res.result
+        address.value = result.address
+      }
+    })
+  } catch (e) {
+    uni.showToast({
+      title: '获取定位失败',
+      icon: 'none'
+    })
+    console.log(e)
+  }
+}
+
+const uploadImg = async () => {
+  uni.chooseImage({
+    count: porops?.count || 9,
+    sizeType: ['original', 'compressed'],
+    sourceType: sourceType.value,
+    async success(res: any) {
+      console.log('res', res)
+
+      let tempFiles = res.tempFiles
+      // 当前相片来源为拍照
+      if (sourceType.value[0] === 'camera') {
+        const path = await addWatermark(tempFiles[0].path)
+        if (path) {
+          res.tempFiles[0].path = path
+          tempFiles[0].path = path
+        }
+      }
+
+      let flag = res.tempFilePaths.every((item: string) => {
+        return item.includes('.jpg') || item.includes('.jpeg') || item.includes('.png')
+      })
+      if (!flag) {
+        uni.showToast({
+          title: '暂不支持该格式照片,请更换为png或jpg格式',
+          icon: 'none',
+          duration: 3000
+        })
+        return
+      }
+
+      // 保存上传成功的数据
+      const imageValue: imgType[] = []
+      // 使用map而不是forEach,因为map会返回一个Promise数组
+      const uploadPromises = tempFiles.map(async (item: any) => {
+        let res: any = await uploadFile(item.path)
+        if (res?.code === 0) {
+          // 当前为拍照
+          if (sourceType.value[0] === 'camera') {
+            if (res?.data?.url) {
+              res.data.url = res.data.url + ';1'
+            }
+          } else if (sourceType.value[0] === 'album') {
+            res.data.url = res.data.url + ';2'
+          }
+          imageValue.push({
+            path: res?.data?.url,
+            url: import.meta.env.VITE_APP_URL + res?.data?.url
+          })
+        }
+      })
+      // 使用Promise.all等待所有的uploadFile函数执行完毕
+      await Promise.all(uploadPromises)
+      // 所有uploadFile上传完成后执行emit
+      emit('uploadImgInfo', imageValue)
+    }
+  })
+}
+
+const thumbWidth = ref()
+const thumbHeight = ref()
+const addWatermark = (fileUrl: string) => {
+  const dpr = wx.getSystemInfoSync().pixelRatio
+  return new Promise((resolve) => {
+    uni.getImageInfo({
+      src: fileUrl, // 替换为你的图片路径
+      success: async (res) => {
+        thumbWidth.value = res.width
+        thumbHeight.value = res.height
+        // #ifdef MP-WEIXIN
+        let text = address.value
+        let textArr = []
+        let oneRowTextNum = Math.floor(thumbWidth.value / 31) // 一行可以显示的文字数, 除以的31稍微比文字30大, 防止内容溢出
+        if (text?.length <= oneRowTextNum) {
+          textArr.push(text)
+        } else {
+          const totalRowNum = Math.ceil(text.length / oneRowTextNum) // 文字要显示的总行数
+          for (let i = 0; i < totalRowNum; i++) {
+            textArr.push(text.substr(i * oneRowTextNum, oneRowTextNum))
+          }
+        }
+        const time =
+          new Date().toJSON().substring(0, 10) + ' ' + new Date().toTimeString().substring(0, 8)
+
+        const ctx = uni.createCanvasContext('myCanvas', _this)
+        ctx.drawImage(fileUrl, 0, 0, thumbWidth.value, thumbHeight.value) //先画出图片
+        ctx.setFontSize(30) //注意:设置文字大小必须放在填充文字之前,否则不生效
+        ctx.setFillStyle('white')
+        for (let i = 0; i < textArr.length; i++) {
+          ctx.fillText(textArr[i], 10, 72 + i * 40)
+        }
+        ctx.setFontSize(26)
+        ctx.fillText(time, 10, 35)
+        ctx.draw(false, () => {
+          setTimeout(() => {
+            //绘画完成回调
+            //生成图片
+            uni.canvasToTempFilePath(
+              {
+                fileType: 'jpg',
+                canvasId: 'myCanvas',
+                success: async (res: any) => {
+                  resolve(res.tempFilePath)
+                },
+                fail(err: any) {
+                  console.log(err)
+                }
+              },
+              _this
+            )
+          }, 600)
+        })
+        // #endif
+      }
+    })
+  })
+}
+</script>
+
+<style lang="scss" scoped>
+.upload {
+  width: 200rpx;
+  height: 200rpx;
+  border: 2rpx solid #eee;
+  border-radius: 3px;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+
+  .icon-add {
+    width: 100rpx;
+    height: 10rpx;
+    background-color: #f1f1f1;
+    border-radius: 4rpx;
+  }
+  .rotate {
+    position: absolute;
+    transform: rotate(90deg);
+  }
+}
+</style>

+ 0 - 0
src/config/index.ts


+ 37 - 0
src/constants/provinces.ts

@@ -0,0 +1,37 @@
+export const provinces = [
+  { label: '全国', value: '1' },
+  { label: '北京市', value: '11' },
+  { label: '天津市', value: '12' },
+  { label: '河北省', value: '13' },
+  { label: '山西省', value: '14' },
+  { label: '内蒙古自治区', value: '15' },
+  { label: '辽宁省', value: '21' },
+  { label: '吉林省', value: '22' },
+  { label: '黑龙江省', value: '23' },
+  { label: '上海市', value: '31' },
+  { label: '江苏省', value: '32' },
+  { label: '浙江省', value: '33' },
+  { label: '安徽省', value: '34' },
+  { label: '福建省', value: '35' },
+  { label: '江西省', value: '36' },
+  { label: '山东省', value: '37' },
+  { label: '河南省', value: '41' },
+  { label: '湖北省', value: '42' },
+  { label: '湖南省', value: '43' },
+  { label: '广东省', value: '44' },
+  { label: '广西壮族自治区', value: '45' },
+  { label: '海南省', value: '46' },
+  { label: '重庆市', value: '50' },
+  { label: '四川省', value: '51' },
+  { label: '贵州省', value: '52' },
+  { label: '云南省', value: '53' },
+  { label: '西藏自治区', value: '54' },
+  { label: '陕西省', value: '61' },
+  { label: '甘肃省', value: '62' },
+  { label: '青海省', value: '63' },
+  { label: '宁夏回族自治区', value: '64' },
+  { label: '新疆维吾尔自治区', value: '65' },
+  { label: '台湾', value: '66' },
+  { label: '香港', value: '67' },
+  { label: '澳门', value: '68' }
+]

+ 6 - 0
src/constants/rolesType.ts

@@ -0,0 +1,6 @@
+export enum RoleEnum {
+  '全职学术推广员' = 5,
+  '兼职学术推广员' = 6,
+  '兼职CRC' = 10,
+  'HCP' = 13
+}

+ 9 - 0
src/custom.d.ts

@@ -0,0 +1,9 @@
+declare module '@climblee/uv-ui'
+
+declare module './mp_ecard_sdk/main.js'
+
+declare interface Uni {
+  $uv: any
+}
+
+declare const wx: any

+ 8 - 0
src/env.d.ts

@@ -0,0 +1,8 @@
+/// <reference types="vite/client" />
+
+declare module '*.vue' {
+  import { DefineComponent } from 'vue'
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types
+  const component: DefineComponent<{}, {}, any>
+  export default component
+}

+ 6 - 0
src/hooks/useGetLoginStatus.ts

@@ -0,0 +1,6 @@
+import { useLoginStore } from '@/store/login'
+
+export default function useGetLoginStatus() {
+  const loginStore = useLoginStore()
+  return loginStore.isLogin
+}

+ 17 - 0
src/hooks/useLoginout.ts

@@ -0,0 +1,17 @@
+import { useLoginStore } from '@/store/login'
+import { useTabbar } from '@/store/tabbar'
+
+export default async function useLogiutFn() {
+  const loginStore = useLoginStore()
+  const tabbarStore = useTabbar()
+  if (loginStore.accessToken) {
+    await loginStore.logoutFn()
+  }
+  loginStore.$reset()
+  tabbarStore.$reset()
+  setTimeout(() => {
+    uni.reLaunch({
+      url: '/pages/login/index'
+    })
+  }, 500)
+}

+ 6 - 0
src/hooks/useUpdatedUserInfo.ts

@@ -0,0 +1,6 @@
+import { useLoginStore } from '@/store/login'
+
+export default function useUpdateUserInfo() {
+  const loginStore = useLoginStore()
+  if (loginStore.isLogin) loginStore.getUserInfoByCode()
+}

+ 26 - 0
src/main.ts

@@ -0,0 +1,26 @@
+import { createSSRApp } from 'vue'
+import * as Pinia from 'pinia'
+import uvUI from '@climblee/uv-ui'
+import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
+import tabbar from './components/tabber/index.vue'
+import { Request } from '@/service/request'
+import App from './App.vue'
+export function createApp() {
+  const app = createSSRApp(App)
+  app.config.globalProperties.uni = uni
+
+  const store = Pinia.createPinia()
+
+  app.component('Tabbar', tabbar)
+  store.use(piniaPluginPersistedstate)
+
+  app.use(store)
+  app.use(uvUI)
+
+  Request()
+
+  return {
+    app,
+    Pinia
+  }
+}

+ 104 - 0
src/manifest.json

@@ -0,0 +1,104 @@
+{
+  "name": "",
+  "appid": "",
+  "description": "",
+  "versionName": "1.0.0",
+  "versionCode": "100",
+  "transformPx": false,
+  /* 5+App特有相关 */
+  "app-plus": {
+    "usingComponents": true,
+    "nvueStyleCompiler": "uni-app",
+    "compilerVersion": 3,
+    "splashscreen": {
+      "alwaysShowBeforeRender": true,
+      "waiting": true,
+      "autoclose": true,
+      "delay": 0
+    },
+    /* 模块配置 */
+    "modules": {},
+    /* 应用发布信息 */
+    "distribute": {
+      /* android打包配置 */
+      "android": {
+        "permissions": [
+          "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
+          "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
+          "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
+          "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
+          "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
+          "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
+          "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
+          "<uses-permission android:name=\"android.permission.CAMERA\"/>",
+          "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
+          "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
+          "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
+          "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
+          "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
+          "<uses-feature android:name=\"android.hardware.camera\"/>",
+          "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
+        ]
+      },
+      /* ios打包配置 */
+      "ios": {},
+      /* SDK配置 */
+      "sdkConfigs": {}
+    }
+  },
+  /* 快应用特有相关 */
+  "quickapp": {},
+  /* 小程序特有相关 */
+  "mp-weixin": {
+    "appid": "wx1c531f81360684cd",
+    "setting": {
+      "urlCheck": false
+    },
+    "usingComponents": true,
+    "permission": {
+      "scope.userLocation": {
+        "desc": "你的位置信息将用于小程序位置接口的效果展示"
+      },
+      "scope.userFuzzyLocation": {
+        "desc": "你的位置信息将用于小程序位置接口的效果展示"
+      }
+    },
+    "requiredPrivateInfos": [
+      "getLocation",
+      "onLocationChange",
+      "startLocationUpdateBackground",
+      "chooseAddress"
+    ]
+  },
+  "h5": {
+    "devServer": {
+      "disableHostCheck": true,
+      "proxy": {
+        "/admin": {
+          "target": "https://mic.cnbg.com.cn", //目标接口域名
+          "changeOrigin": true, // 是否跨域
+          "secure": false,
+          "pathRewrite": {
+            "^/admin": ""
+          }
+        }
+      }
+    },
+    "router": {
+      "base": "./"
+    }
+  },
+  "mp-alipay": {
+    "usingComponents": true
+  },
+  "mp-baidu": {
+    "usingComponents": true
+  },
+  "mp-toutiao": {
+    "usingComponents": true
+  },
+  "uniStatistics": {
+    "enable": false
+  },
+  "vueVersion": "3"
+}

+ 1 - 0
src/mp_ecard_sdk/constants/log.js

@@ -0,0 +1 @@
+const Log={SourceType:"mp_sdk_uni",version:"1.0.0",initSdk:"INIT_SDK",getConfig:"GET_CONFIG",getConfigRetry:"GET_CONFIG_BY_RETRY",webViewResult:"WEBVIEW_RESULT",webViewError:"WEBVIEW_ERROR",navigateToEid:"NAVIGATE_TO_EID",navigateBackFromEid:"NAVIGATE_BACK_FROM_EID",navigateBackFromEidFail:"NAVIGATE_BACK_FROM_EID_FAIL",startEid:"START_EID",startEidFail:"START_EID_FAIL",eidVerifyDone:"EID_VERIFY_DONE",requestFail:"REQUEST_FAIL",requestCatch:"REQUEST_CATCH"};export default Log;

+ 1 - 0
src/mp_ecard_sdk/globalConfig.js

@@ -0,0 +1 @@
+export default { normalPath: '' }

File diff suppressed because it is too large
+ 0 - 0
src/mp_ecard_sdk/index.css


+ 1 - 0
src/mp_ecard_sdk/index.js

@@ -0,0 +1 @@
+export const a = 'dasd'

+ 1 - 0
src/mp_ecard_sdk/index/index.js

@@ -0,0 +1 @@
+import getParameterByName from"../utils/getParameterByName";import Log from"../constants/log.js";import{$http}from"../utils/http";export default{data:()=>({token:"",appName:"test",isAgree:!1,redirectUri:"",isNavigating:!1,showWebView:!0}),onLoad(e){const{token:t}=e;this.token=t,this.redirectUri=`${uni.eidBaseUrl}/api/v1/Redirect?token=${t}`,this.getConfig(t)},methods:{changeAgree(e){const t=!this.isAgree;this.isAgree=t},getConfig(e){const t=this;$http({url:`/api/v1/GetConfig?token=${e}`,token:e,method:"GET",reTry:{tryCount:3}},o=>{if(0!==o.ErrorCode)uni.reportLogToEid({token:e,event:Log.getConfigFail,errCode:"",errMsg:o.ErrorMsg}),uni.showModal({title:"提示",content:"网络失败,请点击重新尝试",showCancel:!1,success(){uni.navigateBack()}});else{if(uni.reportLogToEid({token:e,event:Log.getConfig,errCode:o.ErrorCode,errMsg:o.ErrorMsg}),o.Data)return void(t.appName=o.Data.AppName);const i=o.ErrorMsg;uni.showModal({title:"提示",content:i,showCancel:!1,success(){uni.navigateBack()}})}})},handleWebViewLoad(e){const t=getParameterByName("success",e.detail.src);"true"===t&&(this.showWebView=!1),uni.reportLogToEid({token:this.token,event:Log.webViewResult,errMsg:`success参数为${t}`})},handleWebViewError(e){this.showWebView=!1,uni.reportLogToEid({token:this.token,event:Log.webViewError,errMsg:e.detail.src})},navigateToEid(){const e=this.token;this.isNavigating=!0;const t=this;uni.navigateToMiniProgram({appId:"wx0e2cb0b052a91c92",path:"pages/huiyan/index",envVersion:uni.eidEnvVersion,extraData:{useHuiyan:!0,huiyanToken:e},success(){uni.eidTokenToCallback=e},complete(o){t.isNavigating=!1,uni.reportLogToEid({token:e,event:Log.navigateToEid,errMsg:o.errMsg})}})}}};

+ 44 - 0
src/mp_ecard_sdk/index/index.vue

@@ -0,0 +1,44 @@
+<template>
+	<view v-if="showWebView">
+		<web-view :src="redirectUri" @load="handleWebViewLoad" @error="handleWebViewError"></web-view>
+	</view>
+
+	<view class="auth" v-else>
+		<view class="auth-logo">
+			<image src="https://faceid-ecard-1254418846.cos.ap-chengdu.myqcloud.com/eidLogo.png" />
+		</view>
+		<view class="title">
+			您正在授权
+			<view class="merchant-name">{{' '+ appName}}</view>
+		</view>
+		<view class="sub-title">通过腾讯云E证通核验并获取您的身份信息</view>
+		<view class="agreement">
+			<checkbox-group @change="changeAgree">
+				<checkbox :value="agreement" :checked="isAgree" />
+			</checkbox-group>
+			<view>
+				<view>
+					<view @click="changeAgree" style="display:inline">已阅读并同意</view>
+					<navigator url="/mp_ecard_sdk/protocol/service/service">《腾讯云E证通服务使用协议》</navigator>和
+				</view>
+				<view>
+					<navigator url="/mp_ecard_sdk/protocol/eid/eid">《eID数字身份小程序服务协议》</navigator>
+				</view>
+			</view>
+		</view>
+		<view class="button-area">
+			<button @click='navigateToEid' :disabled="!isAgree || isNavigating">
+				确认授权
+			</button>
+		</view>
+	</view>
+</template>
+
+<script>
+import index from "./index";
+export default index;
+</script>
+
+<style>
+@import url('../index.css');
+</style>

+ 91 - 0
src/mp_ecard_sdk/main.js

@@ -0,0 +1,91 @@
+/* eslint-disable no-undef */
+import validate from './utils/validate'
+import Log from './constants/log'
+import globalConfig from './globalConfig'
+function initEid(
+  e = 'https://eid.faceid.qq.com',
+  o = 'release',
+  n = 'https://eid-enhance.faceid.qq.com'
+) {
+  ;(uni.eidBaseUrl = e),
+    (uni.eidEnvVersion = o),
+    (uni.eidBackUpUrl = n),
+    uni.onAppShow((e) => {
+      const { scene: o } = e
+      if (1038 !== o) return
+      const { referrerInfo: n } = e,
+        { appId: i, extraData: t } = n
+      if ('wx0e2cb0b052a91c92' !== i || !t) return
+      const { verifyDone: r, token: a } = t
+      r && uni.handleEidVerifyDone
+        ? uni.eidTokenToCallback &&
+          uni.eidTokenToCallback === a &&
+          ((uni.eidTokenToCallback = ''),
+          uni.reportLogToEid({
+            token: a,
+            event: Log.navigateBackFromEid,
+            errMsg: `从EID核身完成返回,token:${a},verifyDone:${r}`
+          }),
+          uni.handleEidVerifyDone(t))
+        : uni.reportLogToEid({
+            token: a,
+            event: Log.navigateBackFromEidFail,
+            errMsg: `核验未完成或者没有处理核验完成的函数,token:${a},verifyDone:${r}`
+          })
+    })
+  const i = uni.getSystemInfoSync(),
+    { version: t } = i
+  uni.reportLogToEid = function (e) {
+    const { token: o = '', event: n = '', errCode: i = '', errMsg: r = '', data: a = {} } = e,
+      s = new Date(),
+      d = {
+        Token: o,
+        SourceType: Log.SourceType,
+        SourceVersion: Log.version,
+        EnvVersion: t,
+        Timestamp: s.getTime(),
+        Event: n,
+        ErrorCode: 'number' == typeof i ? i.toString() : i,
+        ErrorMsg: r,
+        Data: JSON.stringify(a)
+      }
+    console.log('开始上报日志:', d),
+      uni.request({
+        url: `${uni.eidBaseUrl}/api/common/ReportEvent`,
+        method: 'POST',
+        data: d,
+        success(e) {
+          console.log('上报日志完成:', 'payload:', d, 'res:', e)
+        }
+      })
+  }
+}
+function startEid(e) {
+  const { data: o, verifyDoneCallback: n } = e
+  if (!o || !n)
+    return (
+      uni.reportLogToEid({ token: i, event: Log.startEidFail, errMsg: '传入的参数有误' }),
+      void uni.showModal({ title: '提示', content: '传入的参数有误', showCancel: !1 })
+    )
+  const { token: i } = o
+  if (!validate.isValidateToken(i))
+    return (
+      uni.reportLogToEid({
+        token: i,
+        event: Log.startEidFail,
+        errMsg: `传入的token有误,token:${i}`
+      }),
+      void uni.showModal({ title: '提示', content: '传入的token有误', showCancel: !1 })
+    )
+  ;(uni.handleEidVerifyDone = (e) => {
+    const { token: o } = e
+    uni.navigateBack({
+      success() {
+        uni.reportLogToEid({ token: o, event: Log.EidVerifyDone, errMsg: `验证完成,token:${o}` }),
+          n({ token: o, verifyDone: !0 })
+      }
+    })
+  }),
+    uni.navigateTo({ url: `${globalConfig.normalPath}/mp_ecard_sdk/index/index?token=${i}` })
+}
+export { initEid, startEid }

+ 110 - 0
src/mp_ecard_sdk/protocol/eid/eid.vue

@@ -0,0 +1,110 @@
+<template>
+  <view class="protocol">
+    <view class="main">
+      <view class="h1">
+        <text>eID数字身份小程序服务协议</text>
+      </view>
+      <view>
+        <view style="display: inline" class="strong"> eID </view>
+        数字身份小程序是公安部第三研究所提供的为用户签发的采用国产密码算法生成的中国公民数字身份标记,并就用户身份信息和人脸信息通过腾讯的人脸识别验证身份信息功能向权威机构核验与权威数据的相符性。
+      </view>
+      <view>
+        我们特别提示您,
+        <view style="display: inline" class="strong">
+          您在页面点击“已阅读并同意《eID数字身份申请协议》”的行为视为您已经充分阅读并理解、同意本协议的内容并作出相关授权。
+        </view>
+      </view>
+
+      <view class="strong">一、eID数字身份说明</view>
+      <view>
+        eID数字身份是以公民身份号码为根,由公安部第三研究所(以下称“三所”)承建的“公安部公民网络身份识别系统”采用国产密码算法为中国公民生成的数字身份标记。eID数字身份具有以下特点:
+      </view>
+      <view> 1.1 eID数字身份以公民身份号码为根生成; </view>
+      <view> 1.2 eID数字身份采用国产密码算法产生,从eID数字身份无法逆推出公民身份号码原文; </view>
+      <view>
+        1.3
+        eID服务体系对于同一用户,在不同的互联网应用中产生的eID数字身份并不相同,即碎片化处理,防止被大数据技术追踪;
+      </view>
+      <view>
+        1.4
+        eID数字身份由“公安部公民网络身份识别系统”统一管理,碎片化处理后的eID数字身份可以有条件进行同一化处理。
+      </view>
+
+      <view class="strong">二、eID数字身份的签发</view>
+      <view>
+        2.1
+        三所通过eID数字身份小程序在向您签发eID数字身份之前,三所需要对您提供的姓名、身份号码、人脸信息通过腾讯提供的人脸识别验证身份功能与权威机构中的信息进行相符性比对,以确认您提供信息的真实性。
+      </view>
+      <view>
+        2.2
+        在通过相符性比对后,三所为您签发eID数字身份。您的eID数字身份与您申请时提供的身份信息及人脸信息唯一关联。
+      </view>
+
+      <view class="strong">三、eID数字身份小程序的使用</view>
+      <view>
+        在接入了腾讯云E证通的应用场景中,向您提供服务的应用会请您使用腾讯云E证通证明您的身份,腾讯云E证通会跳转到eID数字身份小程序,小程序会拉起腾讯的人脸识别验证功能,提取您的现场人脸视频并通过向权威机构的相应数据进行相符性比对,并将比对结果反馈给eID数字身份小程序。比对通过后,小程序会签发您的eID数字身份,并通过腾讯云E证通转发给向您提供服务的应用,由其决定是否继续向您提供服务。
+      </view>
+
+      <view class="strong">四、个人信息收集、使用、处理</view>
+      <view>
+        4.1 为了使用eID数字身份小程序,
+        <view style="display: inline" class="strong">
+          您授权并同意三所收集、使用您的姓名、身份号码信息、人脸视频,并通过腾讯人脸识别验证身份功能与权威机构的相应数据进行相符性比对,比对通过之后,由三所为您签发eID数字身份并存储您的姓名、身份证号码、人脸照片信息。
+        </view>
+      </view>
+      <view>
+        4.2
+        您授权并同意三所基于您的姓名、身份号码生成您的eID数字身份,并将您的eID数字身份向为您提供服务的应用方提供以完成实名登记、实名认证要求。
+      </view>
+      <view>
+        4.3
+        在您通过eID数字身份向为您提供服务的应用证明您的身份时,您授权并同意三所将相符性比对结果转发给向您提供服务的应用方,由其判断是否通过您的实名实人认证。
+      </view>
+      <view>
+        4.4
+        某些应用方基于国家监管要求或法律要求,在向您提供服务时需要采集并保存您的姓名、身份号码、人脸图像身份信息证明您的身份,在得到您的同意后,三所会将您的身份信息向这些应用方提供。
+      </view>
+      <view>
+        4.5
+        三所在后台存储收集到的个人信息,包括您的姓名、身份号码、人脸图像,对这些信息采取包括但不限于加密处理的技术安全措施进行妥善保管。三所未经您的授权或许可不会向第三方提供您的个人信息。
+      </view>
+      <view>
+        4.6
+        如您希望访问、撤回授权、修改、删除您的个人信息,因eID数字身份小程序未单独为用户提供服务,您可以通过“关于腾讯云E证通-意见反馈”联系我们,并提供必要的身份证明。
+      </view>
+
+      <view class="strong">五、提示</view>
+      <view class="strong">
+        5.1 请您提供真实、准确的姓名、身份号码,否则,无法为您生成eID数字身份;
+      </view>
+      <view class="strong">
+        5.2
+        请您提供本人的姓名、身份号码、人脸图像,并申请本人的eID数字身份。冒用他人身份者将承担身份冒用带来的一切后果与责任。
+      </view>
+      <view> 5.3 冒用他人身份给第三方或三所造成的任何损失,应当依法进行赔偿。 </view>
+
+      <view class="strong">六、免责</view>
+      <view class="strong">
+        您理解并同意,三所仅通过腾讯提供的人脸识别验证身份功能对用户提供的身份信息是否与权威机构的相应数据相符而提供技术服务以及签发eID数字身份,三所不承诺权威机构所提供的相符性验证结果的准确性,对可能导致的不利后果三所不承担责任。
+      </view>
+
+      <view class="strong">七、其它</view>
+      <view class="strong">
+        若您与三所发生任何纠纷或争议,您同意将纠纷或争议提交本协议签订地(即中国上海市徐汇区)有管辖权的人民法院管辖。本协议的成立、生效、履行、解释及纠纷解决,适用中华人民共和国大陆地区法律。
+      </view>
+    </view>
+  </view>
+</template>
+
+<script>
+export default {
+  data() {
+    return {}
+  },
+  methods: {}
+}
+</script>
+
+<style>
+@import url('../../index.css');
+</style>

+ 195 - 0
src/mp_ecard_sdk/protocol/privacy/privacy.vue

@@ -0,0 +1,195 @@
+<template>
+	<view class="protocol">
+		<view class="main">
+			<view class="h1">
+				<text>腾讯隐私政策</text>
+			</view>
+			<text>引言</text>
+			<view>
+				腾讯视用户信息安全与隐私保护为自己的“生命线”。我们秉承“一切以用户价值为依归”的理念,致力于提升信息处理透明度,增强您对信息管理的便捷性,保障您的信息及通信安全。
+			</view>
+			<view>腾讯严格遵守法律法规,遵循以下隐私保护原则,为您提供更加安全、可靠的服务:</view>
+			<view>1、安全可靠:我们竭尽全力通过合理有效的信息安全技术及管理流程,防止您的信息泄露、损毁、丢失。</view>
+			<view>2、自主选择:我们为您提供便利的信息管理选项,以便您做出合适的选择,管理您的个人信息。</view>
+			<view>3、保护通信秘密:我们严格遵照法律法规,保护您的通信秘密,为您提供安全的通信服务。</view>
+			<view>4、合理必要:为了向您和其他用户提供更好的服务,我们仅收集必要的信息。</view>
+			<view>5、清晰透明:我们努力使用简明易懂的表述,向您介绍隐私政策,以便您清晰地了解我们的信息处理方式。</view>
+			<view>6、将隐私保护融入产品设计:我们在产品或服务开发的各个环节,综合法律、产品、设计等多方因素,融入隐私保护的理念。</view>
+			<view>本《隐私政策》主要向您说明:</view>
+			<view>我们收集哪些信息;</view>
+			<view>我们收集信息的用途;</view>
+			<view>您所享有的权利。</view>
+			<view>希望您仔细阅读《隐私政策》(以下简称“本政策”),详细了解我们对信息的收集、使用方式,以便您更好地了解我们的服务并作出适当的选择。</view>
+			<view>若您使用腾讯服务,即表示您认同我们在本政策中所述内容。除另有约定外,本政策所用术语与《腾讯服务协议》中的术语具有相同的涵义。</view>
+			<view>如您有问题,请联系我们。</view>
+			<view class="strong">一、我们收集的信息</view>
+			<view>我们根据合法、正当、必要的原则,仅收集实现产品功能所必要的信息。</view>
+			<view>1.1 您在使用我们服务时主动提供的信息</view>
+			<view>1.1.1 您在注册帐户时填写的信息。</view>
+			<view>例如,您在注册QQ、微信帐户时所填写的昵称、手机号码。</view>
+			<view>1.1.2 您在使用服务时上传的信息。</view>
+			<view>例如,您在使用QQ、微信时,上传的头像、分享的照片。</view>
+			<view>1.1.3 您通过我们的客服或参加我们举办的活动时所提交的信息。</view>
+			<view>例如,您参与我们线上活动时填写的调查问卷中可能包含您的姓名、电话、家庭地址等信息。</view>
+			<view>
+				我们的部分服务可能需要您提供特定的个人敏感信息来实现特定功能。若您选择不提供该类信息,则可能无法正常使用服务中的特定功能,但不影响您使用服务中的其他功能。若您主动提供您的个人敏感信息,即表示您同意我们按本政策所述目的和方式来处理您的个人敏感信息。
+			</view>
+			<view>1.2我们在您使用服务时获取的信息</view>
+			<view>1.2.1 日志信息。当您使用我们的服务时,我们可能会自动收集相关信息并存储为服务日志信息。</view>
+			<view>(1) 设备信息。例如,设备型号、操作系统版本、唯一设备标识符、电池、信号强度等信息。</view>
+			<view>(2) 软件信息。例如,软件的版本号、浏览器类型。为确保操作环境的安全或提供服务所需,我们会收集有关您使用的移动应用和其他软件的信息。</view>
+			<view>(3) IP地址。</view>
+			<view>(4) 服务日志信息。例如,您在使用我们服务时搜索、查看的信息、服务故障信息、引荐网址等信息。</view>
+			<view>(5) 通讯日志信息。例如,您在使用我们服务时曾经通讯的账户、通讯时间和时长。</view>
+			<view>1.2.2 位置信息。当您使用与位置有关的服务时,我们可能会记录您设备所在的位置信息,以便为您提供相关服务。</view>
+			<view>(1) 在您使用服务时,我们可能会通过IP地址、GPS、WiFi或基站等途径获取您的地理位置信息;</view>
+			<view>
+				(2) 您或其他用户在使用服务时提供的信息中可能包含您所在地理位置信息,例如您提供的帐号信息中可能包含的您所在地区信息,您或其他人共享的照片包含的地理标记信息;
+			</view>
+			<view>
+				1.2.3
+				其他相关信息。为了帮助您更好地使用我们的产品或服务,我们会收集相关信息。例如,我们收集的好友列表、群列表信息、声纹特征值信息。为确保您使用我们服务时能与您认识的人进行联系,如您选择开启导入通讯录功能,我们可能对您联系人的姓名和电话号码进行加密,并仅收集加密后的信息。
+			</view>
+			<view>1.3 其他用户分享的信息中含有您的信息</view>
+			<view>例如,其他用户发布的照片或分享的视频中可能包含您的信息。</view>
+			<view>1.4 从第三方合作伙伴获取的信息</view>
+			<view>
+				我们可能会获得您在使用第三方合作伙伴服务时所产生或分享的信息。例如,您使用微信或QQ帐户登录第三方合作伙伴服务时,我们会获得您登录第三方合作伙伴服务的名称、登录时间,方便您进行授权管理。请您仔细阅读第三方合作伙伴服务的用户协议或隐私政策。
+			</view>
+			<view class="strong">二、我们如何使用收集的信息</view>
+			<view>我们严格遵守法律法规的规定及与用户的约定,将收集的信息用于以下用途。若我们超出以下用途使用您的信息,我们将再次向您进行说明,并征得您的同意。</view>
+			<view>2.1 向您提供服务。</view>
+			<view>2.2 满足您的个性化需求。例如,语言设定、位置设定、个性化的帮助服务。</view>
+			<view>2.3 产品开发和服务优化。例如,当我们的系统发生故障时,我们会记录和分析系统故障时产生的信息,优化我们的服务。</view>
+			<view>
+				2.4 安全保障。例如,我们会将您的信息用于身份验证、安全防范、反诈骗监测、存档备份、客户的安全服务等用途。例如,您下载或安装的安全软件会对恶意程序或病毒进行检测,或为您识别诈骗信息。
+			</view>
+			<view>2.5 向您推荐您可能感兴趣的广告、资讯等。</view>
+			<view>2.6 评估、改善我们的广告投放和其他促销及推广活动的效果。</view>
+			<view>2.7 管理软件。例如,进行软件认证、软件升级等。</view>
+			<view>2.8 邀请您参与有关我们服务的调查。</view>
+			<view>
+				为了让您有更好的体验、改善我们的服务或经您同意的其他用途,在符合相关法律法规的前提下,我们可能将通过某些服务所收集的信息用于我们的其他服务。例如,将您在使用我们某项服务时的信息,用于另一项服务中向您展示个性化的内容或广告、用于用户研究分析与统计等服务。
+			</view>
+			<view>
+				为了确保服务的安全,帮助我们更好地了解我们应用程序的运行情况,我们可能记录相关信息,例如,您使用应用程序的频率、故障信息、总体使用情况、性能数据以及应用程序的来源。我们不会将我们存储在分析软件中的信息与您在应用程序中提供的个人身份信息相结合。
+			</view>
+			<view class="strong">三、我们如何使用Cookie及相关技术</view>
+			<view>
+				我们或我们的第三方合作伙伴,可能通过放置安全的Cookie及相关技术收集您的信息,目的是为您提供更个性化的用户体验和服务。我们会严格要求第三方合作伙伴遵守本政策的相关规定。
+			</view>
+			<view>
+				您也可以通过浏览器设置管理Cookie。但请注意,如果停用Cookie,您可能无法享受最佳的服务体验,某些服务也可能无法正常使用。若您希望了解更多Cookie的安全性等信息,可参见《Cookie政策说明》。
+			</view>
+			<view class="strong">四、您分享的信息</view>
+			<view>
+				您可以通过我们的服务与您的好友、家人及其他用户分享您的相关信息。例如,您在微信朋友圈中公开分享的文字和照片。请注意,这其中可能包含您的个人身份信息、个人财产信息等敏感信息。请您谨慎考虑披露您的相关个人敏感信息。
+			</view>
+			<view>
+				您可通过我们服务中的隐私设置来控制您分享信息的范围,也可通过服务中的设置或我们提供的指引删除您公开分享的信息。但请您注意,这些信息仍可能由其他用户或不受我们控制的非关联第三方独立地保存。
+			</view>
+			<view class="strong">五、您如何管理自己的信息</view>
+			<view>
+				5.1
+				您可以在使用我们服务的过程中,访问、修改和删除您提供的注册信息和其他个人信息,也可按照通知指引与我们联系。您访问、修改和删除个人信息的范围和方式将取决于您使用的具体服务。例如,若您在使用地理位置相关服务时,希望停止分享您的地理位置信息,您可通过手机定位关闭功能、软硬件服务商及通讯服务提供商的关闭方式停止分享,建议您仔细阅读相关指引。
+			</view>
+			<view>
+				5.2
+				我们将按照本政策所述,仅为实现我们产品或服务的功能,收集、使用您的信息。如您发现我们违反法律、行政法规的规定或者双方的约定收集、使用您的个人信息,您可以要求我们删除。如您发现我们收集、存储的您的个人信息有错误的,您也可以要求我们更正。请通过本政策列明的联系方式与我们联系。
+			</view>
+			<view>5.3 在您访问、修改和删除相关信息时,我们可能会要求您进行身份验证,以保障帐号的安全。</view>
+			<view>5.4 请您理解,由于技术所限、法律或监管要求,我们可能无法满足您的所有要求,我们会在合理的期限内答复您的请求。</view>
+			<view class="strong">六、我们分享的信息</view>
+			<view>我们遵照法律法规的规定,对信息的分享进行严格的限制,例如:</view>
+			<view>6.1 经您事先同意,我们可能与第三方分享您的个人信息;</view>
+			<view>
+				6.2
+				仅为实现外部处理的目的,我们可能会与第三方合作伙伴(第三方服务供应商、承包商、代理、广告合作伙伴、应用开发者等,例如,代表我们发出电子邮件或推送通知的通讯服务提供商、为我们提供位置服务的地图服务供应商)(他们可能并非位于您所在的法域)分享您的个人信息,让他们按照我们的说明、隐私政策以及其他相关的保密和安全措施来为我们处理上述信息,并用于以下用途:
+			</view>
+			<view>6.2.1 向您提供我们的服务;</view>
+			<view>6.2.2 实现“我们如何使用收集的信息”部分所述目的;</view>
+			<view>6.2.3 履行我们在《腾讯服务协议》或本政策中的义务和行使我们的权利;</view>
+			<view>6.2.4 理解、维护和改善我们的服务。</view>
+			<view>如我们与上述第三方分享您的信息,我们将会采用加密、匿名化处理等手段保障您的信息安全。</view>
+			<view>
+				6.3
+				随着我们业务的持续发展,当发生合并、收购、资产转让等交易导致向第三方分享您的个人信息时,我们将通过推送通知、公告等形式告知您相关情形,按照法律法规及不低于本政策所要求的标准继续保护或要求新的管理者继续保护您的个人信息。
+			</view>
+			<view>
+				6.4
+				我们会将所收集到的信息用于大数据分析。例如,我们将收集到的信息用于分析形成不包含任何个人信息的城市热力图或行业洞察报告。我们可能对外公开并与我们的合作伙伴分享经统计加工后不含身份识别内容的信息,用于了解用户如何使用我们服务或让公众了解我们服务的总体使用趋势。
+			</view>
+			<view>6.4 我们可能基于以下目的披露您的个人信息:</view>
+			<view>6.5.1 遵守适用的法律法规等有关规定;</view>
+			<view>6.5.2 遵守法院判决、裁定或其他法律程序的规定;</view>
+			<view>6.5.3 遵守相关政府机关或其他法定授权组织的要求;</view>
+			<view>6.5.4 我们有理由确信需要遵守法律法规等有关规定;</view>
+			<view>6.5.5 为执行相关服务协议或本政策、维护社会公共利益,为保护我们的客户、我们或我们的关联公司、其他用户或雇员的人身财产安全或其他合法权益合理且必要的用途。</view>
+			<view class="strong">七、我们可能向您发送的信息</view>
+			<view>7.1 信息推送</view>
+			<view>您在使用我们的服务时,我们可能向您发送电子邮件、短信、资讯或推送通知。您可以按照我们的相关提示,在设备上选择取消订阅。</view>
+			<view>7.2 与服务有关的公告</view>
+			<view>我们可能在必要时(例如,因系统维护而暂停某一项服务时)向您发出与服务有关的公告。您可能无法取消这些与服务有关、性质不属于广告的公告。</view>
+			<view class="strong">八、存储信息的地点和期限</view>
+			<view>8.1 存储信息的地点</view>
+			<view>我们遵守法律法规的规定,将境内收集的用户个人信息存储于境内。</view>
+			<view>8.2 存储信息的期限</view>
+			<view>一般而言,我们仅为实现目的所必需的最短时间保留您的个人信息。但在下列情况下,我们有可能因需符合法律要求,更改个人信息的存储时间:</view>
+			<view>8.2.1 为遵守适用的法律法规等有关规定;</view>
+			<view>8.2.2 为遵守法院判决、裁定或其他法律程序的规定;</view>
+			<view>8.2.3 为遵守相关政府机关或法定授权组织的要求;</view>
+			<view>8.2.4 我们有理由确信需要遵守法律法规等有关规定;</view>
+			<view>8.2.5 为执行相关服务协议或本政策、维护社会公共利益,为保护我们的客户、我们或我们的关联公司、其他用户或雇员的人身财产安全或其他合法权益所合理必需的用途。</view>
+			<view>当我们的产品或服务发生停止运营的情形时,我们将采取例如,推送通知、公告等形式通知您,并在合理的期限内删除或匿名化处理您的个人信息。</view>
+			<view class="strong">九、信息安全</view>
+			<view>我们为您的信息提供相应的安全保障,以防止信息的丢失、不当使用、未经授权访问或披露。</view>
+			<view>9.1 我们严格遵守法律法规保护用户的通信秘密。</view>
+			<view>9.2 我们将在合理的安全水平内使用各种安全保护措施以保障信息的安全。例如,我们使用加密技术(例如,TLS、SSL)、匿名化处理等手段来保护您的个人信息。</view>
+			<view>9.3 我们建立专门的管理制度、流程和组织确保信息安全。例如,我们严格限制访问信息的人员范围,要求他们遵守保密义务,并进行审查。</view>
+			<view>9.4 若发生个人信息泄露等安全事件,我们会启动应急预案,阻止安全事件扩大,并以推送通知、公告等形式告知您。</view>
+			<view class="strong">十、广告</view>
+			<view>我们可能使用您的相关信息,在相关网站、应用及其他渠道向您提供与您更加相关的广告。您可以在关于广告页面中了解更多。</view>
+			<view class="strong">十一、未成年人保护</view>
+			<view>
+				我们非常重视对未成年人个人信息的保护。根据相关法律法规的规定,若您是18周岁以下的未成年人,在使用腾讯的服务前,应事先取得您的家长或法定监护人的同意。若您是未成年人的监护人,当您对您所监护的未成年人的个人信息有相关疑问时,请通过第十三部分中的联系方式与我们联系。
+			</view>
+			<view class="strong">十二、适用范围</view>
+			<view>
+				我们的所有服务均适用本政策。但某些服务有其特定的隐私指引/声明,该特定隐私指引/声明更具体地说明我们在该服务中如何处理您的信息。如本政策与特定服务的隐私指引/声明有不一致之处,请以该特定隐私指引/声明为准。
+			</view>
+			<view>请您注意,本政策不适用由其他公司或个人提供的服务。例如,您通过使用微信帐号登录其他公司或个人提供的服务。</view>
+			<view>您使用该等第三方服务须受其隐私政策(而非本政策)约束,您需要仔细阅读其政策内容。</view>
+			<view class="strong">十三、联系我们</view>
+			<view>
+				如您对本政策或其他相关事宜有疑问,请通过 https://kf.qq.com/
+				与我们联系。您也可根据我们提供的指引,填写相关资料,将您的问题发送至Dataprivacy@tencent.com或寄到如下地址:
+			</view>
+			<view>地址:中国广东省深圳市南山区科技园科技中一路腾讯大厦 法务部 数据及隐私保护中心(收)</view>
+			<view>邮编:518057</view>
+			<view>我们将尽快审核所涉问题,并在验证您的用户身份后的三十天内予以回复。</view>
+			<view class="strong">十四、变更</view>
+			<view>
+				我们可能适时修订本政策内容。如该等变更会导致您在本政策项下权利的实质减损,我们将在变更生效前,通过在页面显著位置提示、向您发送电子邮件等方式通知您。在该种情况下,若您继续使用我们的服务,即表示同意受经修订的政策约束。
+			</view>
+			<view class="strong">更新日期: 2018年6月13日</view>
+		</view>
+	</view>
+
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+
+			}
+		},
+		methods: {
+
+		}
+	}
+</script>
+
+<style>
+@import url('../../index.css');
+</style>

+ 173 - 0
src/mp_ecard_sdk/protocol/service/service.vue

@@ -0,0 +1,173 @@
+<template>
+	<view class="protocol">
+		<view class="main">
+			<view class="h1">
+				<text>腾讯E证通服务协议</text>
+			</view>
+			<view>
+				欢迎您使用腾讯云E证通服务!
+			</view>
+			<view>
+				为使用腾讯E证通服务,您应当阅读并遵守《腾讯E证通服务协议》(以下简称“本协议”)。本协议由您与深圳市腾讯计算机系统有限公司(以下简称“腾讯”或“我们”)签订,对您注册、使用腾讯E证通服务(以下亦可简称“本服务”)过程中的各方权利义务等具体内容进行约定
+			</view>
+			<view class="strong underline">
+				我们在此特别提醒您认真阅读、充分理解本协议各条款,特别是您同意及授权的条款、争议解决和法律适用等条款。为提醒您注意,我们已对这些条款予以加粗以特别提醒您加以注意,请您仔细阅读并自主决定接受或不接受。您使用腾讯E证通服务的行为(包括在我们合作的第三方产品及业务中使用腾讯E证通服务)即视为您已阅读、知悉、理解和完全同意本协议的约定。
+			</view>
+			<view class="strong underline">
+				我们特别提示您,您在前述页面点击“已阅读并同意《腾讯E证通服务协议》”以及点击按钮“申请并同意授权”的行为视为您已经充分阅读并理解、同意本协议的内容并作出相关授权。
+			</view>
+			<view>
+				如果您是未成年人,请在法定监护人的陪同下阅读本协议及上述其他协议,并特别注意涉及未成年人使用本服务的相关条款。
+			</view>
+			<view>
+				如果您在阅读本协议过程中有任何问题,请您联系我们,我们将对相关内容进行解释和说明,以使您能够充分理解并自主判断和决定是否接受本协议内容。
+			</view>
+			<view class="strong">一、服务内容</view>
+			<view>
+				腾讯E证通服务是深圳市腾讯计算机系统有限公司(以下简称“我们”或“腾讯”)通过与公安部第三研究所(以下简称“三所”)及其eID网络身份服务机构(以下简称“eID服务机构”)基于eID数字身份技术的合作、向您提供的eID数字身份服务
+				<view style="display:inline" class="strong">
+					,具体服务流程为:
+				</view>
+			</view>
+			<view class="strong">
+				您通过向您提供服务的应用输入姓名和身份号码并拉起腾讯E证通小程序,在您点击同意本协议和《eID数字身份小程序服务协议》后,您将在eID数字身份小程序内通过腾讯提供的人脸识别完成身份验证,您的身份信息与权威机构的相应数据进行相符性比对后,三所会签发您的eID数字身份,您的eID数字身份与您申请时提供的身份信息及人脸信息唯一关联。eID数字身份信息由本服务返回给为您提供服务的应用。
+			</view>
+			<view class="strong">二、双方权利义务</view>
+			<view>
+				2.1腾讯有权根据您的申请情况,决定是否为您提供腾讯E证通服务。
+			</view>
+			<view>
+				2.2腾讯有权在腾讯以及腾讯合作方的具体产品业务中推广、应用腾讯E证通服务。
+			</view>
+			<view class="strong">
+				2.3您保证您所提供的个人信息的真实性、合法性、完整性、准确性和有效性。否则,您可能无法使用腾讯E证通服务,或您所使用的腾讯E证通服务范围可能会受到限制。
+			</view>
+			<view>
+				2.4您应以您本人的真实身份信息使用腾讯E证通服务,您保证由您本人注册、开通腾讯E证通服务,您保证由您本人进行操作,并不向其他任何人披露、泄露或借出前述信息和设备,亦不使用其他任何人的该等信息和设备。
+				<view style="display:inline" class="strong">
+					您应妥善保管您的手机设备、账号、密码以及动态验证码等资料,并对该账号项下所从事的行为承担相应的法律责任。
+				</view>
+			</view>
+			<view class="strong">
+				2.5您应当对您的账户、终端设备以及您的联系方式进行有效管理,对通过该账户及终端设备所从事的行为承担相应法律责任,并对您的联系方式(例如,手机号码)接收或确认信息所产生的法律后果承担法律责任。您在此知悉,对于第三方无论以何种形式使用您的信息,包括但不限于冒用、借用,您将对由此产生的法律后果依法承担相应法律责任。
+			</view>
+			<view class="strong">
+				2.6使用腾讯E证通服务过程中,如果您的个人信息有更新,您应及时进行更新。否则,因此产生的法律责任由您承担。
+			</view>
+			<view class="strong">
+				2.7如果您的账户、终端设备因信息泄露、遗失或被非授权使用所致的损失由您自行承担。
+			</view>
+			<view class="strong">
+				2.8您不得利用本服务实施任何违反国家法律、法规、规章及规范性文件的行为,不得侵犯其他任何第三人的合法权益,尤其不得利用本服务实施欺诈等违法行为。如您存在不遵守本协议或腾讯相关业务规定、恶意操作或利用腾讯E证通服务从事违反国家法律法规活动或损害其他第三方合法权益的,腾讯有权单方终止对您提供腾讯E证通服务,并要求您赔偿腾讯因此造成的损失。
+			</view>
+			<view class="strong">
+				2.9您所申请的eID数字身份仅供您个人使用,您不得将您的eID数字身份提供给他方使用,您应对您的eID数字身份所从事的行为承担法律责任。
+			</view>
+			<view>
+				2.10为了向您提供更优的服务,腾讯有权对腾讯E证通服务系统进行升级、改造。
+			</view>
+			<view>
+				2.11如果您需要注销腾讯E证通服务,您可以在腾讯E证通小程序中的
+				<view style="display:inline" class="strong">
+					“关于腾讯E证通-意见反馈”
+				</view>
+				中提交申请。您注销腾讯E证通服务后,如果您需要使用腾讯E证通服务,您需要重新注册。
+			</view>
+			<view class="strong">
+				2.12您在使用本服务过程中,如果还涉及到使用其他服务的,您应当同时遵守其他服务的规定或规则。比如您在使用eID数字身份小程序时,您应遵守三所的相关服务规则。
+			</view>
+			<view class="strong">
+				2.13如果您与为您提供服务的应用方之间因具体交易以及腾讯E证通的适用等事宜发生的争议或纠纷,由您与您应用方进行协商处理,我们不介入您与应用方的具体交易合作,我们不对前述事项承担法律责任。但我们在此承诺,为了保护您的合法权益,我们将向您提供必要协助。
+			</view>
+
+			<view class="strong">三、用户个人信息保护</view>
+			<view class="strong">
+				3.1
+				为了向您提供腾讯E证通服务,您授权并同意,我们从为您提供服务的应用获取您输入的姓名和身份号码信息,结合在三所运营的eID数字身份小程序内通过我们提供的人脸识别服务,采集您的人脸视频,并将您的姓名、身份号码、人脸图像与权威机构的相应数据进行相符性比对,以便通过身份核验。同时,我们会从eID数字身份小程序获取您的数字身份信息,并将您的人脸图片、比对结果和eID数字身份信息返回给您的应用方,由其判断是否通过您的实名实人认证。如果您不同意的,请您不要继续使用本服务。
+			</view>
+			<view class="strong">
+				3.2
+				基于国家监管要求或法律要求,应用方在向您提供服务时需要采集并保存您的姓名、身份号码、人脸图像(简称“身份信息”)证明您的身份,您授权并同意,因为您的应用方可能无法及时从本服务拉取您的身份信息,我们会将您的人脸图片和比对结果暂时存储三天以便您的应用方拉取您的身份信息。三天内如果您的应用方拉取了,我们会立即删除;三天后如果您的应用方未拉取,我们也会删除您的相应数据。我们承诺仅在该处理目的内暂时存储您的数据,未经您的授权或许可,我们不会向第三方提供您的个人信息。
+			</view>
+			<view>
+				3.3保护用户个人信息是腾讯的一项基本原则,腾讯将根据本协议以及
+				<navigator style="display:inline" class="protocol_sprotocol" url="/mp_ecard_sdk/protocol/privacy/privacy">
+					《隐私政策》
+				</navigator>
+				(http://www.qq.com/privacy.htm)等内容,采取合理的措施依法保护用户的个人信息。除法律法规规定的情形外,未经用户授权同意腾讯不会向第三方公开、透露用户个人信息。腾讯对相关信息采用专业加密存储与传输方式,保障用户个人信息的安全。
+			</view>
+			<view>
+				3.4 腾讯将运用各种安全技术和程序建立完善的管理制度来保护您的个人信息,以免遭受未经授权的访问、使用或披露。
+			</view>
+			<view>
+				3.5如您希望访问、撤回授权、修改、删除您的个人信息,您可以通过“关于腾讯E证通-意见反馈”联系我们,并提供必要的身份证明。
+			</view>
+			<view class="strong">
+				3.6请您提供真实、准确的、且是您本人的姓名、身份号码、人脸图像,并申请本人的eID数字身份,否则,我们可能无法为您提供本服务。冒用他人身份者将承担身份冒用带来的一切后果与责任,包括但不限于因冒用他人身份给第三方或我们造成的任何损失,您应当依法进行赔偿。
+			</view>
+			<view class="strong">四、不可抗力及免责声明</view>
+			<view class="strong">
+				4.1您理解并同意,在使用本服务的过程中,可能会遇到不可抗力等风险因素,使本服务发生中断。不可抗力是指不能预见、不能克服并不能避免且对一方或双方造成重大影响的客观事件,包括自然灾害如洪水、地震、瘟疫流行和风暴等以及社会事件如战争、动乱、政府行为以及政策法律等规定变化等。出现上述情况时,我们将努力在第一时间与相关单位配合,尽量降低各方损失。
+			</view>
+			<view class="strong">
+				4.2在法律允许的范围内,腾讯对以下情形导致的本服务中断或受阻不承担责任:
+			</view>
+			<view class="strong">
+				4.2.1受到计算机病毒、木马或其他恶意程序、黑客攻击的破坏;
+			</view>
+			<view class="strong">
+				4.2.2网络故障、网络异常;
+			</view>
+			<view class="strong">
+				4.2.3用户操作不当;
+			</view>
+			<view class="strong">
+				4.2.4用户通过非经我们授权的方式使用本服务;
+			</view>
+			<view class="strong">
+				4.2.5其他腾讯无法控制或合理预见的情形。
+			</view>
+			<view class="strong">
+				4.3
+				您理解并同意,我们将秉承尽责、严谨的态度为您提供本服务,同时您也已清楚知晓受制于技术、权威核验渠道等诸多因素,我们无法向您做出人脸识别核验结果绝对准确无误的承诺。您同意非腾讯原因或因不可抗力、约定的免责情形导致人脸识别核验结果错误的,腾讯不承担赔偿责任。
+			</view>
+			<view class="strong">
+				4.4 您知悉并同意,腾讯E证通小程序与eID数字身份小程序是互为独立的小程序,分别由腾讯和三所独立运营,对于三所为您签发的eID数字身份,腾讯不做相应的承诺和担保。
+			</view>
+			<view class="strong">五、其他</view>
+			<view class="strong underline">
+				5.1 本协议的成立、生效、履行、解释及纠纷解决,适用中华人民共和国大陆地区法律(不包括冲突法规则)。
+			</view>
+			<view class="strong underline">
+				5.2 若您和腾讯之间发生任何纠纷或争议,首先应友好协商解决;若协商不成的,您和腾讯同意将纠纷或争议提交本协议签订地有管辖权的人民法院,通过诉讼加以解决。
+			</view>
+			<view class="strong underline">
+				5.3本协议签订地为中华人民共和国广东省深圳市南山区。
+			</view>
+			<view class="strong underline">
+				5.4本协议所有条款的标题仅为阅读方便,本身并无实际涵义,不能作为本协议涵义解释的依据。
+			</view>
+			<view class="strong underline">
+				5.5本协议条款无论因何种原因部分无效或不可执行,其余条款仍有效,对双方具有约束力。(正文完)
+			</view>
+		</view>
+	</view>
+
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+
+			}
+		},
+		methods: {
+
+		}
+	}
+</script>
+
+<style>
+@import url('../../index.css');
+</style>

+ 47 - 0
src/mp_ecard_sdk/protocol/userAccredit/userAccredit.vue

@@ -0,0 +1,47 @@
+<template>
+	<view class="protocol">
+		<view class="main">
+			<view class="h1">
+				<text>用户授权协议</text>
+			</view>
+			<view>
+				《用户授权协议》(以下简称“本协议”)由您与深圳市腾讯计算机系统有限公司(以下简称“腾讯”或“我们”)签订,为了充分保护您的合法权益,我们在此与您就您注册、使用腾讯云E证通服务(以下亦可简称“本服务”)过程中有关采集、使用等处理您个人信息授权的相关事项进行约定。本协议作为《腾讯云E证通服务协议》(以下简称“主协议”)不可分割的有效组成部分,与主协议具有同等法律效力。
+			</view>
+			<view class="strong underline">
+				我们特别提示您,您在前述页面点击“已阅读并同意《用户授权协议》”以及点击按钮“申请并同意授权”的行为视为您已经充分阅读并理解、同意本协议的内容并作出相关授权。
+			</view>
+			<view class="strong underline">
+				一、为了在您注册、使用腾讯云E证通服务时识别您的身份,您同意并授权腾讯可以获取您绑定的微信手机号,同时,您同意并授权腾讯可通过其合作的依法运营数据库的主体比对您的手机号码,您同意并授权腾讯可以采集、存储并处理您的姓名、公民身份证号码、人脸照片、手机号码等可以识别您身份的个人信息(具体以在页面上填写、提供的为准)。
+			</view>
+			<view>
+				二、为了能够获得腾讯云E证通编码,您同意并授权腾讯可以将您的个人信息传输至eID服务机构并由eID服务机构将提供给三所承建的“公安部公民网络身份识别系统”;您同意并授权三所使用eID数字身份技术为您在腾讯云E证通服务中生成保护个人身份信息的eID数字身份提供给eID服务机构并由eID服务机构提供给腾讯;您同意并授权腾讯可依法采集、存储并处理您的eID数字身份并生成腾讯云E证通编码。
+			</view>
+			<view>
+				三、在您注册完成腾讯云E证通服务后,您可采用多种方式使用腾讯云E证通服务,包括但不限于您个人管理、使用您的腾讯云E证通服务编码,以及您在此授权腾讯可在其运营的其他产品和业务中使用您的腾讯云E证通编码,以及您在此授权腾讯亦可向腾讯合作方提供您的腾讯云E证通编码,以方便您使用相应产品或业务,节约流程及时间。
+			</view>
+			<view class="strong">四、我们在此特别说明,腾讯合作方或腾讯运营其他产品和业务的团队所获得的腾讯云E证通编码不可识别您的个人信息。</view>
+			<view class="strong">
+				五、我们在此特别提示您,如果您在使用合作方或腾讯其他产品或业务时,除了授权腾讯向前述主体提供您的腾讯云E证通编码之外,还需要前述主体向腾讯云E证通服务运营团队采集或委托腾讯云E证通服务运营团队处理您的个人信息,须另行获得您相应授权。
+			</view>
+			<view>六、我们收集您的个人信息仅在您注册、使用腾讯云E证通服务范围内使用,未经您的同意,我们不会用于其他用途。</view>
+		</view>
+	</view>
+
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+
+			}
+		},
+		methods: {
+
+		}
+	}
+</script>
+
+<style>
+@import url('../../index.css');
+</style>

+ 6 - 0
src/mp_ecard_sdk/utils/getParameterByName.js

@@ -0,0 +1,6 @@
+const getParameterByName = function (e, t) {
+  e = e.replace(/[\[\]]/g, '\\$&')
+  const a = new RegExp(`[?&]${e}(=([^&#]*)|&|#|$)`).exec(t)
+  return a ? (a[2] ? decodeURIComponent(a[2].replace(/\+/g, ' ')) : '') : null
+}
+export default getParameterByName

+ 1 - 0
src/mp_ecard_sdk/utils/http.js

@@ -0,0 +1 @@
+import Log from"../constants/log.js";let request=function(r,e){let{token:t="",url:o,method:a="POST",data:s,reTry:d,header:u={"Content-Type":"application/json"}}=r;try{uni.request({url:uni.eidBaseUrl+o,method:a,data:s,header:u,success(r){console.log("request success:",r),200===r.statusCode&&r.data?0==r.data.ErrorCode||0==r.data.code?e({ErrorCode:0,ErrorMsg:r.data.ErrorMsg,Data:r.data.Data||r.data.data,reTry:d}):e({ErrorCode:r.data.ErrorCode,ErrorMsg:r.data.ErrorMsg,Data:r.data.Data||r.data.data}):e({ErrorCode:-101,ErrorMsg:"请求错误,请稍后重试"})},fail(a){console.log("request error:",a),d&&d.tryCount&&d.tryCount>0?(d.tryCount--,uni.eidBaseUrl=uni.eidBackUpUrl,setTimeout(()=>{request(r,e)},d.retryDelay||0)):e({ErrorCode:-107,ErrorMsg:"request请求异常,请稍后重试"}),uni.reportLogToEid({token:t,event:Log.requestFail,errCode:"-1",errMsg:"requestFail 调用失败",data:{url:`${uni.eidBaseUrl}`+o,err:a}})}})}catch(r){console.log("request error:",r),e({ErrorCode:-109,ErrorMsg:"request方法异常,请稍后重试"}),uni.reportLogToEid({token:t,event:Log.requestCatch,errCode:"-1",errMsg:"requestFail 调用失败",data:{url:`${uni.eidBaseUrl}`+o,err:r}})}};export const $http=request;

+ 1 - 0
src/mp_ecard_sdk/utils/validate.js

@@ -0,0 +1 @@
+function isValidateToken(e){return/^[a-zA-Z0-9-]{36}$/.test(e)}export default{isValidateToken:isValidateToken};

+ 68 - 0
src/pages-sub-admin/managementByObjectives/index.vue

@@ -0,0 +1,68 @@
+<template>
+  <view class="market-box">
+    <view v-for="item in taskList" :key="item.id">
+      <view
+        class="market-list"
+        :style="{ background: item.backgroundColor }"
+        @click="navigateToDetail"
+      >
+        <image :src="item.img" alt="" />
+        <view class="info" :style="{ color: item.color }">
+          <view class="title">{{ item.title }}</view>
+        </view>
+        <view class="btn">
+          <uv-icon name="arrow-right" :color="item.color" size="16" />
+        </view>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script setup lang="ts">
+import taskList from './taskList'
+
+const navigateToDetail = () => {
+  uni.navigateTo({
+    url: `/pages-sub-admin/objectivesList/index`
+  })
+}
+</script>
+
+<style lang="scss" scoped>
+.market-box {
+  padding: 30rpx;
+  .market-list {
+    height: 180rpx;
+    border-radius: 16rpx;
+    padding: 10rpx 24rpx;
+    display: flex;
+    align-items: center;
+    margin-bottom: 24rpx;
+    image {
+      width: 160rpx;
+      height: 160rpx;
+    }
+    .info {
+      margin-left: 24rpx;
+      .title {
+        font-size: 36rpx;
+        font-weight: 600;
+        margin-bottom: 10rpx;
+      }
+      .desc {
+        font-size: 22rpx;
+      }
+    }
+    .btn {
+      margin-left: auto;
+      width: 56rpx;
+      height: 56rpx;
+      border-radius: 50%;
+      background: rgba($color: #fff, $alpha: 0.3);
+      display: flex;
+      align-items: center;
+      justify-content: center;
+    }
+  }
+}
+</style>

+ 9 - 0
src/pages-sub-admin/managementByObjectives/taskList.ts

@@ -0,0 +1,9 @@
+export default [
+  {
+    title: '服务目标下发',
+    id: 1,
+    color: '#30546E',
+    backgroundColor: 'linear-gradient(270.93deg, #D6EDFD 0.8%, #F1F9FF 100%);',
+    img: 'https://yy-cloud-oss.oss-cn-beijing.aliyuncs.com/img/hyjb.png'
+  }
+]

+ 813 - 0
src/pages-sub-admin/objectivesAdd/index.vue

@@ -0,0 +1,813 @@
+<template>
+  <view class="objectives-add">
+    <view class="message">
+      <uv-text
+        type="error"
+        text="本系统中的年度服务目标、【年度服务预算】、年度服务计划等,无论是否经由一方或双方同意或者确认,均不构成双方之间的协议;服务量、服务费用价格与金额等应以另行签署的合同为准。"
+      ></uv-text>
+    </view>
+
+    <view class="form">
+      <uv-form labelPosition="left" :model="form" :rules="rules" ref="formRef" labelWidth="80">
+        <uv-form-item
+          label="目标产品"
+          prop="skuIdLable"
+          borderBottom
+          @click="showSelect('skuId')"
+          :customStyle="customStyle"
+          required
+        >
+          <uv-input v-model="form.skuIdLable" border="none" placeholder="请选择" readonly />
+          <template v-slot:right>
+            <uv-icon name="arrow-right"></uv-icon>
+          </template>
+        </uv-form-item>
+
+        <uv-form-item label="生产企业" prop="ent_name" borderBottom :customStyle="customStyle">
+          <uv-input v-model="form.ent_name" border="none" readonly />
+        </uv-form-item>
+
+        <uv-form-item
+          label="目标总值"
+          prop="planScore"
+          borderBottom
+          :customStyle="customStyle"
+          required
+        >
+          <uv-input v-model="form.planScore" :readonly="formDisabled" type="number" border="none" />
+        </uv-form-item>
+
+        <uv-form-item
+          label="承接对象"
+          prop="consigneeIdLable"
+          borderBottom
+          @click="showSelect('consigneeId')"
+          :customStyle="customStyle"
+          required
+        >
+          <uv-input v-model="form.consigneeIdLable" border="none" placeholder="请选择" readonly />
+          <template v-slot:right>
+            <uv-icon name="arrow-right"></uv-icon>
+          </template>
+        </uv-form-item>
+
+        <uv-form-item
+          label="目标类型"
+          prop="planTypeLable"
+          borderBottom
+          @click="showSelect('planType')"
+          :customStyle="customStyle"
+          required
+        >
+          <uv-input v-model="form.planTypeLable" border="none" placeholder="请选择" readonly />
+          <template v-slot:right>
+            <uv-icon name="arrow-right"></uv-icon>
+          </template>
+        </uv-form-item>
+        <uv-form-item
+          label="目标周期"
+          prop="monthrange"
+          borderBottom
+          @click="showSelect('monthrange')"
+          :customStyle="customStyle"
+          required
+        >
+          <uv-input
+            prefixIcon="calendar"
+            prefixIconStyle="font-size: 22px;color: #909399"
+            v-model="form.monthrange"
+            border="none"
+            placeholder="请选择"
+            readonly
+          />
+          <template v-slot:right>
+            <uv-icon name="arrow-right"></uv-icon>
+          </template>
+        </uv-form-item>
+        <uv-form-item
+          label="目标名称"
+          prop="planName"
+          borderBottom
+          :customStyle="customStyle"
+          required
+        >
+          <uv-input
+            v-model="form.planName"
+            :readonly="formDisabled"
+            placeholder="请输入"
+            border="none"
+          />
+        </uv-form-item>
+      </uv-form>
+      <view class="avail-score" v-if="type === '3'">
+        剩余积分值:{{ detailInfo?.availScore }}
+      </view>
+    </view>
+
+    <view class="table" v-if="['5', '6', '7'].includes(type)">
+      <tableData v-if="type === '5'" ref="tableRef" :planScore="Number(form.planScore)" />
+      <tableDetail
+        v-if="['6', '7'].includes(type)"
+        :planScore="Number(form.planScore)"
+        ref="tableDetailRef"
+      />
+    </view>
+    <!-- 新增 -->
+    <!-- 1 新增 3 -->
+
+    <template v-if="['1', '3', '5'].includes(type)">
+      <view class="btn botton-content" :class="['1', '3'].includes(type) ? 'b-fixed' : ''">
+        <view class="cancel" @click="cancelFn">取消</view>
+        <view class="confirm" @click="confirmFn">确定</view>
+      </view>
+    </template>
+
+    <template v-if="['2', '4', '7'].includes(type)">
+      <view class="botton-content" :class="['2', '4'].includes(type) ? 'b-fixed' : ''">
+        <view class="review-form">
+          <uv-form
+            labelPosition="left"
+            :model="reviewForm"
+            :rules="reviewFormRules"
+            ref="reviewFormRef"
+            labelWidth="80"
+          >
+            <uv-form-item label="审核说明" prop="msg" borderBottom>
+              <uv-textarea
+                v-model="reviewForm.msg"
+                placeholder="请输入审核说明"
+                height="48"
+              ></uv-textarea>
+            </uv-form-item>
+          </uv-form>
+        </view>
+        <view class="btn">
+          <view class="cancel" @click="reviewFn(false)">拒绝</view>
+          <view class="confirm" @click="reviewFn(true)">通过</view>
+        </view>
+      </view>
+    </template>
+
+    <!-- 选择目标产品 -->
+    <uv-picker ref="skuIdPicker" :columns="drugList" keyName="drug_name" @confirm="skuIdConfirm" />
+    <!-- 选择承接对象 -->
+    <uv-picker
+      ref="consigneeIdPicker"
+      :columns="csoList"
+      keyName="name"
+      @confirm="consigneeIdConfirm"
+    />
+    <!-- 选择目标类型 -->
+    <uv-picker
+      ref="planTypePicker"
+      :columns="[planTypeList]"
+      keyName="label"
+      @confirm="planTypeConfirm"
+    />
+
+    <!-- 选择年份 -->
+    <uv-datetime-picker ref="yearPicker" mode="year" @confirm="yearConfirm"></uv-datetime-picker>
+    <!-- 选择季度 -->
+    <uv-picker ref="seasonPicker" :columns="seasonList" keyName="label" @confirm="seasonConfirm" />
+
+    <!-- 月份范围 -->
+    <KDatePicker
+      v-model="show"
+      :limitStartDate="limitStartDate"
+      :limitEndDate="limitEndDate"
+      type="month"
+      is-range
+      @change="getDate"
+      formatter="YYYY-MM-DD"
+    />
+  </view>
+</template>
+
+<script setup lang="ts">
+import {
+  getListDrugApi,
+  getListDescendant,
+  createListApi,
+  planCheckApi,
+  getPlanInfoApi,
+  planDetailCreateApi,
+  checkPlanDetailsApi,
+  updatePlanApi
+} from '@/service/modules/objectivesList'
+import { onLoad } from '@dcloudio/uni-app'
+import { reactive, ref } from 'vue'
+import KDatePicker from '@/components/dateSelect/k-date-picker/KDatePicker.vue'
+
+import tableData from '@/components/table/tableData.vue'
+import tableDetail from '@/components/table/tableDetail.vue'
+import dayjs from 'dayjs'
+
+const drugList = ref<any[]>([])
+const csoList = ref<any[]>([])
+const getDict = () => {
+  getListDrugApi().then((res: any) => (drugList.value = [res.data]))
+  getListDescendant().then((res: any) => (csoList.value = [res.data]))
+}
+
+const type = ref('')
+const planId = ref('')
+const formDisabled = ref(false)
+const distributeDisbled = ref(false)
+const btnType = ref('')
+
+onLoad(async (info: any) => {
+  type.value = info?.type
+  planId.value = info?.planId
+  btnType.value = info?.btnType
+
+  await getDict()
+
+  // 审核
+  if (info?.type === '2') {
+    formDisabled.value = true
+    uni.setNavigationBarTitle({
+      title: '审核'
+    })
+    planInfo()
+  }
+  if (info?.type === '3') {
+    distributeDisbled.value = true
+    uni.setNavigationBarTitle({
+      title: '分发-新增'
+    })
+    planInfo()
+  }
+  if (info?.type === '4') {
+    formDisabled.value = true
+    uni.setNavigationBarTitle({
+      title: '分发-审核'
+    })
+    planInfo()
+  }
+  if (info?.type === '5') {
+    formDisabled.value = true
+    uni.setNavigationBarTitle({
+      title: '拆解'
+    })
+    planInfo()
+  }
+  if (info?.type === '6') {
+    formDisabled.value = true
+    uni.setNavigationBarTitle({
+      title: '数据统计'
+    })
+    planInfo()
+  }
+  if (info?.type === '7') {
+    formDisabled.value = true
+    uni.setNavigationBarTitle({
+      title: '拆解审核'
+    })
+    planInfo()
+  }
+  if (info?.btnType === '1') {
+    uni.setNavigationBarTitle({
+      title: '编辑'
+    })
+    planInfo()
+  }
+})
+
+const detailInfo = ref()
+const limitStartDate = ref()
+const limitEndDate = ref()
+const tableDetailRef = ref()
+const detailsState = ref()
+
+const planInfo = async () => {
+  const res = await getPlanInfoApi(planId.value)
+  detailInfo.value = res.data
+  if (btnType?.value === '1') {
+    return setInfo()
+  }
+  const typeList = ['2', '4', '5', '6', '7']
+  if (typeList.includes(type.value)) {
+    setFormCommonFields(res.data)
+    form.value.planName = res.data.planName
+    form.value.consigneeIdLable = res.data.consigneeInfo.consigneeName
+    form.value.planScore = res.data.planScore + ''
+  } else if (type.value === '3') {
+    setFormCommonFields(res.data)
+    form.value.skuId = res.data.skuId
+    form.value.planIssue = res.data.planIssue
+    form.value.planExpiry = res.data.planExpiry
+  }
+  if (['6', '7'].includes(type.value)) {
+    setTimeout(async () => {
+      const resDetail = await tableDetailRef.value.getDetail(res.data?.planDetails?.detailsId)
+      detailsState.value = resDetail.data.detailsState
+    }, 500)
+  }
+}
+
+const setInfo = () => {
+  const data = detailInfo.value
+  if (type.value === '3') {
+    if (data.planState === 'INIT') {
+      detailInfo.value.availScore = data?.parentPlanAvailScore + data.availScore
+    } else {
+      detailInfo.value.availScore = data?.parentPlanAvailScore
+    }
+  }
+  setFormCommonFields(data)
+  form.value.planName = data.planName
+  form.value.parentId = data.parentId
+  form.value.locFlag = data.locFlag
+  form.value.consigneeId = data.consigneeId
+  form.value.consigneeIdLable = data.consigneeInfo.consigneeName
+  if (data.planType === 'ANN') {
+    const arr = data.planIssue.split('-')
+    form.value.monthrange = arr[0]
+  } else {
+    form.value.monthrange = convertToQuarterStart(data.planIssue)
+  }
+  form.value.planIssue = data.skuInfo.planIssue
+  form.value.planExpiry = data.skuInfo.planExpiry
+  form.value.planScore = data.planScore + ''
+
+  formRef.value.validateField('planScore')
+}
+
+const setFormCommonFields = (data: any) => {
+  form.value.planType = data.planType
+  const curr = planTypeList.find((item) => item.value === data.planType)
+  if (curr) form.value.planTypeLable = curr.label
+  form.value.skuIdLable = data.skuInfo.skuName
+  form.value.ent_name = data.skuInfo.manufacturer
+  form.value.monthrange = data.planIssue + '至' + data.planExpiry
+  form.value.planType = data.planType
+}
+
+function convertToQuarterStart(dateString: string) {
+  const date = new Date(dateString)
+  const year = date.getFullYear()
+  const month = date.getMonth() // 0 为 1 月,11 为 12 月
+  let quarterStartMonth
+  if (month >= 0 && month <= 2) {
+    quarterStartMonth = '第一' // Q1: 1月
+  } else if (month >= 3 && month <= 5) {
+    quarterStartMonth = '第二' // Q2: 4月
+  } else if (month >= 6 && month <= 8) {
+    quarterStartMonth = '第三' // Q3: 7月
+  } else {
+    quarterStartMonth = '第四' // Q4: 10月
+  }
+  return `${year}年${quarterStartMonth}季度`
+}
+
+const customStyle = {
+  height: '80rpx'
+}
+
+const formRef = ref()
+const form = ref({
+  planType: '',
+  planTypeLable: '',
+  parentId: 0,
+  locFlag: 'UN_LOCK',
+  skuId: '',
+  skuIdLable: '',
+  planName: '',
+  consigneeId: '',
+  consigneeIdLable: '',
+  ent_name: '',
+  monthrange: '',
+  planIssue: '',
+  planExpiry: '',
+  planScore: ''
+})
+
+const rules = reactive({
+  skuIdLable: {
+    type: 'string',
+    required: true,
+    message: '请选择目标产品',
+    trigger: ['blur', 'change']
+  },
+  planName: {
+    type: 'string',
+    required: true,
+    message: '请输入目标名称',
+    trigger: ['blur', 'change']
+  },
+  consigneeIdLable: {
+    type: 'string',
+    required: true,
+    message: '请选择承接对象',
+    trigger: ['blur', 'change']
+  },
+  planTypeLable: {
+    type: 'string',
+    required: true,
+    message: '请选择目标周期',
+    trigger: ['blur', 'change']
+  },
+  monthrange: {
+    type: 'string',
+    required: true,
+    message: '请选择目标周期',
+    trigger: ['blur', 'change']
+  },
+  planScore: {
+    type: 'string',
+    required: true,
+    message: '请输入目标总值',
+    trigger: ['blur', 'change']
+  }
+})
+
+const skuIdPicker = ref()
+const consigneeIdPicker = ref()
+const planTypePicker = ref()
+const planTypeList = [
+  {
+    label: '年度计划',
+    value: 'ANN'
+  },
+  {
+    label: '季度计划',
+    value: 'QRT'
+  }
+]
+
+const show = ref(false)
+const yearPicker = ref()
+const seasonPicker = ref()
+const seasonList = ref()
+
+const showSelect = (detailType: string) => {
+  if (formDisabled.value) return
+  if (detailType === 'skuId') {
+    if (type.value === '3') return
+    skuIdPicker.value.open()
+  } else if (detailType === 'consigneeId') {
+    consigneeIdPicker.value.open()
+  } else if (detailType === 'planType') {
+    if (type.value === '3') return
+    planTypePicker.value.open()
+  } else if (detailType === 'monthrange') {
+    if (type.value === '3') return
+    if (!form.value.planTypeLable) return
+    if (form.value.planType === 'ANN') {
+      yearPicker.value.open()
+    } else if (form.value.planType === 'QRT') {
+      let arr = []
+      let years = new Date().getFullYear()
+      for (let i = years - 10; i <= years + 20; i++) {
+        arr.push(i)
+      }
+      const seasonArr = ['一季度', '二季度', '三季度', '四季度']
+      seasonList.value = [arr, seasonArr]
+      seasonPicker.value.open()
+    }
+  }
+}
+
+const skuIdConfirm = (e: any) => {
+  const value = e.value[0]
+  form.value.skuId = value.drug_id
+  form.value.skuIdLable = value.drug_name
+  form.value.ent_name = value.ent_name
+  formRef.value.validateField('skuIdLable')
+  planNameChange()
+}
+const consigneeIdConfirm = (e: any) => {
+  const value = e.value[0]
+  form.value.consigneeId = value.deptId
+  form.value.consigneeIdLable = value.name
+  formRef.value.validateField('consigneeIdLable')
+
+  if (type.value === '3') {
+    const name = detailInfo.value.planName + '-' + value.name
+    form.value.planName = name
+  } else {
+    planNameChange()
+  }
+}
+
+const planTypeConfirm = (e: any) => {
+  if (form.value?.planType === e.value[0]) return
+  const value = e.value[0]
+  form.value.planType = value.value
+  form.value.planTypeLable = value.label
+  formRef.value.validateField('planTypeLable')
+  // 清空目标周期
+  form.value.planIssue = ''
+  form.value.planExpiry = ''
+  form.value.monthrange = ''
+}
+
+const getDate = (e: string[]) => {
+  form.value.monthrange = e[0] + ' 至 ' + e[1]
+  form.value.planIssue = e[0]
+  form.value.planExpiry = e[1]
+  formRef.value.validateField('monthrange')
+  show.value = false
+}
+
+const yearConfirm = (e: any) => {
+  const year = dayjs(e.value).format('YYYY')
+  form.value.monthrange = year
+  form.value.planIssue = year + '-01-01'
+  form.value.planExpiry = year + '-12-31'
+  formRef.value.validateField('monthrange')
+  planNameChange()
+}
+
+const seasonConfirm = (e: any) => {
+  console.log('e', e)
+
+  const seasonIndex = e.indexs[1]
+  const value = e.value
+  form.value.monthrange = value[0] + '年第' + value[1]
+  let startMonth, endMonth, endDay, text
+  switch (seasonIndex) {
+    case 1: // Q1
+      startMonth = 1
+      endMonth = 3
+      endDay = 31
+      text = '第一'
+      break
+    case 2: // Q2
+      startMonth = 4
+      endMonth = 6
+      endDay = 30
+      text = '第二'
+      break
+    case 3: // Q3
+      startMonth = 7
+      endMonth = 9
+      endDay = 30
+      text = '第三'
+      break
+    case 4: // Q4
+      startMonth = 10
+      endMonth = 12
+      endDay = 31
+      text = '第四'
+      break
+    default:
+      throw new Error('Invalid quarter code')
+  }
+  const startDate = `${value[0]}-${String(startMonth).padStart(2, '0')}-01`
+  const endDate = `${value[0]}-${String(endMonth).padStart(2, '0')}-${endDay}`
+  form.value.planIssue = startDate
+  form.value.planExpiry = endDate
+  formRef.value.validateField('monthrange')
+  planNameChange()
+}
+
+const planNameChange = () => {
+  if (
+    form.value.skuIdLable &&
+    form.value.consigneeIdLable &&
+    form.value.planTypeLable &&
+    form.value.monthrange
+  ) {
+    let name = ''
+    if (form.value.planType === 'ANN') {
+      name = `${form.value.monthrange}年度-全年-${form.value.consigneeIdLable}-${form.value.skuIdLable}`
+    } else {
+      const arr = form.value.monthrange.split('年')
+      name = `${arr[0]}年度-${arr[1]}-${form.value.consigneeIdLable}-${form.value.skuIdLable}`
+    }
+
+    form.value.planName = name
+  }
+}
+
+const cancelFn = () => {
+  uni.navigateBack()
+}
+
+const confirmFn = () => {
+  if (type.value === '5') {
+    dismantleSubmit()
+    return
+  }
+  formRef.value
+    .validate()
+    .then(async () => {
+      let res
+      if (type.value === '3') {
+        form.value.parentId = detailInfo.value.planId
+        if (form.value.planScore > detailInfo.value?.availScore) {
+          return uni.showToast({
+            title: '当前分发目标总值不能超过剩余积分值!',
+            icon: 'none'
+          })
+        }
+      }
+      // 编辑 走编辑操作
+      if (btnType.value === '1') {
+        return submitEdit()
+      }
+      res = await createListApi(form.value)
+      if (res.data) {
+        uni.showToast({
+          title: '添加成功',
+          icon: 'none'
+        })
+        setTimeout(() => {
+          uni.navigateBack()
+        }, 1000)
+      }
+    })
+    .catch((err: any) => {
+      console.log('err', err)
+    })
+}
+
+const submitEdit = async () => {
+  const obj = Object.assign(form.value, {
+    planId: detailInfo.value.planId
+  })
+  const res = await updatePlanApi(obj)
+  if (res.data) {
+    uni.showToast({
+      title: '更新成功',
+      icon: 'none'
+    })
+    setTimeout(() => {
+      uni.navigateBack()
+    }, 1000)
+  }
+}
+
+// 审核相关
+const reviewFormRef = ref()
+const reviewForm = reactive({
+  msg: ''
+})
+const reviewFormRules = reactive({
+  msg: {
+    type: 'string',
+    required: false,
+    message: '请输入审核说明',
+    trigger: ['blur', 'change']
+  }
+})
+const reviewFn = (flag: boolean) => {
+  reviewFormRules.msg.required = !flag
+  reviewFormRef.value
+    .validate()
+    .then(async () => {
+      if (type.value === '7') {
+        dismantleReviewSubmt(flag)
+        return
+      }
+      const obj = {
+        msg: reviewForm.msg,
+        planId: detailInfo.value.planId,
+        result: flag
+      }
+
+      const res = await planCheckApi(obj)
+      if (res.data) {
+        uni.showToast({
+          title: '审核完成',
+          icon: 'none'
+        })
+        setTimeout(() => {
+          uni.navigateBack()
+        }, 1000)
+      }
+    })
+    .catch((err: any) => {
+      console.log('err', err)
+    })
+}
+// 拆解
+const tableRef = ref()
+const dismantleSubmit = async () => {
+  const data = tableRef.value.getData()
+  const allQty = data.reduce((prev: any, curr: any) => Number(prev) + Number(curr.qty), 0)
+  const allTotal = data.reduce((prev: any, curr: any) => prev + Number(curr.subtotal), 0)
+  if (allTotal != form.value.planScore) {
+    return uni.showToast({
+      title: '拆解总任务分值需等于目标总值',
+      icon: 'none'
+    })
+  }
+  const obj = {
+    planId: detailInfo.value.planId,
+    qty: allQty,
+    total: allTotal,
+    items: data
+  }
+  const res = await planDetailCreateApi(obj)
+  if (res.data) {
+    uni.showToast({
+      title: '拆解完成',
+      icon: 'none'
+    })
+    setTimeout(() => {
+      uni.navigateBack()
+    }, 1000)
+  }
+}
+// 拆解审核
+const dismantleReviewSubmt = async (flag: boolean) => {
+  const obj = {
+    detailsId: detailInfo.value.planDetails.detailsId,
+    result: flag,
+    msg: reviewForm.msg,
+    currentState: detailsState.value
+  }
+  const res = await checkPlanDetailsApi(obj)
+  if (res.data) {
+    uni.showToast({
+      title: '审核完成',
+      icon: 'none'
+    })
+    setTimeout(() => {
+      uni.navigateBack()
+    }, 1000)
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.objectives-add {
+  background: #f2f2f2;
+  min-height: 100vh;
+  box-sizing: border-box;
+  padding: 24rpx;
+
+  .message {
+    background: #fff;
+    padding: 30rpx;
+    border-radius: 12rpx;
+    width: 100%;
+    box-sizing: border-box;
+  }
+  .form {
+    background: #fff;
+    padding: 30rpx;
+    border-radius: 12rpx;
+
+    .avail-score {
+      margin-top: 34rpx;
+      font-size: 30rpx;
+      font-weight: 400;
+      color: #000;
+    }
+  }
+  .table {
+    margin-top: 20rpx;
+  }
+}
+
+.botton-content {
+  /* position: fixed;
+  bottom: 40rpx; */
+  margin-top: 20rpx;
+  padding: 30rpx 46rpx 54rpx;
+  box-sizing: border-box;
+  background-color: #fff;
+  width: 700rpx;
+  min-height: 160rpx;
+  border-radius: 12rpx;
+}
+.btn {
+  display: flex;
+  justify-content: space-between;
+
+  view {
+    font-weight: 400;
+    box-sizing: border-box;
+    font-size: 32rpx;
+    line-height: 45rpx;
+    border-radius: 8rpx;
+    height: 72rpx;
+    width: 290rpx;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+  }
+  .cancel {
+    border: 2rpx solid #c7c7c7;
+    color: #111;
+  }
+  .confirm {
+    background-color: #6eb657;
+    color: #ffffff;
+  }
+}
+:deep(.uv-form-item__body__left) {
+  padding-left: 18rpx;
+}
+.review-form {
+  margin-bottom: 54rpx;
+}
+
+.b-fixed {
+  position: fixed;
+  bottom: 40rpx;
+}
+</style>

+ 466 - 0
src/pages-sub-admin/objectivesDetailList/index.vue

@@ -0,0 +1,466 @@
+<template>
+  <view class="objectives-list">
+    <view class="search">
+      <view class="top-search">
+        <view class="search-input">
+          <uv-input
+            v-model="searchParams.planName"
+            :customStyle="customStyle"
+            clearable
+            shape="circle"
+            placeholder="请输入"
+            prefixIcon="search"
+            prefixIconStyle="font-size: 22px;color: #6eb657"
+          ></uv-input>
+        </view>
+        <view class="search-button" @click="searchFn">搜索</view>
+        <uv-icon name="plus-circle" color="#6eb657" size="24" />
+      </view>
+      <view class="search-content">
+        <view
+          class="search-list"
+          @click="searchClick('consigneeId')"
+          :class="searchParams.consigneeId ? 'active' : ''"
+        >
+          <text>承接对象</text>
+          <uv-icon
+            name="arrow-down-fill"
+            :color="searchParams.consigneeId ? '#6eb657' : '#111111'"
+            size="14"
+          />
+        </view>
+        <view
+          class="search-list"
+          @click="searchClick('period')"
+          :class="searchParams.period.length ? 'active' : ''"
+        >
+          <text>创建日期</text>
+          <uv-icon
+            name="arrow-down-fill"
+            :color="searchParams.period.length ? '#6eb657' : '#111111'"
+            size="14"
+          />
+        </view>
+      </view>
+    </view>
+
+    <view class="list" v-if="hasInfo">
+      <view class="item" v-for="item in listArr" :key="item.id">
+        <view class="header">
+          <view class="title">{{ item.planName }}</view>
+          <view class="status">
+            <text class="circle"></text>
+            <text>{{ getStatusName(item.planState) }}</text>
+          </view>
+        </view>
+        <view class="content">
+          <view class="txt">承接对象:{{ item.consigneeInfo.consigneeName }}</view>
+          <view class="txt">目标周期:{{ item.planIssue + ' 至 ' + item.planExpiry }}</view>
+          <view class="txt">创建日期:{{ item.createTime }}</view>
+          <view class="progress">
+            <uv-line-progress
+              class="pro-two"
+              round
+              :showText="false"
+              :percentage="item.percentage"
+              activeColor="#95dc7e"
+              inactiveColor="#f8f8f0"
+            ></uv-line-progress>
+            <text>{{ item.percentage }}%</text>
+          </view>
+          <view class="txt">{{ item.execScoreValue }}/{{ item.planScore }}</view>
+          <view class="btns">
+            <!-- 区域管理员 -->
+            <template v-if="isYQGLY">
+              <!-- 分发 -->
+              <template v-if="item.parentId != '0' && item.planState === 'INIT'">
+                <view class="btn" @click="toDetail(4, item)">
+                  <image src="@/static/images/icon/review-img2.png" class="image" />
+                  <text>分发审核</text>
+                </view>
+              </template>
+            </template>
+            <!-- 区域管理员 | 一级cso -->
+            <template v-if="isDLSGLY">
+              <!-- 拆解审核 -->
+              <template v-if="item.planDetails && !item.planDetails.cktMsg1">
+                <view class="btn" @click="toDetail(7, item)">
+                  <image src="@/static/images/icon/review-img.png" class="image" />
+                  <text>拆解审核</text>
+                </view>
+              </template>
+            </template>
+            <!-- 商务组-->
+            <template v-if="isSWZ">
+              <!-- 拆解审核 -->
+              <template
+                v-if="item.planDetails && item.planDetails.cktMsg1 && !item.planDetails.cktMsg2"
+              >
+                <view class="btn" @click="toDetail(7, item)">
+                  <image src="@/static/images/icon/review-img.png" class="image" />
+                  <text>拆解审核</text>
+                </view>
+              </template>
+            </template>
+            <!-- 事业部-->
+            <template v-if="isSYB">
+              <!-- 拆解审核 -->
+              <template
+                v-if="
+                  item.planDetails &&
+                  item.planDetails.cktMsg1 &&
+                  item.planDetails.cktMsg2 &&
+                  !item.planDetails.cktMsg3
+                "
+              >
+                <view class="btn" @click="toDetail(7, item)">
+                  <image src="@/static/images/icon/review-img.png" class="image" />
+                  <text>拆解审核</text>
+                </view>
+              </template>
+            </template>
+            <!-- 数据统计 -->
+            <template v-if="item.planDetails">
+              <view class="btn" @click.stop.prevent.self="toDetail(6, item)">
+                <image src="@/static/images/icon/dismantle-img2.png" class="image" />
+                <text>数据统计</text>
+              </view>
+            </template>
+
+            <!-- 编辑按钮 -->
+            <template v-if="isDLSGLY && item.parentId != '0'">
+              <view class="btn" @click.stop.prevent.self="toEdit(item)">
+                <text :class="{ disabled: editDisabled(item) }">编辑</text>
+              </view>
+            </template>
+          </view>
+        </view>
+      </view>
+    </view>
+    <noData v-else />
+    <!-- 选择承接对象 -->
+    <uv-picker
+      ref="pickerRef"
+      :columns="csoList"
+      keyName="gsmc"
+      @confirm="pickerConfim"
+    ></uv-picker>
+    <!-- 月份范围 -->
+    <KDatePicker v-model="show" type="month" is-range @change="getDate" formatter="YYYY-MM-DD" />
+  </view>
+</template>
+
+<script setup lang="ts">
+import noData from '@/components/noData/index.vue'
+import { ref } from 'vue'
+import { onShow, onReachBottom, onLoad } from '@dcloudio/uni-app'
+import { getPlanChildrenApi, getListCsoApi } from '@/service/modules/objectivesList'
+import { getDictByNameApi } from '@/service/modules/getDict'
+import KDatePicker from '@/components/dateSelect/k-date-picker/KDatePicker.vue'
+import { useLoginStore } from '@/store/login'
+
+const loginStore = useLoginStore()
+let userInfo: any = loginStore.currentUserInfo
+const roles: number[] = userInfo.roles
+
+const customStyle = {
+  backgroundColor: '#f6f6f6'
+}
+
+const searchInfoDetail = ref()
+
+onLoad((e: any) => {
+  const searchInfo = JSON.parse(e?.searchInfo)
+  searchInfo.planId = e?.id
+  searchInfoDetail.value = searchInfo
+})
+
+class Params {
+  consigneeId = ''
+  period = [] as string[]
+  planName = ''
+  total = -1
+  current = 1
+  size = 10
+}
+
+const searchParams = ref(new Params())
+
+const hasInfo = ref(true)
+const listArr = ref<any[]>([])
+
+const getList = async (searchInfo: any) => {
+  uni.showLoading()
+  const res = await getPlanChildrenApi(searchInfo)
+  if (res.code === 0 && res.data) {
+    res.data?.forEach((item: any) => {
+      if (typeof item.execScoreValue === 'number' && typeof item.planScore === 'number') {
+        let value: any = (item.execScoreValue / item.planScore).toFixed(2)
+        item.percentage = value * 100
+      }
+    })
+    listArr.value = res.data
+  }
+  hasInfo.value = !!listArr.value.length
+  uni.hideLoading()
+}
+
+onReachBottom(() => {
+  if (listArr.value.length === searchParams.value.total) return
+  searchParams.value.current++
+  // getList()
+})
+const csoList = ref<any[]>([])
+const implPlanStateList = ref<any[]>([])
+const getDict = async () => {
+  getDictByNameApi('impl_plan_state').then((res: any) => (implPlanStateList.value = res.data))
+  getListCsoApi().then((res: any) => (csoList.value = [res.data]))
+}
+const getCsoName = (consigneeId: number) => {
+  const curr = csoList.value[0]?.find((item: any) => item.deptId === consigneeId)
+  return curr?.gsmc
+}
+const getStatusName = (planState: string) => {
+  const curr = implPlanStateList.value?.find((item: any) => item.value === planState)
+  return curr?.label
+}
+
+// 营销中心
+const isYXZX = ref(false)
+// 药企管理员
+const isYQGLY = ref(false)
+// 区域管理员
+const isDLSGLY = ref(false)
+// 商务组
+const isSWZ = ref(false)
+// 事业部分管领导
+const isSYB = ref(false)
+
+onShow(() => {
+  // 营销中心
+  if (roles.includes(38)) {
+    isYXZX.value = true
+  }
+  // 药企管理员
+  if (roles.includes(3)) {
+    isYQGLY.value = true
+  }
+  // 区域管理员
+  if (roles.includes(4)) {
+    isDLSGLY.value = true
+  }
+  // 商务组
+  if (roles.includes(40)) {
+    isSWZ.value = true
+  }
+  // 事业部
+  if (roles.includes(41)) {
+    isSYB.value = true
+  }
+  listArr.value = []
+  getDict()
+  searchParams.value.current = 1
+  getList(searchInfoDetail.value)
+})
+
+const searchFn = () => {
+  listArr.value = []
+  searchParams.value.current = 1
+  // getList()
+}
+
+const pickerRef = ref()
+const show = ref(false)
+
+const searchClick = (type: string) => {
+  if (type === 'consigneeId') {
+    pickerRef.value.open()
+  } else {
+    show.value = true
+  }
+}
+
+const pickerConfim = (e: any) => {
+  searchParams.value.consigneeId = e.value[0].deptId
+  searchFn()
+}
+
+const getDate = (e: any[]) => {
+  if (!e[1]) return
+  searchParams.value.period = e
+  show.value = false
+  searchFn()
+}
+
+const toDetail = (type: number, row?: any) => {
+  uni.navigateTo({
+    url: `/pages-sub-admin/objectivesAdd/index?&type=${type}&planId=${row.planId}`
+  })
+}
+
+const editDisabled = (item: any) => {
+  // 下发的一级包状态
+  if (item.parentId == 0) {
+    if (item.planType === 'ANN') {
+      let flag = item.planState === 'INIT' || item.planState === 'REJECTED'
+      return !flag
+    } else if (item.planType === 'QRT') {
+      let flag = item.children && item.children.length > 0
+      return flag
+    }
+  } else {
+    let flag = item.planState === 'INIT' || item.planState === 'REJECTED'
+    return !flag
+  }
+}
+// 编辑
+const toEdit = (item: any) => {
+  const flag = editDisabled(item)
+  if (flag) return
+
+  const type = item.parentId == 0 ? 1 : 3
+  uni.navigateTo({
+    url: `/pages-sub-admin/objectivesAdd/index?&type=${type}&btnType=1&planId=${item?.planId}`
+  })
+}
+</script>
+
+<style lang="scss" scoped>
+.objectives-list {
+  padding: 24rpx 0;
+  .search {
+    position: fixed;
+    width: 750rpx;
+    padding: 0 30rpx;
+    top: 0;
+    height: 150rpx;
+    background-color: #fff;
+    z-index: 99;
+    .top-search {
+      display: flex;
+      align-items: center;
+
+      .search-input {
+        width: 540rpx;
+        height: 70rpx;
+      }
+      .search-button {
+        color: #6eb657;
+        font-size: 30rpx;
+        margin: 0 10px;
+        font-weight: 400;
+      }
+    }
+    .search-content {
+      margin-top: 24rpx;
+      padding-bottom: 10rpx;
+      display: flex;
+      .search-list {
+        display: flex;
+        align-content: center;
+        margin-right: 64rpx;
+        height: 40rpx;
+        text {
+          font-weight: 500;
+          line-height: 40rpx;
+          font-size: 28rpx;
+          color: #111111;
+          margin-right: 8rpx;
+        }
+      }
+      .active text {
+        color: #6eb657;
+      }
+    }
+  }
+
+  .list {
+    margin-top: 150rpx;
+    padding: 0 30rpx;
+    .item {
+      margin-bottom: 20rpx;
+      width: 100%;
+      border-radius: 16rpx;
+      box-shadow: 0px 2rpx 8rpx 0px rgba(0, 0, 0, 0.2);
+      .header {
+        background-color: #f8f8f0;
+        padding: 26rpx 20rpx;
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        border-top-left-radius: 16rpx;
+        border-top-right-radius: 16rpx;
+        .title {
+          font-size: 32rpx;
+          line-height: 45rpx;
+          width: 70%;
+          font-weight: 500;
+          color: #333;
+          word-wrap: break-word;
+        }
+        .status {
+          .circle {
+            display: block;
+            border-radius: 50%;
+            background-color: #72b25b;
+            margin-right: 10rpx;
+            width: 15rpx;
+            height: 15rpx;
+          }
+          display: flex;
+          align-items: center;
+          color: #72b25b;
+        }
+      }
+      .content {
+        padding: 20rpx;
+        .txt {
+          font-weight: 400;
+          color: #999;
+          font-size: 22rpx;
+          line-height: 30rpx;
+          margin-bottom: 16rpx;
+        }
+        .progress {
+          display: flex;
+          align-items: center;
+          margin-bottom: 8rpx;
+          .pro-two {
+            width: 80%;
+          }
+          text {
+            margin-left: 10px;
+            color: #010101;
+            font-size: 26rpx;
+            line-height: 36rpx;
+          }
+        }
+        .btns {
+          margin-top: 30rpx;
+          display: flex;
+
+          .btn {
+            display: flex;
+            align-items: center;
+            height: 34rpx;
+
+            .image {
+              width: 28rpx;
+              height: 28rpx;
+              margin-right: 12rpx;
+            }
+            text {
+              color: #6eb657;
+              font-size: 24rpx;
+              line-height: 34rpx;
+            }
+            .disabled {
+              color: #999;
+            }
+          }
+        }
+      }
+    }
+  }
+}
+</style>

+ 177 - 0
src/pages-sub-admin/objectivesList/components/approvalFlowchart.vue

@@ -0,0 +1,177 @@
+<template>
+  <uv-popup ref="popup" mode="bottom" @change="popupChange" v-if="showComponents">
+    <view class="step-content">
+      <uv-steps :current="info.active" dot direction="column" v-if="info.type === 0">
+        <uv-steps-item title="创建完成" active-color="#95dc7e" :customStyle="customStyle">
+          <template v-slot:title>
+            <text class="content-item">创建完成</text>
+          </template>
+        </uv-steps-item>
+        <uv-steps-item v-if="showStep2">
+          <template v-slot:title>
+            <text class="content-item">{{ info.title1 }}</text>
+          </template>
+        </uv-steps-item>
+        <uv-steps-item>
+          <template v-slot:title>
+            <text class="content-item">待区域管理员分发</text>
+          </template>
+        </uv-steps-item>
+        <uv-steps-item title="审核通过待下发">
+          <template v-slot:title>
+            <text class="content-item">审核通过待下发</text>
+          </template>
+        </uv-steps-item>
+        <uv-steps-item>
+          <template v-slot:title>
+            <text class="content-item">审核通过已下发</text>
+          </template>
+        </uv-steps-item>
+      </uv-steps>
+      <uv-steps
+        :current="info.active"
+        dot
+        direction="column"
+        active-color="#95dc7e"
+        inactive-color="#999"
+        v-if="info.type === 1"
+      >
+        <uv-steps-item>
+          <template v-slot:title>
+            <text class="content-item">创建完成</text>
+          </template>
+        </uv-steps-item>
+        <uv-steps-item>
+          <template v-slot:title>
+            <text class="content-item">{{ info.title2 }}</text>
+          </template>
+        </uv-steps-item>
+        <uv-steps-item>
+          <template v-slot:title>
+            <text class="content-item">{{ info.title3 }}</text>
+          </template>
+        </uv-steps-item>
+        <uv-steps-item>
+          <template v-slot:title>
+            <text class="content-item">待区域管理员拆解审核</text>
+          </template>
+        </uv-steps-item>
+        <uv-steps-item>
+          <template v-slot:title>
+            <text class="content-item">待商务管理员拆解审核</text>
+          </template>
+        </uv-steps-item>
+        <uv-steps-item>
+          <template v-slot:title>
+            <text class="content-item">待事业部分管领导拆解审核</text>
+          </template>
+        </uv-steps-item>
+        <uv-steps-item>
+          <template v-slot:title>
+            <text class="content-item">拆解完成</text>
+          </template>
+        </uv-steps-item>
+      </uv-steps>
+    </view>
+  </uv-popup>
+</template>
+
+<script setup lang="ts">
+import { reactive, ref } from 'vue'
+
+const showComponents = ref(false)
+
+const customStyle = {
+  height: '120rpx'
+}
+
+const popup = ref()
+
+const showStep2 = ref(true)
+
+const info = reactive({
+  title1: '待营销中心分管领导审批',
+  title2: '待运营管理员分发审核',
+  title3: '待服务商管理员拆解',
+  active: 1,
+  type: 0
+})
+
+const show = (item: any) => {
+  showComponents.value = true
+  info.type = item.parentId === 0 ? 0 : 1
+  info.title1 = '待营销中心分管领导审批'
+  info.title2 = '待运营管理员分发审核'
+  info.title3 = '待服务员管理员拆解'
+  info.active = 1
+
+  if (item.parentId == 0) {
+    showStep2.value = item.planType === 'QRT' ? false : true
+
+    if (item.planState === 'PASSED') {
+      if (!item.children) {
+        info.active = 2
+      } else {
+        info.active = item.execScoreValue > 0 ? 5 : 3
+      }
+    } else if (item.planState === 'REJECTED') {
+      info.title1 = '营销中心分管领导拒绝'
+    }
+  } else {
+    if (item.planState === 'PASSED') {
+      if (!item.planDetails) {
+        info.active = 2
+      } else {
+        switch (item.planDetails.detailsState) {
+          case 'INIT':
+            info.active = 3
+            break
+          case 'CKT1':
+            info.active = 4
+            break
+          case 'CKT2':
+            info.active = 5
+            break
+          case 'PASSED':
+            info.active = 7
+            break
+          case 'REJECTED':
+            info.active = 2
+            info.title3 = '拆解审核失败,待服务员管理员重新拆解'
+            break
+          default:
+            break
+        }
+      }
+    } else if (item.planState === 'REJECTED') {
+      info.title2 = '运营管理员分发审核拒绝'
+    }
+  }
+
+  setTimeout(() => {
+    popup.value.open()
+  }, 250)
+}
+
+const popupChange = (flag: any) => {
+  if (!flag.show) {
+    showStep2.value = true
+    showComponents.value = false
+  }
+}
+
+defineExpose({ show })
+</script>
+
+<style lang="scss" scoped>
+.step-content {
+  height: 80vh;
+  padding: 30rpx;
+}
+.content-item {
+  height: 120rpx;
+}
+:deep(.uv-steps-item__line) {
+  height: 120rpx !important;
+}
+</style>

+ 487 - 0
src/pages-sub-admin/objectivesList/index.vue

@@ -0,0 +1,487 @@
+<template>
+  <view class="objectives-list">
+    <view class="search">
+      <view class="top-search">
+        <view class="search-input">
+          <uv-input
+            v-model="searchParams.planName"
+            :customStyle="customStyle"
+            clearable
+            shape="circle"
+            placeholder="请输入"
+            prefixIcon="search"
+            prefixIconStyle="font-size: 22px;color: #6eb657"
+          ></uv-input>
+        </view>
+        <view class="search-button" @click="searchFn">搜索</view>
+        <uv-icon name="plus-circle" v-if="addFlag" color="#6eb657" size="24" @click="toDetail(1)" />
+      </view>
+      <view class="search-content">
+        <view
+          class="search-list"
+          @click="searchClick('consigneeId')"
+          :class="searchParams.consigneeId ? 'active' : ''"
+        >
+          <text>承接对象</text>
+          <uv-icon
+            name="arrow-down-fill"
+            :color="searchParams.consigneeId ? '#6eb657' : '#111111'"
+            size="14"
+          />
+        </view>
+        <view
+          class="search-list"
+          @click="searchClick('period')"
+          :class="searchParams.period.length ? 'active' : ''"
+        >
+          <text>目标周期</text>
+          <uv-icon
+            name="arrow-down-fill"
+            :color="searchParams.period.length ? '#6eb657' : '#111111'"
+            size="14"
+          />
+        </view>
+      </view>
+    </view>
+
+    <view class="list" v-if="hasInfo">
+      <view
+        class="item"
+        v-for="item in listArr"
+        :key="item.id"
+        @click.stop.prevent.self="detailClick(item.id)"
+      >
+        <view class="header">
+          <view class="title">{{ item.planName }}</view>
+          <view class="status">
+            <text class="circle"></text>
+            <text>{{ getStatusName(item.planState) }}</text>
+          </view>
+        </view>
+        <view class="content">
+          <view class="txt">承接对象:{{ item.consigneeInfo.consigneeName }}</view>
+          <view class="txt">目标周期:{{ item.planIssue + ' 至 ' + item.planExpiry }}</view>
+          <view class="txt">创建日期:{{ item.createTime }}</view>
+          <view class="progress">
+            <uv-line-progress
+              class="pro-two"
+              round
+              :showText="false"
+              :percentage="item.percentage"
+              activeColor="#95dc7e"
+              inactiveColor="#f8f8f0"
+            ></uv-line-progress>
+            <text>{{ item.percentage }}%</text>
+          </view>
+          <view class="txt">{{ item.execScoreValue }}/{{ item.planScore }}</view>
+          <view class="btns">
+            <view class="btn" @click.stop.prevent.self="approvalFlowchartFn(item)">
+              <text>审核节点</text>
+            </view>
+            <!-- 区域管理员 -->
+            <template v-if="isDLSGLY">
+              <!-- 分发 -->
+              <template v-if="item.parentId == '0' && item.availScore > 0">
+                <view class="btn" @click.stop.prevent.self="toDetail(3, item)">
+                  <image src="@/static/images/icon/distribute-img.png" class="image" />
+                  <text>分发</text>
+                </view>
+              </template>
+            </template>
+            <!-- 营销中心 -->
+            <template v-if="isYXZX">
+              <!-- 审核 -->
+              <template v-if="item.planState === 'INIT' && item.parentId == 0">
+                <view class="btn" @click.stop.prevent.self="toDetail(2, item)">
+                  <image src="@/static/images/icon/review-img.png" class="image" />
+                  <text>审核</text>
+                </view>
+              </template>
+            </template>
+            <!-- 二级cso -->
+            <template v-if="isROLE_SERVICE">
+              <!-- 拆解 -->
+              <template v-if="!item.planDetails || item.planDetails.detailsState === 'REJECTED'">
+                <view class="btn" @click.stop.prevent.self="toDetail(5, item)">
+                  <image src="@/static/images/icon/dismantle-img2.png" class="image" />
+                  <text>拆解</text>
+                </view>
+              </template>
+            </template>
+            <!-- 数据统计 -->
+            <template v-if="item.planDetails">
+              <view class="btn" @click.stop.prevent.self="toDetail(6, item)">
+                <image src="@/static/images/icon/dismantle-img2.png" class="image" />
+                <text>数据统计</text>
+              </view>
+            </template>
+            <!-- 编辑按钮 -->
+            <template v-if="isYQGLY && item.parentId == '0'">
+              <view class="btn" @click.stop.prevent.self="toEdit(item)">
+                <text :class="{ disabled: editDisabled(item) }">编辑</text>
+              </view>
+            </template>
+          </view>
+        </view>
+      </view>
+    </view>
+    <noData v-else />
+    <!-- 选择承接对象 -->
+    <uv-picker
+      @cancel="pickerCancel"
+      :cancelText="searchParams.consigneeId ? '清空' : '取消'"
+      ref="pickerRef"
+      :columns="csoList"
+      keyName="gsmc"
+      @confirm="pickerConfim"
+    ></uv-picker>
+    <!-- 月份范围 -->
+    <KDatePicker
+      v-model="show"
+      type="month"
+      is-range
+      :confirmText="searchParams.period.length ? '清除' : '确定'"
+      @change="getDate"
+      formatter="YYYY-MM-DD"
+    />
+    <approvalFlowchart ref="approvalFlowchartRef" />
+  </view>
+</template>
+
+<script setup lang="ts">
+import noData from '@/components/noData/index.vue'
+import { ref } from 'vue'
+import { onShow, onReachBottom } from '@dcloudio/uni-app'
+import { getListApi, getListDescendant } from '@/service/modules/objectivesList'
+import { getDictByNameApi } from '@/service/modules/getDict'
+import KDatePicker from '@/components/dateSelect/k-date-picker/KDatePicker.vue'
+import { useLoginStore } from '@/store/login'
+import approvalFlowchart from './components/approvalFlowchart.vue'
+
+const loginStore = useLoginStore()
+let userInfo: any = loginStore.currentUserInfo
+const roles: number[] = userInfo.roles
+
+const customStyle = {
+  backgroundColor: '#f6f6f6'
+}
+
+class Params {
+  consigneeId = ''
+  period = [] as string[]
+  planName = ''
+  total = -1
+  current = 1
+  size = 10
+}
+
+const searchParams = ref(new Params())
+
+const hasInfo = ref(true)
+const listArr = ref<any[]>([])
+const getList = async () => {
+  uni.showLoading()
+  const res = await getListApi(searchParams.value)
+  if (res.code === 0) {
+    searchParams.value.total = res.data.total
+    res.data.records.forEach((item: any) => {
+      if (typeof item.execScoreValue === 'number' && typeof item.planScore === 'number') {
+        let value: any = (item.execScoreValue / item.planScore).toFixed(2)
+        item.percentage = value * 100
+      }
+    })
+    listArr.value = listArr.value.concat(res.data.records)
+    searchParams.value.total = res.data.total
+    hasInfo.value = !!listArr.value.length
+  } else {
+    hasInfo.value = false
+  }
+  uni.hideLoading()
+}
+const pickerCancel = () => {
+  if (searchParams.value.consigneeId) {
+    searchParams.value.consigneeId = ''
+    searchFn()
+  }
+}
+
+onReachBottom(() => {
+  if (listArr.value.length === searchParams.value.total) return
+  searchParams.value.current++
+  getList()
+})
+const csoList = ref<any[]>([])
+const implPlanStateList = ref<any[]>([])
+const getDict = async () => {
+  getDictByNameApi('impl_plan_state').then((res: any) => (implPlanStateList.value = res.data))
+  getListDescendant().then((res: any) => (csoList.value = [res.data]))
+}
+
+const getStatusName = (planState: string) => {
+  const curr = implPlanStateList.value?.find((item: any) => item.value === planState)
+  return curr?.label
+}
+
+const detailClick = (id: number) => {
+  if (isROLE_SERVICE.value) return
+  const searchInfo = JSON.stringify(searchParams.value)
+  uni.navigateTo({
+    url: `/pages-sub-admin/objectivesDetailList/index?&searchInfo=${searchInfo}&id=${id}`
+  })
+}
+
+// 营销中心
+const isYXZX = ref(false)
+// 药企管理员
+const isYQGLY = ref(false)
+// 区域管理员
+const isDLSGLY = ref(false)
+
+// 二级cso
+const isROLE_SERVICE = ref(false)
+
+// 判断是否有新增按钮
+
+const addFlag = ref(false)
+
+onShow(() => {
+  // 营销中心
+  if (roles.includes(38)) {
+    isYXZX.value = true
+  }
+  // 药企管理员
+  if (roles.includes(3)) {
+    isYQGLY.value = true
+    addFlag.value = true
+  }
+  // 区域管理员
+  if (roles.includes(4)) {
+    isDLSGLY.value = true
+  }
+  if (roles.includes(37)) {
+    isROLE_SERVICE.value = true
+  }
+  listArr.value = []
+  getDict()
+  searchParams.value.current = 1
+  getList()
+})
+
+const searchFn = () => {
+  listArr.value = []
+  searchParams.value.current = 1
+  getList()
+}
+
+const pickerRef = ref()
+const show = ref(false)
+
+const searchClick = (type: string) => {
+  if (type === 'consigneeId') {
+    pickerRef.value.open()
+  } else {
+    show.value = true
+  }
+}
+
+const pickerConfim = (e: any) => {
+  searchParams.value.consigneeId = e.value[0].deptId
+  searchFn()
+}
+
+const getDate = (e: any[]) => {
+  if (searchParams.value.period.length) {
+    searchParams.value.period = []
+  } else {
+    searchParams.value.period = e
+  }
+  show.value = false
+  searchFn()
+}
+
+const approvalFlowchartRef = ref()
+const approvalFlowchartFn = (item: any) => {
+  approvalFlowchartRef.value.show(item)
+}
+
+// type 1: 新增 2:审核 3: 分发 4:分发审核 5:拆解 6:数据统计 7:拆解审核
+const toDetail = (type: number, row?: any) => {
+  if (type === 1) {
+    uni.navigateTo({
+      url: `/pages-sub-admin/objectivesAdd/index?&type=${type}`
+    })
+  } else {
+    uni.navigateTo({
+      url: `/pages-sub-admin/objectivesAdd/index?&type=${type}&planId=${row?.planId}`
+    })
+  }
+}
+
+const editDisabled = (item: any) => {
+  // 下发的一级包状态
+  if (item.parentId == 0) {
+    if (item.planType === 'ANN') {
+      let flag = item.planState === 'INIT' || item.planState === 'REJECTED'
+      return !flag
+    } else if (item.planType === 'QRT') {
+      let flag = item.children && item.children.length > 0
+      return flag
+    }
+  } else {
+    let flag = item.planState === 'INIT' || item.planState === 'REJECTED'
+    return !flag
+  }
+}
+
+// 编辑
+const toEdit = (item: any) => {
+  const flag = editDisabled(item)
+  if (flag) return
+
+  const type = item.parentId == 0 ? 1 : 3
+  uni.navigateTo({
+    url: `/pages-sub-admin/objectivesAdd/index?&type=${type}&btnType=1&planId=${item?.planId}`
+  })
+}
+</script>
+
+<style lang="scss" scoped>
+.objectives-list {
+  padding: 24rpx 0;
+  .search {
+    position: fixed;
+    width: 750rpx;
+    padding: 0 30rpx;
+    top: 0;
+    height: 150rpx;
+    background-color: #fff;
+    z-index: 99;
+    .top-search {
+      display: flex;
+      align-items: center;
+
+      .search-input {
+        width: 540rpx;
+        height: 70rpx;
+      }
+      .search-button {
+        color: #6eb657;
+        font-size: 30rpx;
+        margin: 0 10px;
+        font-weight: 400;
+      }
+    }
+    .search-content {
+      margin-top: 24rpx;
+      padding-bottom: 10rpx;
+      display: flex;
+      .search-list {
+        display: flex;
+        align-content: center;
+        margin-right: 64rpx;
+        height: 40rpx;
+        text {
+          font-weight: 500;
+          line-height: 40rpx;
+          font-size: 28rpx;
+          color: #111111;
+          margin-right: 8rpx;
+        }
+      }
+      .active text {
+        color: #6eb657;
+      }
+    }
+  }
+
+  .list {
+    margin-top: 150rpx;
+    padding: 0 30rpx;
+    .item {
+      margin-bottom: 20rpx;
+      width: 100%;
+      border-radius: 16rpx;
+      box-shadow: 0px 2rpx 8rpx 0px rgba(0, 0, 0, 0.2);
+      .header {
+        background-color: #f8f8f0;
+        padding: 26rpx 20rpx;
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        border-top-left-radius: 16rpx;
+        border-top-right-radius: 16rpx;
+        .title {
+          font-size: 32rpx;
+          line-height: 45rpx;
+          width: 70%;
+          font-weight: 500;
+          color: #333;
+          word-wrap: break-word;
+        }
+        .status {
+          .circle {
+            display: block;
+            border-radius: 50%;
+            background-color: #72b25b;
+            margin-right: 10rpx;
+            width: 15rpx;
+            height: 15rpx;
+          }
+          display: flex;
+          align-items: center;
+          color: #72b25b;
+        }
+      }
+      .content {
+        padding: 20rpx;
+        .txt {
+          font-weight: 400;
+          color: #999;
+          font-size: 22rpx;
+          line-height: 30rpx;
+          margin-bottom: 16rpx;
+        }
+        .progress {
+          display: flex;
+          align-items: center;
+          margin-bottom: 8rpx;
+          .pro-two {
+            width: 80%;
+          }
+          text {
+            margin-left: 10px;
+            color: #010101;
+            font-size: 26rpx;
+            line-height: 36rpx;
+          }
+        }
+        .btns {
+          margin-top: 30rpx;
+          display: flex;
+
+          .btn {
+            display: flex;
+            align-items: center;
+            height: 34rpx;
+            margin-right: 10rpx;
+
+            .image {
+              width: 28rpx;
+              height: 28rpx;
+              margin-right: 12rpx;
+            }
+            text {
+              color: #6eb657;
+              font-size: 24rpx;
+              line-height: 34rpx;
+            }
+            .disabled {
+              color: #999;
+            }
+          }
+        }
+      }
+    }
+  }
+}
+</style>

+ 79 - 0
src/pages-sub-admin/serviceManagement/index.vue

@@ -0,0 +1,79 @@
+<template>
+  <view class="market-box">
+    <template v-for="(item, index) in taskList" :key="item.url">
+      <view v-show="getShow(index)">
+        <view
+          class="market-list"
+          :style="{ background: item.backgroundColor }"
+          @click="navigateToDetail(item.url)"
+        >
+          <image :src="item.img" alt="" />
+          <view class="info" :style="{ color: item.color }">
+            <view class="title">{{ item.title }}</view>
+          </view>
+          <view class="btn">
+            <uv-icon name="arrow-right" :color="item.color" size="16" />
+          </view>
+        </view>
+      </view>
+    </template>
+  </view>
+</template>
+
+<script setup lang="ts">
+import taskList from './taskList'
+import { useLoginStore } from '@/store/login'
+const loginStore = useLoginStore()
+let userInfo: any = loginStore.currentUserInfo
+const currentRoles: number[] = userInfo.roles
+
+const navigateToDetail = (url: string) => {
+  uni.navigateTo({
+    url: url
+  })
+}
+
+const getShow = (index: number) => {
+  const hasRole37 = currentRoles.includes(37)
+  return hasRole37 ? index <= 1 : index > 1
+}
+</script>
+
+<style lang="scss" scoped>
+.market-box {
+  padding: 30rpx;
+  .market-list {
+    height: 180rpx;
+    border-radius: 16rpx;
+    padding: 10rpx 24rpx;
+    display: flex;
+    align-items: center;
+    margin-bottom: 24rpx;
+    image {
+      width: 160rpx;
+      height: 160rpx;
+    }
+    .info {
+      margin-left: 24rpx;
+      .title {
+        font-size: 36rpx;
+        font-weight: 600;
+        margin-bottom: 10rpx;
+      }
+      .desc {
+        font-size: 22rpx;
+      }
+    }
+    .btn {
+      margin-left: auto;
+      width: 56rpx;
+      height: 56rpx;
+      border-radius: 50%;
+      background: rgba($color: #fff, $alpha: 0.3);
+      display: flex;
+      align-items: center;
+      justify-content: center;
+    }
+  }
+}
+</style>

+ 41 - 0
src/pages-sub-admin/serviceManagement/taskList.ts

@@ -0,0 +1,41 @@
+export default [
+  {
+    title: '服务下发',
+    color: '#30546E',
+    role: [4],
+    url: '/pages-sub-service-mangement/serviceDelivery/index',
+    backgroundColor: 'linear-gradient(270.93deg, #D6EDFD 0.8%, #F1F9FF 100%);',
+    img: 'https://yy-cloud-oss.oss-cn-beijing.aliyuncs.com/img/zxdc.png'
+  },
+  {
+    title: '服务下发-自营',
+    color: '#427C89',
+    role: [37],
+    url: '/pages-sub-service-mangement/assignPoints/index',
+    backgroundColor: 'linear-gradient(94.41deg, #F0FCFF -14.28%, #DBF3F8 77.47%);',
+    img: 'https://yy-cloud-oss.oss-cn-beijing.aliyuncs.com/img/yddc.png'
+  },
+  {
+    title: '服务承接',
+    color: '#685B32',
+    role: [37],
+    url: '/pages-sub-service-mangement/taskManagement/index',
+    backgroundColor: 'linear-gradient(273.25deg, #FFF5D1 9.9%, #FFFAE6 99.41%);',
+    img: 'https://yy-cloud-oss.oss-cn-beijing.aliyuncs.com/img/jpdc.png'
+  },
+  {
+    title: '服务待审核',
+    color: '#8E3F3B',
+    role: [4],
+    url: '/pages-sub-service-mangement/servicesToBeReviewed/index',
+    backgroundColor: 'linear-gradient(94.41deg, #FFFCFC -14.28%, #F4E1E0 77.47%);',
+    img: 'https://yy-cloud-oss.oss-cn-beijing.aliyuncs.com/img/kcdc.png'
+  },
+  {
+    title: '服务已审核',
+    color: '#30546E',
+    url: '/pages-sub-service-mangement/serviceReviewed/index',
+    backgroundColor: 'linear-gradient(270.93deg, #D6EDFD 0.8%, #F1F9FF 100%);',
+    img: 'https://yy-cloud-oss.oss-cn-beijing.aliyuncs.com/img/sygs.png'
+  }
+]

+ 47 - 0
src/pages-sub-mine/agreement/index.vue

@@ -0,0 +1,47 @@
+<template>
+  <view class="agreement">
+    <view
+      class="agreement-item"
+      v-for="item in agreementList"
+      :key="item.path"
+      @click="navigatorClick(item)"
+      >{{ item.name }}</view
+    >
+  </view>
+</template>
+
+<script setup lang="ts">
+const agreementList = [
+  {
+    name: '《营销行为小助手平台用户协议》',
+    path: '/pages-sub-packages/agreement/platformUsers'
+  },
+  {
+    name: '《隐私权政策》',
+    path: '/pages-sub-packages/agreement/privacyPolicy'
+  },
+  {
+    name: '《个人信息使用授权书》',
+    path: '/pages-sub-packages/agreement/personalInfoAuth'
+  }
+]
+const navigatorClick = (item: any) => {
+  if (!item.path) return
+  uni.navigateTo({
+    url: item.path
+  })
+}
+</script>
+
+<style lang="scss" scoped>
+.agreement {
+  padding: 30rpx;
+  .agreement-item {
+    height: 100rpx;
+    line-height: 100rpx;
+    font-size: 32rpx;
+    color: #333333;
+    border-bottom: 1px solid #d9d9d9;
+  }
+}
+</style>

+ 129 - 0
src/pages-sub-mine/auth/constants/index.ts

@@ -0,0 +1,129 @@
+interface authType {
+  [key: string]: string | undefined
+}
+
+export const subjectLocationName: authType = {
+  REN_LI_JIA: '人力家',
+  LUO_SHU_YUN: '税邦云', // 永州罗数云, 暂时定为税邦云
+  // 钉灵工通道
+  FEI_YI: '钉灵工-海南飞亿',
+  JIN_YUAN: '金园数科',
+  XIN_TAI_ZI: '钉灵工-河南薪泰梓',
+  ZHENG_QI_ZHI_XING: '安之慧',
+  HUI_QI_YUN: '汇企云',
+  OTHER: '其他'
+}
+
+interface statusType {
+  [key: string]: string[]
+}
+
+export const statusListMap: statusType = {
+  REN_LI_JIA: ['CER_STATUS_2', 'CER_STATUS_4'],
+  LUO_SHU_YUN: ['UN_CERT', 'ADD_MEMBER'],
+  YEE: ['UN_SIGNED', 'TERMINATED'], //
+  FEI_YI: ['UN_SIGNED', 'SIGNED', 'SIGNING', 'UN_CERT'],
+  JIN_YUAN: ['UN_SIGNED', 'SIGNED', 'SIGNING', 'UN_CERT'],
+  XIN_TAI_ZI: ['UN_SIGNED', 'SIGNED', 'SIGNING', 'UN_CERT'],
+  ZHENG_QI_ZHI_XING: ['UN_SIGN', 'SIGN'],
+  HUI_QI_YUN: ['UN_SIGN', 'SIGN']
+}
+
+export const peddingListMap: statusType = {
+  REN_LI_JIA: ['CER_STATUS_1', 'CER_STATUS_3'], // 1, 3
+  LUO_SHU_YUN: ['CHECKED_UNBIND', 'CHECKING_UNBIND', 'UNCHECKED_BIND', 'CHECKING_BIND', 'CERT'], // (12, 14跳转绑卡页面, 可点) (16已绑卡, 跳转人脸采集页面, 采集完毕提交, 可点) (13, 15显示状态, 不能点)
+  YEE: ['SIGNED'], // 1 不可点
+  FEI_YI: ['CERT'], // 1, 3 不可点
+  JIN_YUAN: ['CERT'],
+  XIN_TAI_ZI: ['CERT'],
+  ZHENG_QI_ZHI_XING: ['CERT'], // 安之慧
+  HUI_QI_YUN: ['CERT']
+}
+
+interface anyType {
+  [key: string]: any
+}
+export const notCertMap: anyType = {
+  REN_LI_JIA: ['CER_STATUS_2', 'CER_STATUS_4'],
+  LUO_SHU_YUN: ['UN_CERT'],
+  YEE: ['UN_SIGNED', 'TERMINATED'], //
+  FEI_YI: ['UN_SIGNED'],
+  JIN_YUAN: ['UN_SIGNED'],
+  XIN_TAI_ZI: ['UN_SIGNED'],
+  ZHENG_QI_ZHI_XING: ['UN_SIGN'],
+  HUI_QI_YUN: ['UN_SIGN']
+}
+
+export const subjectLocationStatusName: anyType = {
+  REN_LI_JIA: {
+    CER_STATUS_1: '认证成功',
+    CER_STATUS_2: '认证失败',
+    CER_STATUS_3: '认证中',
+    CER_STATUS_4: '未认证'
+  },
+  LUO_SHU_YUN: {
+    UN_CERT: '未认证',
+    ADD_MEMBER: '已增员',
+    CHECKED_UNBIND: '已认证,未绑卡',
+    CHECKING_BIND: '认证中已绑卡',
+    CHECKING_UNBIND: '认证中未绑卡',
+    CERT: '认证成功',
+    UNCHECKED_BIND: '未认证已绑卡'
+  },
+  YEE: {
+    UN_SIGNED: '未签约',
+    SIGNED: '已签约',
+    TERMINATED: '已解约'
+  },
+  JIN_YUAN: {
+    UN_SIGNED: '未签约',
+    CERT: '认证成功',
+    SIGNED: '已签约',
+    SIGNING: '签约中',
+    UN_CERT: '未认证'
+  },
+  XIN_TAI_ZI: {
+    UN_SIGNED: '未签约',
+    CERT: '认证成功',
+    SIGNED: '已签约',
+    SIGNING: '签约中',
+    UN_CERT: '未认证'
+  },
+  ZHENG_QI_ZHI_XING: {
+    UN_SIGN: '未签约',
+    CERT: '认证成功',
+    SIGN: '已签约'
+  },
+  HUI_QI_YUN: {
+    UN_SIGN: '未签约',
+    CERT: '认证成功',
+    SIGN: '已签约'
+  }
+}
+
+export const signAgreementMap: anyType = {
+  LUO_SHU_YUN: {
+    name: '共享经济个体合作协议',
+    path: '/pages-sub-packages/agreement/taxhelper'
+  },
+  FEI_YI: {
+    name: '共享经济综合服务协议',
+    path: '/pages-sub-packages/agreement/olading'
+  },
+  JIN_YUAN: {
+    name: '共享经济综合服务协议',
+    path: '/pages-sub-packages/agreement/jinyuan'
+  },
+  XIN_TAI_ZI: {
+    name: '共享经济综合服务协议',
+    path: '/pages-sub-packages/agreement/xintaizi'
+  },
+  ZHENG_QI_ZHI_XING: {
+    name: '灵活用工服务合作协议',
+    path: '/pages-sub-packages/agreement/zhengqizhixing'
+  },
+  HUI_QI_YUN: {
+    name: '灵活用工服务合作协议',
+    path: '/pages-sub-packages/agreement/huiqiyun'
+  }
+}

+ 289 - 0
src/pages-sub-mine/auth/hook/useAutnFn.ts

@@ -0,0 +1,289 @@
+// 认证所需函数
+
+import { ref } from 'vue'
+import { isValidPhoneNumber, isValidChineseIDNumber, isValidBankCard } from '@/utils/index'
+import { useLoginStore } from '@/store/login'
+
+// @ts-ignore
+import { startEid } from '../../../mp_ecard_sdk/main.js'
+
+import {
+  saveBaseInfoApi,
+  signCertApi,
+  signAgreementApi,
+  getETokenApi,
+  getETokenResultApi,
+  batchCertApi,
+  saveBankInfoApi
+} from '@/service/modules/auth'
+
+export default function useAuthFn(userInfo: any, radioValue: any, certList: any) {
+  const loginStore = useLoginStore()
+  // 校验信息
+  const checkInfo = () => {
+    if (!userInfo.realname) {
+      uni.showToast({
+        title: '请输入姓名',
+        icon: 'none'
+      })
+      return
+    }
+    if (!userInfo.idCardNumber) {
+      uni.showToast({
+        title: '请输入身份证号',
+        icon: 'none'
+      })
+      return
+    }
+    if (!isValidChineseIDNumber(userInfo.idCardNumber)) {
+      uni.showToast({
+        title: '请输入正确的身份证号',
+        icon: 'none'
+      })
+      return
+    }
+    if (!isValidBankCard(userInfo.bankCardNumber)) {
+      uni.showToast({
+        title: '请检查银行卡号',
+        icon: 'none'
+      })
+      return
+    }
+    if (!isValidPhoneNumber(userInfo.bankPhone)) {
+      uni.showToast({
+        title: '请检查银行绑定手机号',
+        icon: 'none'
+      })
+      return
+    }
+    if (!radioValue.value) {
+      uni.showToast({
+        title: '请选择认证渠道',
+        icon: 'none'
+      })
+      return
+    }
+    return true
+  }
+  // 保存信息
+  const saveBaseInfo = async () => {
+    const data = {
+      userId: loginStore.currentUserInfo.userId,
+      realname: userInfo.realname,
+      idCardNumber: userInfo.idCardNumber,
+      bankCardNumber: userInfo.bankCardNumber,
+      bankPhone: userInfo.bankPhone,
+      subjectLocation: radioValue.value
+    }
+    uni.showLoading({
+      title: '保存信息中',
+      mask: true
+    })
+    const res = await saveBaseInfoApi(data)
+    if (res.code === 0) {
+      loginStore.getUserInfoByCode()
+    }
+    uni.hideLoading()
+  }
+  // 签约/增员
+  const signCertFn = async () => {
+    uni.showLoading({
+      title: '信息校验中',
+      icon: 'loading',
+      mask: true
+    })
+    const data = {
+      userId: loginStore.currentUserInfo.userId,
+      subjectLocation: radioValue.value
+    }
+    const res = await signCertApi(data)
+    uni.hideLoading()
+    if (res.code === 0) {
+      // 如果返回状态为SIGNING 重新发起认证
+      if (res.data?.certStatus === 'SIGNING') {
+        signCertFn()
+      } else {
+        // 签署协议弹窗
+        signAgreementFn()
+      }
+    } else {
+      // 签约/增员失败 展示原因
+      setTimeout(() => {
+        uni.showToast({
+          title: res.msg || '失败,请重试',
+          icon: 'none'
+        })
+      }, 0)
+    }
+  }
+
+  const agereementModal = ref()
+  const agreemetChecked = ref(false)
+  // 签署协议弹窗
+  const signAgreementFn = () => {
+    if (certList.value) {
+      const curr = certList.value.find((item: any) => item.subjectLocation === radioValue.value)
+      // 存在agreementUrl直接去认证
+      if (curr?.agreementUrl) {
+        getETokenAndToVerify()
+        return
+      }
+      agereementModal.value.open()
+    }
+  }
+  const agreementUrl = ref('')
+  // 签署协议
+  const signAgreeSuccess = async () => {
+    uni.showLoading({
+      title: '提交信息中',
+      mask: true
+    })
+    const data = {
+      userId: loginStore.currentUserInfo.userId,
+      agreementUrl: agreementUrl.value,
+      subjectLocation: radioValue.value
+    }
+    const res = await signAgreementApi(data)
+    if (res.code === 0) {
+      // 签署成功
+      // 去走E证通
+      getETokenAndToVerify()
+    } else {
+      uni.showToast({
+        title: res.msg || '签署失败',
+        icon: 'none',
+        duration: 1500
+      })
+      uni.navigateBack()
+    }
+    uni.hideLoading()
+  }
+  // 跳转e证通认证
+  const getETokenAndToVerify = async () => {
+    // 判断是否已经认证过
+    if (loginStore.currentUserInfo.existEidResult) {
+      authCertFn()
+      return
+    }
+    const data = {
+      realName: userInfo.realname,
+      idCard: userInfo.idCardNumber
+    }
+
+    const res = await getETokenApi(data)
+    if (res.code === 0) {
+      const etoken = res.data
+      const param = {
+        data: {
+          token: etoken
+        },
+        verifyDoneCallback(res: any) {
+          console.log('收到核身完成的res', res)
+        }
+      }
+      etoken && startEid(param)
+    } else {
+      uni.showToast({
+        title: '状态获取失败,请重试',
+        icon: 'none'
+      })
+    }
+  }
+
+  // e证通返回
+  const authBackHandler = async (options: any) => {
+    if (options?.path !== 'mp_ecard_sdk/index/index') return
+    const { referrerInfo, scene } = options
+    if (scene === 1038 && referrerInfo?.appId === 'wx0e2cb0b052a91c92') {
+      const { extraData } = referrerInfo
+      if (!extraData) {
+        return uni.showToast({
+          title: '核身失败,请重试',
+          icon: 'none',
+          duration: 3000
+        })
+      }
+      const { token, verifyDone } = extraData
+      if (verifyDone) {
+        uni.showLoading({
+          title: '核身结果获取中',
+          mask: true
+        })
+        const res = await getETokenResultApi(token)
+        uni.hideLoading()
+        if (res.code === 0) {
+          // 核身成功
+          if (res.data.compareCode === 0) {
+            uni.showToast({
+              title: '核身成功',
+              icon: 'none'
+            })
+            // 认证
+            authCertFn()
+          } else {
+            uni.showToast({
+              title: '核身失败',
+              icon: 'none'
+            })
+          }
+        } else {
+          // 查询结果失败
+          uni.showToast({
+            title: res.msg || '未查询到结果',
+            icon: 'none'
+          })
+        }
+      }
+    }
+    console.log('options', options)
+  }
+
+  // 认证
+  const authCertFn = async () => {
+    const data = {
+      userId: loginStore.currentUserInfo.userId,
+      subjectLocation: radioValue.value,
+      token: loginStore.currentUserInfo.certToken
+    }
+    const res = await batchCertApi(data)
+    if (res.code === 0) {
+      saveBankInfo()
+    } else {
+      uni.showToast({
+        title: res.msg || '提交失败,请重试',
+        icon: 'none',
+        duration: 3000
+      })
+    }
+    loginStore.getUserInfoByCode()
+  }
+
+  // 绑定银行卡
+  const saveBankInfo = async () => {
+    const data = {
+      userId: loginStore.currentUserInfo.userId,
+      bankPhone: loginStore.currentUserInfo.bankPhone,
+      bankCardNumber: loginStore.currentUserInfo.bankCardNumber
+    }
+    const res = await saveBankInfoApi(data)
+    if (res.code === 0) {
+      uni.showToast({
+        title: '成功',
+        icon: 'none',
+        duration: 3000
+      })
+    }
+  }
+  return {
+    checkInfo,
+    saveBaseInfo,
+    signCertFn,
+    signAgreementFn,
+    authCertFn,
+    signAgreeSuccess,
+    authBackHandler,
+    agereementModal,
+    agreemetChecked,
+    agreementUrl
+  }
+}

+ 50 - 0
src/pages-sub-mine/auth/hook/useRadio.ts

@@ -0,0 +1,50 @@
+import { statusListMap, peddingListMap, subjectLocationStatusName } from '../constants/index'
+
+export default function useRadio(certList: any) {
+  const getRadio = (subjectLocationItem: string): boolean => {
+    // OTHER 直接返回
+    if (subjectLocationItem === 'OTHER') return false
+    const current = certList.value.find((item: any) => item.subjectLocation === subjectLocationItem)
+    if (!current) return true
+    const certStatus = current.certStatus
+    const callbackStatus = current.callbackStatus
+    // 渠道认证进行中, 不允许操作
+    if (callbackStatus === 'IN_PROGRESS') return false
+    // 显示checkbox的情况
+    const currentList = statusListMap[subjectLocationItem]
+    return currentList.includes(certStatus)
+  }
+
+  const IS_IN_PROGRESS = (subjectLocationItem: string): boolean => {
+    const current = certList.value.find((item: any) => item.subjectLocation === subjectLocationItem)
+    if (!current) return false
+    const callbackStatus = current.callbackStatus
+    // 渠道认证进行中, 不允许操作
+    return callbackStatus === 'IN_PROGRESS'
+  }
+
+  const getStatusText = (subjectLocationItem: string): boolean => {
+    const current = certList.value.find((item: any) => item.subjectLocation === subjectLocationItem)
+    if (!current) return false
+    const certStatus = current.certStatus
+    const callbackStatus = current.callbackStatus
+    // 渠道认证进行中, 不允许操作
+    if (callbackStatus === 'IN_PROGRESS') return false
+    const currentList = peddingListMap[subjectLocationItem]
+    return currentList.includes(certStatus)
+  }
+
+  const getStatusName = (subjectLocationItem: string): string => {
+    const current = certList.value.find((item: any) => item.subjectLocation === subjectLocationItem)
+    if (!current) return ''
+    const certStatus = current.certStatus
+    const currMap = subjectLocationStatusName[subjectLocationItem]
+    return currMap[certStatus]
+  }
+  return {
+    getRadio,
+    IS_IN_PROGRESS,
+    getStatusText,
+    getStatusName
+  }
+}

+ 390 - 0
src/pages-sub-mine/auth/index.vue

@@ -0,0 +1,390 @@
+<template>
+  <view class="auth">
+    <view class="card user-info">
+      <view class="title">个人信息</view>
+      <view class="info-list">
+        <view class="info-item">
+          <view>姓名</view>
+          <uv-input
+            :readonly="getDisabled"
+            border="none"
+            inputAlign="right"
+            v-model="userInfo.realname"
+            placeholder="请输入姓名"
+          />
+        </view>
+        <view class="info-item">
+          <view>手机号</view>
+          <uv-input
+            readonly
+            type="number"
+            border="none"
+            maxlength="11"
+            inputAlign="right"
+            v-model="userInfo.phone"
+            placeholder="请输入手机号"
+          />
+        </view>
+        <view class="info-item">
+          <view><span class="required">*</span>身份证号</view>
+          <uv-input
+            :readonly="getDisabled"
+            type="idcard"
+            border="none"
+            inputAlign="right"
+            v-model="userInfo.idCardNumber"
+            placeholder="请输入身份证号"
+          />
+        </view>
+        <view class="info-item">
+          <view><span class="required">*</span>银行卡号</view>
+          <uv-input
+            :readonly="getDisabled"
+            type="number"
+            border="none"
+            inputAlign="right"
+            v-model="userInfo.bankCardNumber"
+            placeholder="请输入银行卡号"
+          >
+            <template v-slot:suffix>
+              <uv-button
+                type="default"
+                :custom-style="customStyle"
+                plain
+                size="mini"
+                @click="bindCardFn"
+                >绑定银行卡</uv-button
+              ></template
+            >
+          </uv-input>
+        </view>
+        <view class="info-item last-item">
+          <view><span class="required">*</span>银行预留手机号</view>
+          <uv-input
+            type="number"
+            border="none"
+            inputAlign="right"
+            v-model="userInfo.bankPhone"
+            placeholder="请输入银行预留手机号"
+          />
+        </view>
+      </view>
+    </view>
+    <view class="card auth-box">
+      <view class="header">
+        <view class="title">认证渠道</view>
+        <view class="btn">
+          <uv-button type="default" :custom-style="customStyle" plain size="mini"
+            >协议补签</uv-button
+          >
+        </view>
+      </view>
+      <view class="cert-list">
+        <radio-group @change="radioChange">
+          <view
+            class="list"
+            v-for="item in loginStore.currentUserInfo.subjectLocationList"
+            :key="item"
+          >
+            <label>{{ item && subjectLocationName[item] }}</label>
+            <template v-if="getRadio(item)"> <radio :value="item" color="#6eb657" /></template>
+            <template v-if="IS_IN_PROGRESS(item)">
+              <view>已核身</view>
+            </template>
+            <template v-if="getStatusText(item)">
+              <view>{{ getStatusName(item) }}</view>
+            </template>
+          </view>
+        </radio-group>
+      </view>
+      <!-- 提交按钮 -->
+      <view v-if="showSubmitBtn" class="submit">
+        <button class="btn" @click="submitBtn">提 交</button>
+      </view>
+    </view>
+
+    <!-- 协议展示弹窗 -->
+    <uv-modal ref="agereementModal" title="业务合作协议" showCancelButton>
+      <view class="agereement-content">
+        <view class="agreement-policy">
+          为开通共享经济业务,请阅读、勾选签署以下平台业务合作协议。点击勾选协议,即表示您已阅读并同意接受该协议内容。若不同意,请勿勾选。
+        </view>
+
+        <view class="checkbox-bar">
+          <checkbox-group @change="agreemetChecked = !agreemetChecked">
+            <checkbox :checked="agreemetChecked" style="transform: scale(0.6)" color="#6eb657" />
+          </checkbox-group>
+          <view class="read-content"
+            >已阅读并同意<text class="primarily-text" @click="agreementFn"
+              >《 {{ signAgreementMap[radioValue] && signAgreementMap[radioValue].name }}》</text
+            ></view
+          >
+        </view>
+      </view>
+      <template v-slot:confirmButton>
+        <view class="agereement-btns">
+          <button class="agereement-btn cancel" @click="agereementCancel">取消</button>
+          <button class="agereement-btn confirm" @click="agereementConfirm">确定</button>
+        </view>
+      </template>
+    </uv-modal>
+  </view>
+</template>
+
+<script setup lang="ts">
+import { onShow, onLoad, onUnload } from '@dcloudio/uni-app'
+import { ref, reactive, computed } from 'vue'
+import { useLoginStore } from '@/store/login'
+import { useAuth } from '@/store/auth'
+import { subjectLocationName, signAgreementMap, notCertMap } from './constants/index'
+
+import useRadio from './hook/useRadio'
+import useAuthFn from './hook/useAutnFn'
+
+onLoad(() => {
+  uni.onAppShow(authBackHandler)
+})
+onUnload(() => {
+  uni.offAppShow(authBackHandler)
+})
+
+// pinia数据
+const loginStore = useLoginStore()
+const authStore = useAuth()
+
+const currentUserInfo = ref()
+// 提交信息的用户表单
+const userInfo = reactive({
+  realname: loginStore.currentUserInfo?.realname,
+  phone: loginStore.currentUserInfo?.phone,
+  idCardNumber: loginStore.currentUserInfo?.idCardNumber,
+  bankCardNumber: loginStore.currentUserInfo?.bankCardNumber,
+  bankPhone: loginStore.currentUserInfo?.bankPhone
+})
+
+onShow(async () => {
+  await loginStore.getUserInfoByCode()
+  currentUserInfo.value = loginStore.currentUserInfo
+  userInfo.bankCardNumber = loginStore.currentUserInfo?.bankCardNumber
+  userInfo.bankPhone = loginStore.currentUserInfo?.bankPhone
+
+  // agreementUrl有值 是从签名页面返回
+  if (authStore.agreementUrl) {
+    agreementUrl.value = authStore.agreementUrl
+    // 协议签署成功
+    signAgreeSuccess()
+    // 清空签署的协议
+    authStore.setAgreementUrl('')
+  }
+})
+
+// 当前用户的certList数据
+const certList = computed(() => loginStore.currentUserInfo.certList)
+
+// 获取单选框状态
+const { getRadio, IS_IN_PROGRESS, getStatusText, getStatusName } = useRadio(certList)
+const getDisabled = computed(() => {
+  if (!certList?.value?.length) return false
+  let flag = certList.value.every((item: any) => {
+    let currMap = notCertMap[item.subjectLocation]
+    return currMap.includes(item.certStatus)
+  })
+  return !flag
+})
+
+// 是否展示提交按钮
+const showSubmitBtn = computed(() => {
+  const subjectLocationList = loginStore.currentUserInfo.subjectLocationList
+  // 显示radio的情况  存在radio, 即可提交
+  const isRadio = subjectLocationList?.map((item: string) => getRadio(item))
+  return isRadio
+})
+
+const customStyle = {
+  border: '2rpx solid #000',
+  height: '50rpx',
+  background: '#f8f8f8',
+  borderRadius: '10rpx'
+}
+
+// 选中的认证渠道
+const radioValue = ref()
+const radioChange = (e: any) => {
+  radioValue.value = e.detail.value
+}
+// 去绑卡
+const bindCardFn = () => {
+  uni.navigateTo({
+    url: '/pages-sub-mine/bind-card/index'
+  })
+}
+
+// 认证函数
+const {
+  checkInfo,
+  saveBaseInfo,
+  authCertFn,
+  signCertFn,
+  authBackHandler,
+  signAgreeSuccess,
+  agereementModal,
+  agreemetChecked,
+  agreementUrl
+} = useAuthFn(userInfo, radioValue, certList)
+
+const submitBtn = async () => {
+  // 校验信息
+  if (!checkInfo()) return
+  // 保存基本信息
+  await saveBaseInfo()
+  // 发起签约 人力家不需要签约
+  if (radioValue.value === 'REN_LI_JIA') {
+    authCertFn()
+  } else {
+    // 增员
+    signCertFn()
+  }
+}
+
+const agreementFn = () => {
+  uni.navigateTo({
+    url: signAgreementMap[radioValue.value].path
+  })
+}
+
+// 协议确定
+const agereementConfirm = () => {
+  if (!agreemetChecked.value) {
+    return uni.showToast({
+      title: '请先勾选相关协议',
+      icon: 'none'
+    })
+  }
+  uni.navigateTo({
+    url: `/pages-sub-task/signature/index`
+  })
+  agereementCancel()
+}
+
+// 协议弹窗关闭
+const agereementCancel = () => {
+  agereementModal.value.close()
+  agreemetChecked.value = false
+}
+</script>
+
+<style lang="scss" scoped>
+.auth {
+  height: 100vh;
+  background: #f4f4f4;
+  .card {
+    background: #ffffff;
+    padding: 20rpx 30rpx;
+  }
+  .user-info {
+    .title {
+      font-size: 30rpx;
+      font-weight: bolder;
+      color: #000;
+    }
+    .info-list {
+      margin-top: 20rpx;
+      .info-item {
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        padding: 20rpx 0;
+        border-bottom: 1rpx solid #d8d8d8;
+        font-size: 28rpx;
+        line-height: 34rpx;
+        .required {
+          color: red;
+        }
+      }
+      .last-item {
+        border-bottom: none;
+      }
+    }
+  }
+  .auth-box {
+    margin-top: 30rpx;
+    min-height: 350rpx;
+    .header {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      padding: 10rpx 0;
+      line-height: 90rpx;
+      .title {
+        color: #000;
+        font-size: 30rpx;
+        font-weight: bolder;
+      }
+    }
+    .cert-list {
+      margin-top: 20rpx;
+      .list {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        border-bottom: 2rpx solid #ccc;
+        height: 80rpx;
+        line-height: 80rpx;
+      }
+    }
+  }
+  .submit {
+    background: #ffffff;
+    position: absolute;
+    bottom: 0;
+    left: 0;
+    right: 0;
+    z-index: 10000;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    height: 120rpx;
+
+    .btn {
+      background-color: #6eb657;
+      width: 690rpx;
+      color: #fff;
+    }
+  }
+}
+.agereement-content {
+  .agreement-policy {
+    font-size: 30rpx;
+    line-height: 46rpx;
+  }
+  .checkbox-bar {
+    margin-top: 20rpx;
+    display: flex;
+    align-items: center;
+    font-size: 28rpx;
+    font-weight: 400;
+    line-height: 40rpx;
+    .read-content {
+      .primarily-text {
+        color: #6eb657;
+      }
+    }
+  }
+}
+.agereement-btns {
+  display: flex;
+  justify-content: space-between;
+
+  .agereement-btn {
+    border: none;
+    background: none;
+    font-size: 32rpx;
+  }
+  .cancel {
+    color: #666;
+  }
+  .confirm {
+    color: #6eb657;
+  }
+}
+</style>

+ 97 - 0
src/pages-sub-mine/bind-card/index.vue

@@ -0,0 +1,97 @@
+<template>
+  <view class="bind-card">
+    <uv-form labelPosition="left" :model="cardInfo" ref="form">
+      <uv-form-item
+        label="手机号"
+        prop="userInfo.name"
+        borderBottom
+        labelWidth="90"
+        :customStyle="customStyle"
+      >
+        <uv-input
+          maxlength="11"
+          type="number"
+          v-model="cardInfo.bankPhone"
+          border="none"
+          clearable
+        />
+      </uv-form-item>
+      <uv-form-item
+        label="银行卡号"
+        prop="userInfo.name"
+        borderBottom
+        labelWidth="90"
+        :customStyle="customStyle"
+      >
+        <uv-input type="number" v-model="cardInfo.bankCardNumber" border="none" clearable />
+      </uv-form-item>
+    </uv-form>
+    <view class="tips">提示:需绑定本人Ⅰ类银行账户的借记卡,否则无法发放佣金。</view>
+    <button class="btn" @click="submitFn">确定</button>
+  </view>
+</template>
+
+<script setup lang="ts">
+import { useLoginStore } from '@/store/login'
+import { reactive } from 'vue'
+import { isValidPhoneNumber, isValidBankCard } from '@/utils'
+import { saveBankInfoApi } from '@/service/modules/auth'
+
+const loginStore = useLoginStore()
+
+const customStyle = {
+  height: '120rpx'
+}
+
+const cardInfo = reactive({
+  bankPhone: loginStore.currentUserInfo.bankPhone,
+  bankCardNumber: loginStore.currentUserInfo.bankCardNumber
+})
+
+const submitFn = async () => {
+  if (!isValidPhoneNumber(cardInfo.bankPhone)) {
+    return uni.showToast({
+      icon: 'none',
+      title: '请检查手机号'
+    })
+  }
+  if (!isValidBankCard(cardInfo.bankCardNumber)) {
+    return uni.showToast({
+      icon: 'none',
+      title: '请检查银行卡号'
+    })
+  }
+  const data = {
+    userId: loginStore.currentUserInfo.userId,
+    bankPhone: cardInfo.bankPhone,
+    bankCardNumber: cardInfo.bankCardNumber
+  }
+  const res = await saveBankInfoApi(data)
+  if (res.code === 0) {
+    uni.showToast({
+      icon: 'none',
+      title: '保存成功'
+    })
+  }
+  await loginStore.getUserInfoByCode()
+  uni.navigateBack()
+}
+</script>
+
+<style lang="scss" scoped>
+.bind-card {
+  padding: 30rpx;
+  .tips {
+    margin-top: 40rpx;
+    color: #888;
+    font-size: 24rpx;
+    text-align: center;
+  }
+  .btn {
+    margin-top: 150rpx;
+    background-color: #6eb657;
+    border-radius: 50rpx;
+    color: #fff;
+  }
+}
+</style>

+ 92 - 0
src/pages-sub-mine/changePassword/index.vue

@@ -0,0 +1,92 @@
+<template>
+  <view class="form">
+    <uv-form labelPosition="left" :model="form" :rules="rules" ref="formRef" labelWidth="120">
+      <uv-form-item label="新密码" prop="p1" borderBottom>
+        <uv-input v-model="form.p1" type="password" border="none" clearable />
+      </uv-form-item>
+      <uv-form-item label="确认密码" prop="p2" borderBottom>
+        <uv-input v-model="form.p2" type="password" clearable border="none" />
+      </uv-form-item>
+      <uv-form-item>
+        <view>密码由8~16位含有大小写字母、数字、!#$%^&*@符号且不能有三位连续的数字组成</view>
+      </uv-form-item>
+      <uv-button
+        text="提交"
+        color="#6eb657"
+        customStyle="margin-top: 10px"
+        @click="submit"
+      ></uv-button>
+    </uv-form>
+  </view>
+</template>
+
+<script setup lang="ts">
+import { renewPwdApi } from '@/service/modules/mine'
+import { reactive, ref } from 'vue'
+
+import useLogiutFn from '@/hooks/useLoginout'
+
+const form = reactive({
+  p1: '',
+  p2: '',
+  code: '123456'
+})
+let validatePassword = (rule: any, value: any, callback: any) => {
+  var regA = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!#$%^&*@])[\da-zA-Z!#$%^&*@]{8,16}$/ //密码必须是8位以上、必须含有字母、数字、特殊符号
+  var regB = /(123|234|345|456|567|678|789|012)/ //不能有3个连续数字
+  if (!value) {
+    callback(new Error('密码不能为空'))
+  }
+  if (!regA.test(value)) {
+    callback(new Error('密码必须是8~16位、必须含有大小写字母、数字、特殊符号'))
+  } else if (regB.test(value)) {
+    callback(new Error('不能有3个连续数字'))
+  } else {
+    callback()
+  }
+}
+var validateCheckPass = (rule: any, value: any, callback: any) => {
+  if (value !== form.p1) {
+    callback(new Error('两次输入密码不一致'))
+  } else {
+    callback()
+  }
+}
+const rules = reactive({
+  p1: {
+    type: 'string',
+    required: true,
+    trigger: ['blur'],
+    validator: validatePassword
+  },
+  p2: {
+    type: 'string',
+    required: true,
+    validator: validateCheckPass,
+    trigger: ['blur']
+  }
+})
+
+const formRef = ref()
+
+const submit = () => {
+  formRef.value.validate().then(async () => {
+    const res = await renewPwdApi(form)
+    if (res.code === 0) {
+      uni.showToast({
+        icon: 'none',
+        title: '修改成功,请重新登录'
+      })
+      setTimeout(async () => {
+        useLogiutFn()
+      }, 1000)
+    }
+  })
+}
+</script>
+
+<style lang="scss" scoped>
+.form {
+  padding: 30rpx;
+}
+</style>

+ 101 - 0
src/pages-sub-mine/feedback/index.vue

@@ -0,0 +1,101 @@
+<template>
+  <view class="feedback">
+    <view class="feedback-box">
+      <view class="title"> 意见反馈: </view>
+      <textarea
+        @input="onInput"
+        v-model="params.ygContent"
+        class="textarea"
+        :maxlength="500"
+        placeholder-style="color:#C8C8C8"
+        placeholder="您的建议是我们最大的动力"
+      />
+      <view class="count">{{ sumCount }}/500</view>
+    </view>
+    <view class="submit">
+      <view class="s-btn" @click="onSubmit">提 交</view>
+    </view>
+  </view>
+</template>
+
+<script setup lang="ts">
+import { ref, reactive } from 'vue'
+import { useLoginStore } from '@/store/login'
+import { feedbackApi } from '@/service/modules/mine'
+
+const loginStore = useLoginStore()
+
+const params = reactive({
+  ygContent: '',
+  yjUserid: loginStore.currentUserInfo.userId
+})
+
+const sumCount = ref(0)
+function onInput(e: any) {
+  sumCount.value = e.detail.cursor
+}
+
+const onSubmit = async () => {
+  if (!params.ygContent) {
+    return uni.showToast({
+      title: '请输入意见反馈内容',
+      icon: 'none',
+      duration: 800
+    })
+  }
+  uni.showLoading()
+  const res = await feedbackApi(params)
+  uni.hideLoading()
+  if (res.data) {
+    uni.showToast({
+      title: '提交成功',
+      icon: 'none'
+    })
+    setTimeout(() => {
+      uni.navigateBack()
+    }, 1000)
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.feedback {
+  background: #f4f4f4;
+  min-height: 100vh;
+  .feedback-box {
+    padding: 44rpx 54rpx;
+    background: #ffffff;
+    .title {
+      font-size: 30rpx;
+    }
+    .textarea {
+      margin-top: 20rpx;
+      height: 600rpx;
+      width: calc(100%);
+    }
+    .count {
+      width: 100%;
+      text-align: right;
+      color: #dddddd;
+    }
+  }
+  .submit {
+    padding: 16rpx 26rpx;
+    background: #ffffff;
+    position: absolute;
+    bottom: 0;
+    left: 0;
+    right: 0;
+    .s-btn {
+      width: 100%;
+      height: 88rpx;
+      text-align: center;
+      line-height: 88rpx;
+      background: #6eb657;
+      border-radius: 10rpx;
+      color: #ffffff;
+      font-size: 30rpx;
+    }
+  }
+}
+</style>

+ 306 - 0
src/pages-sub-mine/forgotPassword/index.vue

@@ -0,0 +1,306 @@
+<template>
+  <view class="login">
+    <view class="login-form">
+      <uv-form
+        labelPosition="top"
+        labelWidth="80"
+        :labelStyle="labelStyle"
+        :model="formData"
+        ref="formRef"
+        :rules="rules"
+      >
+        <uv-form-item label="手机号" prop="userName" borderBottom>
+          <view class="pbone-input">
+            <input
+              class="login-input"
+              clearable
+              maxlength="11"
+              v-model="formData.userName"
+              border="none"
+              type="number"
+              placeholder="请输入手机号"
+            />
+          </view>
+        </uv-form-item>
+        <uv-form-item label="验证码" prop="code" borderBottom>
+          <view class="pbone-input">
+            <input
+              class="login-input"
+              clearable
+              v-model="formData.code"
+              border="none"
+              type="number"
+              placeholder="请输入验证码"
+            />
+            <view class="code">
+              <uv-code
+                ref="codeRef"
+                @change="codeChange"
+                @start="codeDisabledChange(true)"
+                @end="codeDisabledChange(false)"
+                changeText="Xs"
+              ></uv-code>
+              <uv-button
+                @click="getCode"
+                :disabled="codeDisabled || !codeDisabledType"
+                :text="code"
+                :custom-style="customStyle"
+              />
+            </view>
+          </view>
+        </uv-form-item>
+        <uv-form-item label="密码" prop="p1" borderBottom>
+          <view class="pbone-input">
+            <input
+              class="login-input"
+              clearable
+              v-model="formData.p1"
+              border="none"
+              type="password"
+              placeholder="请输入密码"
+            />
+          </view>
+        </uv-form-item>
+        <uv-form-item label="确认密码" prop="p2" borderBottom>
+          <view class="pbone-input">
+            <input
+              class="login-input"
+              clearable
+              v-model="formData.p2"
+              border="none"
+              type="password"
+              placeholder="请输入密码"
+            />
+          </view>
+        </uv-form-item>
+      </uv-form>
+      <view class="tips">
+        <text
+          >密码由8~16位含有大小写字母、数字、!#$%^&*@符号且不能有三位连续的数字组成(如123)</text
+        >
+      </view>
+
+      <view class="login-btn">
+        <button class="btn" @click="submit">提交</button>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script setup lang="ts">
+import { reactive, ref, computed } from 'vue'
+import { getMobileUpdApi, postUserUpdApi } from '@/service/modules/login'
+import { isValidPhoneNumber } from '@/utils'
+
+const labelStyle = {
+  fontSize: '32rpx',
+  fontWeight: 600,
+  color: '#333'
+}
+let validatePassword = (rule: any, value: any, callback: any) => {
+  var regA = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!#$%^&*@])[\da-zA-Z!#$%^&*@]{8,16}$/ //密码必须是8位以上、必须含有字母、数字、特殊符号
+  var regB = /(123|234|345|456|567|678|789|012)/ //不能有3个连续数字
+  if (!value) {
+    callback(new Error('密码不能为空'))
+  }
+  if (!regA.test(value)) {
+    callback(new Error('密码必须是8~16位、必须含有大小写字母、数字、特殊符号'))
+  } else if (regB.test(value)) {
+    callback(new Error('不能有3个连续数字'))
+  } else {
+    callback()
+  }
+}
+var validateCheckPass = (rule: any, value: any, callback: any) => {
+  if (value !== formData.p1) {
+    callback(new Error('两次输入密码不一致'))
+  } else {
+    callback()
+  }
+}
+
+const rules = reactive({
+  userName: {
+    type: 'string',
+    required: true,
+    trigger: ['blur']
+  },
+  code: {
+    type: 'string',
+    required: true,
+    trigger: ['blur']
+  },
+
+  p1: {
+    type: 'string',
+    required: true,
+    trigger: ['blur'],
+    validator: validatePassword
+  },
+  p2: {
+    type: 'string',
+    required: true,
+    validator: validateCheckPass,
+    trigger: ['blur']
+  }
+})
+
+const formRef = ref()
+const formData = reactive({
+  userName: '',
+  p1: '',
+  p2: '',
+  code: ''
+})
+
+// 验证码
+const code = ref('获取验证码')
+const codeRef = ref()
+const codeDisabled = ref(false)
+function codeChange(text: string) {
+  code.value = text
+}
+const codeDisabledChange = (flag: boolean) => {
+  codeDisabled.value = flag
+}
+
+let codeDisabledType = computed(() => {
+  return formData.userName && !codeDisabled.value
+})
+// 获取验证码按钮样式
+const customStyle = {
+  height: '64rpx',
+  width: '200rpx',
+  background: 'rgba(110,182,87, .1)',
+  borderRadius: '16rpx',
+  color: '#6eb657',
+  fontWeight: 500,
+  lineHeight: '64rpx',
+  fontSize: '28rpx'
+}
+async function getCode() {
+  if (!isValidPhoneNumber(formData.userName)) {
+    return uni.showToast({
+      title: '请检查手机号码格式',
+      icon: 'none'
+    })
+  }
+
+  // 获取验证码
+  uni.showLoading({
+    title: '正在获取验证码'
+  })
+  const res = await getMobileUpdApi(formData.userName)
+  uni.hideLoading()
+  if (!res.data) {
+    uni.showToast({
+      title: res.msg,
+      icon: 'none'
+    })
+  } else {
+    uni.showToast({
+      title: res.msg,
+      icon: 'none'
+    })
+  }
+  codeRef.value.start()
+}
+
+const submit = () => {
+  if (!isValidPhoneNumber(formData.userName)) {
+    return uni.showToast({
+      title: '请检查手机号码格式',
+      icon: 'none'
+    })
+  }
+
+  formRef.value.validate().then(async () => {
+    const res = await postUserUpdApi(formData)
+
+    if (res.code === 0) {
+      uni.showToast({
+        icon: 'none',
+        title: '修改成功'
+      })
+      setTimeout(() => {
+        uni.reLaunch({
+          url: '/pages/login/index'
+        })
+      }, 1000)
+    }
+  })
+}
+</script>
+
+<style lang="scss" scoped>
+.login {
+  padding: 0 50rpx;
+}
+.login-bg {
+  position: absolute;
+  z-index: -333;
+  top: 0;
+  left: 0;
+  right: 0;
+  height: 800rpx;
+  background: linear-gradient(#f8f8f0 0%, rgba(255, 255, 255, 0) 100%);
+}
+.login-title {
+  margin-top: 300rpx;
+  color: #333;
+  font-size: 56rpx;
+  font-weight: 500;
+}
+.login-form {
+  margin-top: 80rpx;
+  .pbone-input {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+  }
+  .forgot-password {
+    color: #999;
+  }
+  .login-input {
+    margin: 20rpx 0 0 10rpx;
+  }
+  :deep(.uv-form-item) {
+    margin-bottom: 40rpx;
+  }
+  .agreement {
+    display: flex;
+    font-size: 26rpx;
+    font-weight: 400;
+    line-height: 40rpx;
+    .read-content {
+      .primarily-text {
+        color: #6eb657;
+      }
+    }
+  }
+  .login-btn {
+    margin-top: 70rpx;
+    .btn {
+      width: 640rpx;
+      height: 96rpx;
+      border-radius: 200rpx;
+      background-color: #6eb657;
+      text-align: center;
+      color: #fff;
+      font-size: 40rpx;
+      font-weight: 600;
+    }
+  }
+  .login-password {
+    margin-top: 50rpx;
+    color: #999;
+    font-size: 32rpx;
+    text-align: center;
+    font-weight: 400;
+    line-height: 60rpx;
+  }
+}
+.tips {
+  color: #666;
+}
+</style>

+ 220 - 0
src/pages-sub-mine/integral-rules/index.vue

@@ -0,0 +1,220 @@
+<template>
+  <view class="integral-rules">
+    <image class="rules-top-img" :src="imgBg" />
+    <view class="table-box">
+      <view class="table-header">
+        <view class="table-tab" style="border-right: 1rpx solid #ffffff">获取途径</view>
+        <view class="table-tab">获得积分</view>
+      </view>
+      <image
+        class="change-btn"
+        src="../../static/images/common/change-btn.png"
+        @click="changeBtn"
+      />
+      <view class="table-con">
+        <view class="table-bg">
+          <view v-for="item in tableData" :key="item.id" class="table-item">
+            <view class="item-left">
+              <text>{{ item.taskTypeName }} </text>
+              <image
+                src="https://yy-cloud-oss.oss-cn-beijing.aliyuncs.com/img/tips.png"
+                alt=""
+                class="tips"
+                @click="descClick(item.taskTypeName)"
+              />
+            </view>
+            <text>+{{ item.score }}积分</text>
+          </view>
+        </view>
+      </view>
+    </view>
+
+    <uv-popup ref="popup" mode="bottom" round="10">
+      <view class="info">
+        <view class="title">
+          <text>{{ select?.value }}</text>
+          <u-icon name="close" color="#000" size="28" @click="popupClose"></u-icon>
+        </view>
+        <view class="cont">
+          {{ select?.description }}
+        </view>
+        <view class="btn" @click="popupClose"> 知道了 </view>
+      </view>
+    </uv-popup>
+
+    <uv-picker
+      ref="picker"
+      :columns="[drugentList]"
+      keyName="label"
+      :defaultIndex="defaultIndex"
+      @confirm="confirm"
+    />
+  </view>
+</template>
+
+<script setup lang="ts">
+import { integralRulesApi, getTaskTypeDeptList } from '@/service/modules/integralRules'
+import { onShareAppMessage } from '@dcloudio/uni-app'
+import { ref } from 'vue'
+
+const imgBg = 'https://yy-cloud-oss.oss-cn-beijing.aliyuncs.com/img/jy/integralRules.png'
+onShareAppMessage(() => {
+  var pages = getCurrentPages()
+  var prevPage = pages[pages.length - 1]
+  return {
+    title: '积分规则',
+    path: prevPage.route
+  }
+})
+
+// 获取任务规则描述
+const descriptionMap = ref<any[]>([])
+async function getMap() {
+  let res = await integralRulesApi.getDict()
+  descriptionMap.value = res.data
+}
+getMap()
+const drugentList = ref<any[]>([])
+// 获取药企列表
+async function getDrugentList() {
+  let res = await getTaskTypeDeptList()
+  drugentList.value = res.data
+
+  if (drugentList.value.length) {
+    getTaskTypeScoreList(drugentList.value[0].value)
+  }
+}
+getDrugentList()
+
+const tableData = ref<any[]>([])
+async function getTaskTypeScoreList(ruleId: string | number) {
+  let res = await integralRulesApi.getTaskTypeListByRuleId(ruleId)
+  tableData.value = res.data
+}
+
+const select = ref()
+const popup = ref()
+const descClick = (name: any) => {
+  let item = descriptionMap.value.find((item) => item.value === name)
+  select.value = item
+  popup.value.open()
+}
+const popupClose = () => popup.value.close()
+
+const defaultIndex = ref()
+const picker = ref()
+const changeBtn = () => {
+  picker.value.open()
+}
+const confirm = (e: any) => {
+  defaultIndex.value = e.indexs
+  getTaskTypeScoreList(e.value[0].value)
+}
+</script>
+
+<style lang="scss" scoped>
+.integral-rules {
+  position: relative;
+  left: 0;
+  right: 0;
+  top: 0;
+  .change-btn {
+    position: fixed;
+    top: 156rpx;
+    right: -16rpx;
+    width: 212rpx;
+    height: 96rpx;
+  }
+  .rules-top-img {
+    position: absolute;
+    top: 0;
+    right: 0;
+    left: 0;
+    width: 750rpx;
+    height: 526rpx;
+  }
+  .table-box {
+    position: absolute;
+    top: 526rpx;
+    right: 0;
+    left: 0;
+    min-height: 100vh;
+    background: #019cd0;
+    .table-header {
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      height: 120rpx;
+      .table-tab {
+        width: 50%;
+        text-align: center;
+        color: #ffffff;
+        font-size: 36rpx;
+      }
+    }
+    .table-con {
+      padding: 0 26rpx;
+      padding-bottom: 50rpx;
+      .table-bg {
+        background: #ffffff;
+        padding: 46rpx;
+        box-shadow: inset 0px 8rpx 54rpx 0px #6edbff;
+        .table-item {
+          color: #733d7f;
+          font-size: 32rpx;
+          display: flex;
+          align-items: center;
+          justify-content: space-between;
+          margin-top: 42rpx;
+          .item-left {
+            display: flex;
+            align-items: center;
+            .tips {
+              width: 30rpx;
+              height: 30rpx;
+              margin-left: 10rpx;
+            }
+          }
+          &:first-child {
+            margin-top: 0;
+          }
+        }
+      }
+    }
+  }
+}
+
+.info {
+  padding: 30rpx;
+  position: relative;
+  .title {
+    display: flex;
+    justify-content: space-between;
+    margin-bottom: 60rpx;
+    text {
+      color: #000;
+      font-weight: 600;
+      font-size: 36rpx;
+    }
+  }
+  .cont {
+    min-height: 20vh;
+    color: #666666;
+    font-size: 30rpx;
+    line-height: 42rpx;
+    margin-bottom: 60rpx;
+  }
+  .btn {
+    background-color: #f1f1f1;
+    height: 80rpx;
+    text-align: center;
+    line-height: 80rpx;
+    color: #333333;
+    font-size: 30rpx;
+    position: absolute;
+    width: 700rpx;
+    left: 25rpx;
+    bottom: 50rpx;
+  }
+}
+</style>

+ 84 - 0
src/pages-sub-mine/quiz/index.vue

@@ -0,0 +1,84 @@
+<!--
+ * @desc 我的-合规测评
+ * @author linyuanjie
+ * @date 2023/10/19
+-->
+
+<template>
+  <view class="quiz-page">
+    <view
+      v-for="(quizItem, index) in testResults"
+      :key="index"
+      class="quiz-item"
+      @click="detailFn(quizItem)"
+    >
+      <view class="quiz-list">
+        <view class="title">
+          <text>{{ quizItem.quiz.title }}</text>
+          <text v-if="quizItem.valid" class="success">(已通过)</text>
+          <text v-else class="danger">(未通过)</text>
+        </view>
+        <view class="content">
+          总分:<text class="mr40">{{ quizItem?.quiz?.expand?.totalMark }}</text
+          >测试分数:<text>{{ quizItem.finalMark || '无' }}</text>
+        </view>
+      </view>
+    </view>
+  </view>
+</template>
+<script setup lang="ts">
+import { getQuizPltTextResultApi } from '@/service/modules/quiz'
+import { onLoad } from '@dcloudio/uni-app'
+import { ref } from 'vue'
+
+const detailFn = (row: any) => {
+  uni.navigateTo({
+    url: `/pages-sub-mine/quizDetail/index?id=${row.quiz.quizId}`
+  })
+}
+onLoad(() => {
+  getPltQuizResultFn()
+})
+
+const testResults = ref<any[]>([])
+const getPltQuizResultFn = async () => {
+  const res = await getQuizPltTextResultApi()
+  if (res.code === 0) {
+    testResults.value = res.data.testResults || []
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.quiz-page {
+  padding: 24rpx;
+  min-height: 100vh;
+  background-color: #f6f6f6;
+  .quiz-item {
+    padding: 30rpx;
+    background-color: #fff;
+    margin-bottom: 30rpx;
+    border-radius: 12rpx;
+    box-shadow: 0px 4rpx 4rpx 0px rgba(0, 0, 0, 0.05);
+
+    .quiz-list {
+      .title {
+        font-size: 36rpx;
+        color: #333;
+        .success {
+          font-size: 32rpx;
+          color: #6eb657;
+        }
+        .danger {
+          font-size: 32rpx;
+          color: #edb252;
+        }
+      }
+      .content {
+        margin-top: 20rpx;
+        font-size: 32rpx;
+      }
+    }
+  }
+}
+</style>

+ 184 - 0
src/pages-sub-mine/quizDetail/index.vue

@@ -0,0 +1,184 @@
+<template>
+  <view class="quiz-detail">
+    <view class="quiz-title">
+      {{ quiz?.title }}
+    </view>
+    <view class="quiz-list">
+      <view class="question-item" v-for="(item, index) in quizItems" :key="item.itemId">
+        <view class="question-title">{{ index + 1 }}.{{ item.label }}</view>
+        <uv-radio-group v-model="item.answered" placement="column" :disabled="submitted">
+          <uv-radio
+            class="question-radio"
+            :customStyle="{ margin: '8px' }"
+            v-for="(iten, indey) in item.options"
+            :key="indey"
+            :label="iten.text"
+            :name="iten.no"
+          >
+            <template v-if="iten?.type === 'text'">
+              {{ iten.text }}
+            </template>
+            <template v-if="iten?.type === 'img'">
+              <uv-image
+                :src="getImgUrl(iten?.text)"
+                width="210rpx"
+                height="180rpx"
+                @click.stop.self="preImg(iten?.text)"
+              />
+            </template>
+          </uv-radio>
+        </uv-radio-group>
+      </view>
+    </view>
+    <view class="sign-up-btn">
+      <template v-if="!submitted">
+        <button class="btn" @click="submitFn">提 交</button>
+      </template>
+      <template v-else>
+        <div class="result">
+          {{ quiz?.expand?.finalMark >= quiz?.expand?.passingMark ? '考试通过' : '考试不通过' }}
+          <text>考试成绩: {{ quiz?.expand?.finalMark }}</text>
+        </div>
+      </template>
+    </view>
+  </view>
+</template>
+
+<script setup lang="ts">
+import { onLoad } from '@dcloudio/uni-app'
+import { quizDetailApi, quizResultCreateApi } from '@/service/modules/quiz'
+import { ref } from 'vue'
+
+const id = ref('')
+onLoad((e: any) => {
+  if (e?.id) {
+    id.value = e.id
+    getDetail()
+  }
+})
+
+const quizItems = ref<any[]>([])
+const quiz = ref()
+const submitted = ref(false)
+
+const getDetail = async () => {
+  const res = await quizDetailApi({ quizId: id.value })
+  if (res.code === 0) {
+    if (!res.data.submitted) {
+      res.data.items.forEach((item: any) => (item.answered = ''))
+    }
+    // 是否已经提交
+    submitted.value = res.data.submitted
+    quizItems.value = res.data.items
+    quiz.value = res.data.quiz
+  }
+}
+
+const getImgUrl = (path: string) => import.meta.env.VITE_APP_URL + path
+
+const preImg = (path: string) => {
+  const url = getImgUrl(path)
+  const arr = [url]
+  uni.previewImage({
+    urls: arr
+  })
+}
+
+const submitFn = async () => {
+  const flag = quizItems.value?.every((item: any) => item.answered)
+  if (!flag) {
+    return uni.showToast({
+      title: '请检查是否遗漏',
+      icon: 'none',
+      duration: 800
+    })
+  }
+
+  let finalMark = quizItems.value.reduce((accumulator, item) => {
+    if (item.answer === item.answered) {
+      return accumulator + item.mark
+    }
+    return accumulator + 0
+  }, 0)
+
+  const obj = {
+    quizId: quiz.value.quizId,
+    title: quiz.value.title,
+    itemQty: quiz.value.expand.itemQty,
+    totalMark: quiz.value.expand.totalMark,
+    passingMark: quiz.value.expand.passingMark,
+    finalMark: finalMark,
+    items: quizItems.value
+  }
+  const res = await quizResultCreateApi({ quizResults: [obj] })
+  if (res.code === 0) {
+    uni.showToast({
+      title: '提交成功',
+      icon: 'none',
+      duration: 800
+    })
+    setTimeout(() => {
+      uni.navigateBack()
+    }, 1000)
+    // getDetail()
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.quiz-detail {
+  .quiz-title {
+    text-align: center;
+    margin: 20rpx auto;
+    font-weight: 600;
+    font-size: 36rpx;
+  }
+  .quiz-list {
+    margin-top: 30rpx;
+    padding-bottom: 120rpx;
+
+    .question-item {
+      .question-title {
+        font-weight: 36rpx;
+        margin-bottom: 20rpx;
+      }
+      padding: 40rpx 24rpx;
+      background-color: #fff;
+      border-bottom: 1px solid #f6f6f6;
+    }
+  }
+  .sign-up-btn {
+    position: fixed;
+    background-color: #fff;
+    bottom: 0;
+    left: 0;
+    right: 0;
+    height: 120rpx;
+    .btn {
+      width: 690rpx;
+      margin: 20rpx 30rpx;
+      height: 70rpx;
+      text-align: center;
+      line-height: 70rpx;
+      font-size: 30rpx;
+      color: #fff;
+      background-color: #6eb657;
+      border-radius: 20rpx;
+    }
+    .result {
+      width: 690rpx;
+      margin: 20rpx 30rpx;
+      height: 70rpx;
+      text-align: center;
+      line-height: 70rpx;
+      font-size: 30rpx;
+      color: #fff;
+      background-color: #ccc;
+      border-radius: 20rpx;
+    }
+    .disabled {
+      background-color: #ccc;
+    }
+  }
+}
+</style>

+ 289 - 0
src/pages-sub-mine/task-completion-records/index.vue

@@ -0,0 +1,289 @@
+<template>
+  <view class="task-completion-records">
+    <view class="header">
+      <view @click="showDatePicker">
+        <text>{{ dateStr.year }} 年 </text>
+        <text>{{ dateStr.month }} 月 </text>
+      </view>
+      <uv-icon v-if="dateStr.year" name="close-circle" color="#333" @click="clearDate" />
+    </view>
+    <view v-if="dataList.length" class="list-box">
+      <view class="list-item" v-for="item in dataList" :key="item.id" @click="onDetail(item.id)">
+        <view
+          class="list-top"
+          :class="item.realFlag == '1' || item.taskStatus == '4' ? 'disables' : ''"
+        >
+          <view class="time">
+            <image
+              v-if="item.realFlag == '1' || item.taskStatus == '4'"
+              class="clock-icon"
+              src="../../static/images/common/clock2.png"
+            />
+            <image v-else class="clock-icon" src="../../static/images/common/clock.png" />
+            <text>{{ formatTime(item.createTime) }}</text>
+          </view>
+          <view
+            class="reason"
+            v-if="item.realFlag == '1' || item.taskStatus == '4'"
+            @click.stop="showReason(item)"
+          >
+            <text>审核不通过</text>
+            <image src="https://yy-cloud-oss.oss-cn-beijing.aliyuncs.com/img/wenhaoxiao1.png" />
+          </view>
+          <uv-icon
+            name="arrow-right"
+            :color="item.realFlag == '1' || item.taskStatus == '4' ? '#999999' : '#fff'"
+            size="16"
+          />
+        </view>
+        <view class="info">
+          <view class="info-name">
+            {{ item.taskTypeId }}
+          </view>
+          <view class="num"> +{{ item.score }}积分 </view>
+        </view>
+      </view>
+    </view>
+    <noData v-else />
+
+    <uv-datetime-picker
+      ref="datetimePicker"
+      v-model="dateValue"
+      mode="year-month"
+      @confirm="dateConfirm"
+    />
+
+    <uv-popup ref="popup" mode="bottom" round="10">
+      <view class="info">
+        <view class="title">
+          <text>拒绝原因</text>
+          <u-icon name="close" color="#000" size="28" @click="popupClose"></u-icon>
+        </view>
+        <view class="cont">
+          {{ reason }}
+        </view>
+        <view class="btn" @click="popupClose"> 关 闭 </view>
+      </view>
+    </uv-popup>
+  </view>
+</template>
+
+<script setup lang="ts">
+import dayjs from 'dayjs'
+import formatTime from '@/utils/formatTime'
+import { reactive, ref } from 'vue'
+import { getTaskCompletionList } from '@/service/modules/getTask'
+import { onReachBottom } from '@dcloudio/uni-app'
+import noData from '@/components/noData/index.vue'
+
+class Params {
+  taskRuleId = ''
+  total = -1
+  current = 1
+  size = 20
+}
+const params = ref(new Params())
+
+const dataList = ref<any[]>([])
+async function getList() {
+  uni.showLoading({
+    title: '加载中...'
+  })
+  let res = await getTaskCompletionList(params.value)
+  if (res.data) {
+    uni.hideLoading()
+    params.value.total = res.data.total
+    dataList.value = dataList.value.concat(res.data.records)
+  }
+}
+getList()
+
+// 底部
+onReachBottom(() => {
+  if (dataList.value.length === params.value.total) return
+  params.value.current++
+  getList()
+})
+
+const onDetail = (id: string) => {
+  uni.navigateTo({
+    url: `/pages/task/task-detail/index?id=${id}`
+  })
+}
+
+const popup = ref()
+const reason = ref('')
+const showReason = (item: any) => {
+  console.log('item', item)
+
+  let str =
+    item.approval_info ||
+    item.report_one_approval_info ||
+    item.report_drug_approval_info ||
+    item.taskStatusInfo ||
+    item?.checkState?.checkMsg
+
+  reason.value = `"${str}"`
+
+  popup.value.open()
+}
+const popupClose = () => popup.value.close()
+
+// 日期选择
+const datetimePicker = ref()
+const dateValue = ref(Number(new Date()))
+const showDatePicker = () => datetimePicker.value.open()
+
+const dateStr = reactive({
+  year: '',
+  month: ''
+})
+
+const dateConfirm = (e: any) => {
+  const date = dayjs(e.value).format('YYYY-MM')
+  let arr = date.split('-')
+  params.value = new Params()
+  params.value.taskRuleId = date
+  dateStr.year = arr[0]
+  dateStr.month = arr[1]
+  dataList.value = []
+  getList()
+}
+const clearDate = () => {
+  dateStr.year = ''
+  dateStr.month = ''
+  params.value = new Params()
+  dataList.value = []
+  getList()
+}
+</script>
+
+<style lang="scss" scoped>
+.task-completion-records {
+  .header {
+    position: fixed;
+    top: 0;
+    left: 0;
+    right: 0;
+    z-index: 10;
+    display: flex;
+    justify-content: flex-end;
+    align-items: center;
+    height: 80rpx;
+    background: #ffffff;
+    border-bottom: 1rpx solid #f2f2f2;
+    font-size: 30rpx;
+    padding-right: 35rpx;
+    text {
+      margin-right: 20rpx;
+    }
+  }
+  .list-box {
+    margin-top: 80rpx;
+    padding: 30rpx;
+    background: #fafafa;
+    .list-item {
+      border-radius: 16rpx;
+      margin-bottom: 24rpx;
+      height: 200rpx;
+      background-color: #ffffff;
+
+      .list-top {
+        height: 80rpx;
+        background-color: #6eb657;
+        border-top-left-radius: 16rpx;
+        border-top-right-radius: 16rpx;
+        display: flex;
+        padding: 0 30rpx;
+        justify-content: space-between;
+        align-items: center;
+        .time {
+          display: flex;
+          align-items: center;
+          image {
+            width: 40rpx;
+            height: 40rpx;
+          }
+          text {
+            margin-left: 16rpx;
+            color: #fff;
+            font-size: 26rpx;
+            font-weight: 500;
+            line-height: 40rpx;
+          }
+        }
+        .reason {
+          color: #999999;
+          font-size: 26rpx;
+          display: flex;
+          align-items: center;
+          image {
+            width: 24rpx;
+            margin-left: 12rpx;
+            height: 24rpx;
+          }
+        }
+      }
+      .disables {
+        background-color: #f5f5f5;
+        .time {
+          text {
+            color: #999;
+          }
+        }
+      }
+      .info {
+        height: 120rpx;
+        padding: 0 30rpx;
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        .info-name {
+          color: #333;
+          font-weight: 400;
+          font-size: 32rpx;
+        }
+        .num {
+          color: #6eb657;
+          font-weight: 500;
+          size: 30rpx;
+        }
+      }
+    }
+  }
+}
+
+.info {
+  padding: 30rpx;
+  position: relative;
+  .title {
+    display: flex;
+    justify-content: space-between;
+    margin-bottom: 60rpx;
+    text {
+      color: #000;
+      font-weight: 600;
+      font-size: 36rpx;
+    }
+  }
+  .cont {
+    min-height: 20vh;
+    color: #666666;
+    font-size: 30rpx;
+    line-height: 42rpx;
+    margin-bottom: 60rpx;
+  }
+  .btn {
+    background-color: #f1f1f1;
+    height: 80rpx;
+    text-align: center;
+    line-height: 80rpx;
+    color: #333333;
+    font-size: 30rpx;
+    position: absolute;
+    width: 700rpx;
+    left: 25rpx;
+    bottom: 50rpx;
+  }
+}
+</style>

+ 168 - 0
src/pages-sub-mine/user-info/index.vue

@@ -0,0 +1,168 @@
+<template>
+  <view class="user-info">
+    <view class="card">
+      <view class="info-item" @click="avatarUpload">
+        <view>头像</view>
+        <view class="avatar">
+          <uv-image :src="userInfo?.avatar" shape="circle" width="90rpx" height="90rpx" />
+          <uv-icon name="arrow-right" size="18" color="#bbb" />
+        </view>
+      </view>
+      <view class="info-item">
+        <view>姓名</view>
+        <view>{{ userInfo?.realname }}</view>
+      </view>
+      <view class="info-item">
+        <view>身份证号</view>
+        <view>{{ userInfo?.idCardNumber }}</view>
+      </view>
+      <view class="info-item">
+        <view>手机号</view>
+        <view>{{ userInfo?.phone }}</view>
+      </view>
+    </view>
+    <view class="card">
+      <view class="info-item">
+        <view>角色</view>
+        <view>{{ getRolesName(userInfo?.roles) }}</view>
+      </view>
+      <view class="info-item">
+        <view>公司名称</view>
+        <view>{{ userInfo?.drugEntName }}</view>
+      </view>
+    </view>
+    <view class="card signature-box">
+      <view>个性签名</view>
+      <textarea
+        class="textarea"
+        v-model="params.userSign"
+        placeholder="请输入个性签名..."
+        auto-height
+      />
+    </view>
+    <view class="submit">
+      <view class="btn" @click="submitClick">保 存</view>
+    </view>
+  </view>
+</template>
+
+<script setup lang="ts">
+import { useLoginStore } from '@/store/login'
+import { reactive, computed } from 'vue'
+import { RoleEnum } from '@/constants/rolesType'
+import { fileUpload } from '@/service/modules/uploadFile'
+import { updateUserInfo } from '@/service/modules/userInfo'
+
+const loginStore = useLoginStore()
+const userInfo: any = computed(() => loginStore.currentUserInfo)
+
+const params = reactive({
+  userId: userInfo.value.userId,
+  userSign: userInfo.value.userSign || '',
+  avatar: userInfo.value.userSign || ''
+})
+
+const getRolesName = (roles: number[] | null) => {
+  if (!roles?.length) return
+  return RoleEnum[roles[0]]
+}
+
+// 头像上传
+function avatarUpload() {
+  uni.chooseImage({
+    count: 1,
+    sizeType: ['original', 'compressed'],
+    sourceType: ['album'],
+    success(res: any) {
+      uni.uploadFile({
+        url: fileUpload(),
+        filePath: res.tempFilePaths[0],
+        name: 'file',
+        header: {
+          Authorization: `Bearer ${loginStore.accessToken}`
+        },
+        success: (uploadFileRes: any) => {
+          let { data } = JSON.parse(uploadFileRes.data)
+          const url = import.meta.env.VITE_APP_URL + data.url
+          params.avatar = url
+          submitClick()
+        },
+        fail(e) {
+          console.log(e)
+        }
+      })
+    }
+  })
+}
+async function submitClick() {
+  const res = await updateUserInfo(params)
+  if (res.code === 0) {
+    loginStore.getUserInfoByCode()
+    uni.showToast({
+      title: '更新成功',
+      icon: 'success'
+    })
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.user-info {
+  background-color: #f4f4f4;
+  .card {
+    padding: 0 30rpx;
+    background-color: #fff;
+    margin-bottom: 20rpx;
+    :last-child {
+      border-bottom: none;
+    }
+  }
+
+  .info-item {
+    padding: 20rpx 0;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    border-bottom: 2rpx solid #d8d8d8;
+    line-height: 40rpx;
+    .avatar {
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      width: 130rpx;
+    }
+    .input-box {
+      text-align: right;
+    }
+  }
+  .signature-box {
+    padding: 22rpx 40rpx;
+    background: #ffffff;
+    .textarea {
+      width: 660rpx;
+      padding-top: 30rpx;
+      min-height: 400rpx;
+    }
+  }
+  .submit {
+    padding: 16rpx 26rpx;
+    background: #ffffff;
+    position: absolute;
+    bottom: 0;
+    left: 0;
+    right: 0;
+    z-index: 10000;
+    .btn {
+      width: 100%;
+      height: 88rpx;
+      text-align: center;
+      line-height: 88rpx;
+      background: #6eb657;
+      border-radius: 10rpx;
+      color: #ffffff;
+      font-size: 30rpx;
+    }
+  }
+}
+</style>
+rpx

+ 208 - 0
src/pages-sub-packages/agreement/huiqiyun.vue

@@ -0,0 +1,208 @@
+<template>
+  <view class="pl20 pr20 pb20">
+    <p class="title mt20 mb20 bold-text tc">共享平台注册经营者注册协议书</p>
+    <p class="bold-text">甲方: 河南临登网络科技有限公司</p>
+    <p class="bold-text">乙 方:</p>
+    <p class="bold-text">身份证号:</p>
+    <p class="bold-text">电话:</p>
+    <p>
+      继续注册成为平台注册经营者前,请先阅读本协议提示条款:
+      欢迎您与我司【河南临登网络科技有限公司】共同签署本《注册协议书》(下称“本协议”)成为本平台的注册经营者,以本平台为业务匹配渠道,个人从事生产经营活动,并取得相应的收益。
+      【审慎阅读】为维护您的自身权益,在您点击同意本协议之前,请认真阅读本协议,务必审慎阅读、充分理解各条款内容。<span
+        class="bold-text"
+        >【签约】当您按照提示填写您的信息且完成全部申请后,即表示您已充分阅读、理解并接受本协议的全部内容,并与我司达成一致意见,成为我司的合作人员,此后您不得以未阅读/不理解本协议内容或类似言辞做任何形式的抗辩。阅读本协议的过程中,如果您不理解相关内容应及时联系我公司,如您不同意本协议或其中任何条款约定,请您立即停止任何的申请/注册程序。【合作关系】</span
+      >
+      您与我司通过本协议建立平等的业务承揽合作关系,适用《合同法》、《民法总则》和其他民事法律,不适用《劳动法》、《劳动合同法》。
+    </p>
+    <p>协议条款:</p>
+    <p>
+      根据国家法律、法规和有关规定,双方按照平等自愿、诚实信用的原则,就您通过我司运营平台承揽发包商提供的业务,从事生产经营活动等事宜订立本服务合作协议。
+    </p>
+    <p>第一条服务内容</p>
+    <p>
+      1.1
+      因我司所运营平台上的发包商(即在我司所运营的平台上注册的单位客户,后文简称为“发包商”)有寻求个人经营者承担一定工作任务的需求,您自愿以平台为业务渠道从事生产经营活动,为更好地规范和履行各方的权利、义务,我司特此与您签订本协议,以供双方严格遵守。为保证您与发包商的权利义务,我司特此向您宣贯平台上的业务规则。关于各发包商对注册经营者的要求,包括应履行的活动条件、活动内容、活动注意事项等均在各发包商的任务发布页面有所体现,您应当予以遵守。
+    </p>
+    <p>
+      1.2
+      您应按照我司及各发包商要求的标准接收任务,履行生产经营活动过程中的相关义务并享有相关权利,并严格遵循各发包商制定的任务政策或规则。如您违反前述规定,一经核实本公司将有权随时终止本合同,冻结并扣除您尚未结算的税后经营收入作为赔偿。
+    </p>
+    <p>第二条协议效力</p>
+    <p>2.1 本协议自您完成申请、注册并最终点击签约后立即生效。</p>
+    <p>
+      2.2 本协议有效期限为自生效之日起至 年 月
+      日止(不低于一年)。期限届满,双方可另行签署新的协议;若双方未签署新的协议,而以实际行动继续合作的,视为双方同意协议期限顺延直至按照本协议约定终止或解除时为止。
+    </p>
+    <p>第三条我司的权利和义务</p>
+    <p>
+      3.1
+      我司接受发包商的委托,就其所需发包的任务寻求、匹配注册经营者(即您)为其完成相应任务,并按您的工作成果向您结算承揽任务经营所得(以下称“经营所得”)。
+    </p>
+    <p>
+      3.2
+      我司将按发包商制定的注册经营者经营所得计费标准和支付方式,根据发包商确认的数额向您结算经营所得,并承诺按时支付(按月结算)。如您在工作成果、标准和费用数额上存在异议的,可以向发包商提出,我司将根据发包商的最终意见结算和支付费用。
+    </p>
+    <p>此处您应明确:您的经营所得由我司按月结算并完成支付,您不应向发包商主张任何费用。</p>
+    <p>
+      3.3
+      在向您支付经营所得前,我司将根据税务机关的授权代征您在前述生产经营过程中产生的个人所得税等各项税款及行政收费(如适用),在收到发包商的付款指令并缴纳所有税费后,我司将<span
+        class="bold-text"
+        >保证您的税后经营所得款项及时到帐;发包商未支付费用的,我司无需向您支付。</span
+      >
+    </p>
+    <p>
+      3.4
+      您根据本协议为平台上的发包商完成任务的,系前述任务的实际承揽人,该任务并不导致您与发包商或与我司之间构成任何劳动、劳务或雇佣关系,您应对您的承揽行为负责
+    </p>
+    <p>
+      3.5
+      在您完成任务的过程中,应当自行保障人身和财产安全,并注意防范侵害第三人的人身、财产或造成其他损失,如出现问题由您自行承担责任。若因您在完成任务过程中给发包商或其他第三方造成损失,使我司或发包商承担责任的,我司或发包商有权向您追偿,并从您应得的税后经营所得中扣除。
+    </p>
+    <p>
+      3.6
+      我司承诺对您所披露的个人隐私信息【身份证号码】进行保密,但出于履行本协议的需求或有关部门要求而披露的除外。
+    </p>
+    <p>
+      3.7
+      我司发现您违反本协议第四条第4.6款之规定的,我司有权中止本协议,并将您的违法行为自发现之时24小时之内向我司主管税务机关报告。您应自行承担由此产生的税务相关的处罚责任,包括但不限于根据税务机关的要求补缴相应的税款、滞纳金等。
+    </p>
+    <p>第四条您的权利和义务</p>
+    <p>4.1 如发包商要求您完成违反法律法规的任务的,您有权且应当拒绝。</p>
+    <p>
+      4.2
+      您注册和签约时需提供必要的签约信息【包括您的姓名(或名称)、身份证号(或登记注册号)、手机号、账号等信息)】,如各单位需要其他具体信息的,请您按照发包商的要求进行提供。您承诺并保证您所提供的信息真实、准确,如我司或发包商发现您伪造或提供虚假信息的,一经核实,我司有权单方面立即解除本协议,冻结或扣除您尚未结算的税后经营所得作为赔偿。如您的信息变更(例如,不再符合注册经营者身份要求时等)应当在3日内书通知我司,否则与此有关的全部法律责任由您负责。
+    </p>
+    <p>
+      4.3
+      您同意我司及其发包商收集您的个人信息,包括但不限于您的姓名(或名称)、身份证号(或登记注册号)、收款账户信息、联系电话、接单数量及费用等。
+    </p>
+    <p>
+      4.4
+      因您是平台上任务的实际承揽人,应当独立承担相应的责任,我司没有为您方购买任何保险的法律义务,您自行购买商业保险的,其投保、出险及理赔事宜均与我司无关。
+    </p>
+    <p>4.5 您应自备提供完成任务所需要的设备设施,自行承担必要费用和成本。</p>
+    <p>4.6 您承诺与合作单位不具有下列关系:</p>
+    <p>(1)与发包商具有劳动、劳务或雇佣关系,或其他类似的劳动人事法律关系;</p>
+    <p>(2)与发包商的关联企业具有劳动、劳务或雇佣关系,或其他类似的劳动人事法律关系;</p>
+    <p>
+      (3)为发包商及其关联企业的法定代表人、董事、监事、股东。前述发包商的关联企业指,该企业与发包商相互间直接或间接持有其中一方的股权总和达到25%或以上的;或者与发包商直接或间接同为第三者所拥有或控制股权达到25%或以上的;或者对发包商生产经营、交易具有实际控制的与其他利益相关联的关系(包括但不限于婚姻、近亲属关系)。
+    </p>
+    <p>4.7 您应保证完成我司以及发包商所安排工作任务,并与我司保持必要的沟通联络。</p>
+    <p>
+      4.8
+      您应按时尽责地完成符合我司以及发包商要求的任务,在此过程中不得有侵犯人身权、肖像权、隐私权、名誉权、财产权、知识产权、商业秘密或其他合法权益以及其他违反国家法律法规、国家政策或有悖于公序良俗的行为。
+    </p>
+    <p>
+      4.9
+      协议期内,您应在我司以及发包商许可范围内使用发包商的商业信息;协议期内以及协议终止后,您均有义务对双方合作的有关协议及合作过程中知悉的我司、发包商及他人的相关信息(包括但不限于您与我司签订的本协议,及服务过程中了解到的发包商产品信息、相关服务政策、价格标准、销售数量、技术秘密及其他情况)予以保密,未经书面许可,您不得以任何方式向其它方泄漏、给予或转让前述保密信息。否则,您需负责赔偿因此导致我司及发包商的全部损失。
+    </p>
+    <p>
+      4.10 除本协议事项外,您不能以我司或发包商的名义开展任何与完成约定的任务内容无关的业务或活动。
+    </p>
+    <p>
+      4.11
+      您为发包商完成约定的任务时,发包商可能将要求您签署、点击电子协议《发包商与注册经营者的协议》,您应同意点击签署。您已经明确知悉,点击确认后该《发包商与注册经营者的协议》将对您产生法律效力。
+    </p>
+    <p>
+      4.12
+      我司及本平台默认,您于同期间内,只在本平台注册为注册经营者并接受相应的经营所得收入支付和个人所得税等各项税款及行政收费的代缴服务,若您在一个税务年度内的累计经营收入超过相应的个人所得税税率档位,请您自行在第二年到税务部门汇算清缴,并按规定补缴税款。
+    </p>
+    <p>第五条税后经营所得收入的支付</p>
+    <p>
+      5.1
+      我司将根据发包商的运营要求,按月向您支付税后经营所得收入,具体由我司根据您在发包商的实际服务情况、用户评价以及发包商的结算规则确定。由于您所完成任务的质量、发包商运营情况等的不同,该收入金额可能会呈现浮动,您清楚并了解该等浮动为正常情况。我司将以人民币形式向您支付税后经营所得收入,您应缴纳的个人所得税及其他税费由我司负责代征代办。
+    </p>
+    <p>
+      5.2 您应向我司提供您实名登记的银行账户或支付宝账户,具体账户信息以您在发包商提供的信息为准。
+    </p>
+    <p>
+      5.3
+      税后经营所得收入发放以您提供的收款帐户为准,因您提供的收款帐户不实造成的一切损失由您自行承担。如您帐号变更或发生不可用等情况时,应及时通过发包商进行变更操作,否则,由此造成的一切损失由您自行负责。
+    </p>
+    <p>第六条违约责任</p>
+    <p>
+      6.1
+      双方应按本协议约定履行,如有违反,守约方有权要求违约方及时改正;造成守约方损失的,守约方有权要求违约方赔偿。如您因违约行为给我司或发包商造成损失的,我司或发包商有权直接从您的应得税后经营所得收入中扣除相应的款项作为赔偿;该费用不足以赔偿的,可向您再行主张。
+    </p>
+    <p>
+      6.2
+      在合同因违约而终止情况下,守约方可以要求违约方承担违约责任并赔偿损失,赔偿损失的范围应包括守约方因违约方违约所受到的全部经济损失(包括直接损失、间接损失以及因此赔偿所引发的一切合理费用的支出),守约方还可保留进一步追究的权利。
+    </p>
+    <p>
+      6.3
+      因不可抗力造成损失的,彼此不负赔偿责任,但发生不可抗力一方应在2日内将有关情况通知另一方,在该不可抗力事件发生后十五日内向另一方提供关于此种不可抗力事件及其持续时间的适当证据及协议不能履行或者需要延期履行的书面资料并尽最大努力进行补救。本协议所称不可抗力是指不能预见、不能克服并不能避免且对一方当事人造成重大影响的客观事件,包括但不限于自然灾害如洪水、地震、火灾、风暴、疫情等,社会事件如战争、动乱、政府行为、黑客事件、大范围电信事故等,以及政府行为、政策法律改变等。
+    </p>
+    <p>第七条协议的终止</p>
+    <p>7.1 发生以下情形时,本协议终止:</p>
+    <p>a.本协议到期,双方未决定继续合作的;</p>
+    <p>b.您主动提出终止任务,且已经发包商同意的;</p>
+    <p>c.发包商终止或变更业务模式而不需要您继续履行本协议的;</p>
+    <p>d.发包商认为您不适合继续承揽任务的;</p>
+    <p>e.法律法规或政策变更,不再允许双方继续以此模式合作的。</p>
+    <p>7.2 除以上情形外,发生以下情形时之一的,我司可以终止本协议:</p>
+    <p>
+      7.2.1一方违反协议约定,且违约方在守约方书面通知后15日内仍未予改正的,守约方可以单方终止协议。
+    </p>
+    <p>7.3本协议的终止不影响已经产生的权利义务关系,也不解除各方的保密义务。</p>
+    <p>第八条涉税事务委托授权</p>
+    <p>8.1 涉税事务授权委托</p>
+    <p>
+      (1)合作期限内,您授权委托我司代理本协议交易项下的涉税事务,包括代开增值税普通发票和代缴个税及其他税费。
+    </p>
+    <p>
+      (2)您确认我司根据本协议授权,提交的相关申报资料和信息是真实、完整、准确和符合有关法律法规的。
+    </p>
+    <p>8.2 信息查询授权委托</p>
+    <p>
+      (1)合作期限内,您授权我司向中国人民银行、依法设立的数据服务机构、信息查询及信息验证服务机构、政府部门及其他依法设立存续的第三方机构等无次数限制地收集、查询、验证,同意递交本人相关信息(包括但不限于银行实名信息、通信实名信息、位置信息、资信状况、各类交易记录,公共费用缴纳、违法违规信息、财产状况、行踪轨迹及网络行为信息),进行验证并获得验证结果,用于以下用途:
+    </p>
+    <p>(a);(b);</p>
+    <p>(c);(d)</p>
+    <p>(注:请填写合法业务用途或应用场景)。</p>
+    <p>
+      (2)您同意为避免重复授权之不便,本授权表明该等合法存续的第三方机构在使用或向有关机构提供本人信息时,可以依据本授权径行使用或向源数据机构提供本人相关信息,而无需再逐一向本人另行获取授权。
+    </p>
+    <p>
+      8.3 特别提示:<span class="bold-text"
+        >为了维护您的合法权益,请您在充分理解本授权书的全部内容后签署本授权书。本公司将依法对信息进行保密,履行信息安全保障义务。若您不接受本授权书任何条款,请您立即停止授权。</span
+      >
+    </p>
+    <p>
+      8.4授权人声明:本授权书经接受后立即生效,且效力具有独立性,不因相关业务合同或条款无效或被撤销而无效或失效,本授权一经做出,便不可撤销。以上授权内容,本人已经充分理解并同意,一经本人点击确认或勾选时即视为签署。本人自愿做出以上授权,并愿意承担由此所产生的一切法律后果。
+    </p>
+    <p>第九条其他</p>
+    <p>
+      9.1
+      因履行本协议发生的纠纷,双方应友好协商解决,协商不成的,提请北京仲裁委员会仲裁,仲裁裁决为一裁终局,对双方具有约束力
+    </p>
+    <p>9.2 我司有权根据业务变化情况修改本协议条款。</p>
+    <p>9.3 本协议自您申请注册成功并点击签约之后生效</p>
+    <p>甲方(盖章):</p>
+    <p>日期:</p>
+    <p>乙方(盖章):</p>
+    <p>日期:</p>
+  </view>
+</template>
+
+<script>
+export default {
+  name: 'huiqiyun'
+}
+</script>
+
+<style lang="scss" scoped>
+p:not(.title) {
+  text-indent: 2em;
+  line-height: 1.5em;
+}
+.underline-bold {
+  text-decoration: underline;
+  font-weight: bold;
+}
+.bold-text {
+  font-weight: bold;
+}
+.yellow-bgc {
+  background-color: yellow;
+}
+</style>

+ 195 - 0
src/pages-sub-packages/agreement/jinyuan.vue

@@ -0,0 +1,195 @@
+<!--
+ * @desc 金源
+ * @author linyuanjie
+ * @date 2022/4/20
+-->
+
+<template>
+  <view class="pl20 pr20 pb20">
+    <p class="title mt20 mb20 bold-text tc">金园数字科技(涟源)有限公司</p>
+    <p class="title mt20 mb20 bold-text tc">与</p>
+    <p class="title mt20 mb20 bold-text tc">自由职业者</p>
+    <p class="title mt20 mb20 bold-text tc">共享经济综合服务协议</p>
+    <p>甲 方:金园数字科技(涟源)有限公司(以下简称“甲方”)</p>
+    <p>乙 方: (以下简称“乙方”)</p>
+    <p>证件号码:</p>
+    <p>联系电话:</p>
+    <p>联系邮箱:</p>
+    <p>(在本协议下,甲方和乙方统称为“双方”,或各自被称为“各方”或“一方”。)</p>
+    <p><text class="underline-bold">特别提示:</text></p>
+    <p class="underline-bold">
+      针对获得生产经营所得的自由职业者在使用本协议项下甲方(还包括甲方指定的合作方、关联方及其他分支机构,下同)提供的共享经济综合服务时,甲方承诺依法纳税、确保自然纳税人取得税后的合法收入。
+    </p>
+    <p class="underline-bold">
+      军人、公职人员等国家法律法规和纪律规定禁止从事兼职或经商的人员,严禁使用本协议项下甲方提供的共享经济综合服务。
+    </p>
+    <p class="underline-bold">
+      公司雇员等其他与公司具有劳动/劳务合同关系、或其他类似的劳动人事法律关系并从与其有前述关系的公司取得工资薪金所得的人员,严禁使用本协议项下甲方提供的共享经济综合服务;该类人员因从事生产经营而从非与其有前述关系的企、事业单位所取得的生产经营所得,甲方可为其提供本协议项下的共享经济综合服务。
+    </p>
+    <p class="underline-bold">
+      公司法定代表人、股东、董事、监事等从公司取得收入的高管人员,一律严禁使用本协议项下甲方提供的共享经济综合服务;该类人员因从事生产经营而从非与其有前述关系的企、事业单位所取得的生产经营所得,甲方同样不可为其提供本协议项下的共享经济综合服务。
+    </p>
+    <p class="underline-bold">一经发现有上述任一行为的,乙方应自行承担相关法律责任。</p>
+    <p class="underline-bold">
+      上述“公司”特指与乙方建立业务关系并提供相应生产经营活动的公司,乙方与其他公司之间的法律关系不受上述条款约束(公司法定代表人、股东、董事、监事等从公司取得收入的高管人员除外)。
+    </p>
+    <p>
+      依据《中华人民共和国税收征收管理法》及其细则、《中华人民共和国民法典》、《中华人民共和国发票管理办法》、《委托代征管理办法》等相关法律法规的规定,甲乙双方经协商一致,达成协议如下:
+    </p>
+    <p class="bold-text">1、定义</p>
+    <p>
+      1.1.
+      甲方系国内注册成立的科技公司,通过阿拉钉系统平台为自由职业者提供账户搭建与管理、交易管理及撮合、交易合同签订与存证、订单管理与查询、信息咨询及管理等其他现代服务,基于该等经济管理服务及经济业务往来,接受乙方委托,为乙方提供共享经济综合服务。
+    </p>
+    <p>
+      1.2.
+      乙方系具有完全的民事行为能力且具备相应专业技能及许可(如有)的自由职业者,接受甲方(包括甲方指定的合作方、关联方及其他分支机构,下同)提供的共享经济综合服务,与甲方或甲方企业客户之间建立业务关系并提供相应的生产经营活动。乙方承诺作为服务提供者,应遵守国家相关法律法规及行业规范,按照甲方与企业客户的业务具体要求完成服务内容,履行生产经营活动过程中的相关义务并享有相关权利。
+    </p>
+    <p>
+      1.3.阿拉钉系统平台:是由甲方合作方研发及运营维护的一套综合云服务平台,具备电子协议签署、电子数据存证、账户管理、交易管理、订单管理与查询等各项技术服务能力。
+    </p>
+    <p class="bold-text">2、合作内容</p>
+    <p>
+      2.1.乙方应自行负担就其生产经营所得需缴纳的各项税款及行政收费(如有),甲方及甲方指定的合作方、关联方及其他分支机构按照有关税收政策规定及相关主管税务机关的要求,接受乙方委托协助其向主管税务机关缴纳或代征前述税费。
+    </p>
+    <p>
+      2.2.甲方及甲方指定的合作方、关联方及其他分支机构接受乙方委托,通过本协议项下的服务将乙方生产经营所得完税后的金额发放至乙方,并接受乙方委托由甲方或主管税务机关代开增值税普通发票。
+    </p>
+    <p class="bold-text">3、甲方权利义务</p>
+    <p>3.1.甲方有权就乙方提供的生产经营活动制定相应规则及标准,乙方应当遵守。</p>
+    <p>
+      3.2.甲方协助乙方获取生产经营所得时,应当按照有关税收政策规定及主管税务机关授予的代征权限向乙方代征个人所得税等各项税款及行政收费(如有),或协助乙方按照有关税收政策规定及主管税务机关的要求缴纳个人所得税等各项税款及行政收费(如有)。
+    </p>
+    <p>
+      3.3.甲方有权对乙方提供的信息进行验证,但该等验证行为并不意味着甲方对乙方信息的真实性、有效性、合法性、完整性负责,也并不因此减轻或免除乙方的任何义务或责任。
+    </p>
+    <p>
+      3.4.甲方发现乙方违反相关法律法规或本协议规定的,甲方有权中止本协议。乙方应自行承担由此产生的税务相关的处罚责任,包括但不限于根据税务机关的要求补缴相应的税款、滞纳金等。
+    </p>
+    <p>3.5.甲方承诺对乙方所披露的个人隐私信息进行保密。</p>
+    <p>
+      3.6.甲方可以留存为实现本次合作内容从乙方处获取的乙方个人信息。但是,未经乙方授权,甲方不得将乙方个人信息披露给任何第三方。
+    </p>
+    <p>
+      3.7.甲方承诺将按照相关法律法规的要求,对从乙方处获得的乙方个人信息履行安全保护义务,保障网络免受干扰、破坏或未经授权的访问,防止网络数据泄露或被窃取、篡改。
+    </p>
+    <p>3.8.如乙方与其客户之间如有非因本协议产生的争议或纠纷的,与甲方无关,甲方不承担任何责任。</p>
+    <p>
+      3.9.甲方向乙方提供本协议项下服务在任何情况下均不得被理解为与乙方之间建立或存在劳动/劳务合同关系、或其他类似的劳动人事法律关系。
+    </p>
+    <p class="bold-text">4、乙方权利义务</p>
+    <p>
+      4.1.乙方保证提供的个人信息等均是真实的、有效的、合法的、完整的,如信息变更应当及时通知甲方,与此有关的全部法律责任由乙方承担。同时,乙方知悉并确认,当且仅当其通过了甲方系统或甲方合作的第三方系统的实名认证后,方能享有本协议项下的服务。
+    </p>
+    <p>
+      4.2.乙方保证提供各项业务往来信息,包括但不限于业务合作协议、相关补充协议及业务结算单等,均是真实的、有效的、合法的、完整的,如信息变更应当及时通知甲方,与此有关的全部法律责任由乙方承担。
+    </p>
+    <p>
+      4.3.乙方有义务向甲方提供与生产经营所得相对应的收入凭据,并保证其均是真实的、有效的、合法的、完整的,如信息变更应当及时通知甲方,与此有关的全部法律责任由乙方承担。
+    </p>
+    <p>
+      4.4.乙方有义务自行保护账户信息的安全,任何通过乙方账户进行的操作均将被视为乙方的真实意思表示,相应责任均由乙方自行承担。
+    </p>
+    <p>4.5.乙方承诺与其客户之间不具有下列关系:</p>
+    <p>1)与客户具有劳动/劳务合同关系、或其他类似的劳动人事法律关系;</p>
+    <p>2)与客户的关联企业具有劳动/劳务合同关系、或其他类似的劳动人事法律关系;</p>
+    <p>3)为客户及其关联企业或其他企业的法定代表人、董事、监事、股东等高管人员;</p>
+    <p>4)其他不适用于本协议适用范围之规定的人员关系。</p>
+    <p>
+      4.6.乙方发现甲方违反法律、行政法规的规定或者双方的约定收集、使用其个人信息的,有权要求其删除其个人信息;发现甲方收集、存储的其个人信息有错误的,有权要求其予以更正。甲方应当采取措施予以删除或者更正。
+    </p>
+    <p>
+      4.7.乙方保证活动过程中遵守国家法律法规,因乙方个人原因造成其个人或任何第三方损害的责任,由乙方承担全部法律责任。
+    </p>
+    <p>4.8.乙方不得申请代开以下发票:</p>
+    <p>1)凡带有抵扣功能的普通发票;</p>
+    <p>2)非税务部门管理的经营收入。</p>
+    <p>
+      4.9.乙方承诺应当基于真实业务交易向甲方申请代开或委托甲方由税务机关代开相应发票并提供真实、准确、完整的开票信息,否则若乙方违反该承诺造成的相关法律责任及损失由乙方自行承担,若由此造成甲方损失或被相关行政机关处罚的,乙方应当承担赔偿责任。
+    </p>
+    <p>
+      4.10.乙方不得从事违反法律及行政法规等行为,如洗钱、偷税漏税及其他甲方认为不得使用甲方服务的行为等。
+    </p>
+    <p>
+      4.11.乙方确认,其具有完全民事权利能力及完全民事行为能力,所有业务合作均为其真实意愿,且遵守国家法律法规及行业监管要求并满足所有履行本协议所需的法定条件或约定条件。
+    </p>
+    <p>4.12.乙方确认,已知晓其生产经营所得的计算方式及结算周期。</p>
+    <p>
+      4.13.乙方可自行在企业客户处查询生产经营所得的计算方式、结算周期、支付途径等信息,如有异议,可直接与企业客户沟通,甲方可在必要时提供相关协助。
+    </p>
+    <p>
+      4.14.
+      乙方委托授权甲方,根据乙方的委托及主管税务机关规定的或授予的委托代征范围、期限,及税种、税率等,依法代理乙方缴纳相关税费或代征乙方相关税费的事宜,各地主管税务机关的具体规定可能不一致。同时,如遇国家或地方政府及主管税务机关政策变更的,甲方有权根据变更后的政策规定自动调整本协议项下的权利义务乃至终止本协议。
+    </p>
+    <p>
+      4.15.为便利业务的开展,根据实际业务情况,甲方可能会安排一家或多家合作方、关联方及/或分支机构作为实际业务提供方,为乙方提供本协议项下约定的服务,乙方对此知情并完全同意。同时,乙方同意授权并委托甲方为其申请数字证书,并签署所需的相关协议,但该协议应以不加重乙方的合同义务为限。
+    </p>
+    <p>
+      4.16.乙方知悉并同意,经数字证书签署后的电子合同,与乙方以纸质形式进行的签章具有同等法律效力,对乙方具有不可撤销的法律约束力。乙方不得以未签署纸质合同为由、或未实际操作数字证书等理由,否认该等电子合同的法律效力。
+    </p>
+    <p class="bold-text">5、保密条款</p>
+    <p>
+      5.1.本协议任何一方应对本协议所涉及的所有内容以及协议各方在执行本协议过程中相关的一切法律、商业、合作业务的所有资讯进行保密。未经对方允许,均不得向对方以外的任意第三方披露。
+    </p>
+    <p>5.2.保密期应为:协议的有效期内及协议终止之后的十年。</p>
+    <p class="bold-text">6、违约责任</p>
+    <p>
+      任何一方违反本协议约定,即构成该方的违约;除本协议另有规定外,违约方应向守约方承担违约责任,补偿守约方承受或遭致的所有损失、责任、赔偿金或费用(包括但不限于合理的律师费、诉讼费、公证费等)。
+    </p>
+    <p class="bold-text">7、其他</p>
+    <p>
+      7.1.在本协议的任意一方或双方未能及时行使本协议项下的权利不应被视为放弃该权利,也不影响该方在将来行使该权利。
+    </p>
+    <p>
+      7.2.本协议的订立、执行和解释及争议的解决均应适用中国法律。凡因本协议引起的或与本协议有关的任何争议,协议各方应友好协商解决。如不能协商解决,双方一致同意提交至北京仲裁委员会仲裁。
+    </p>
+    <p>
+      7.3.双方同意,在本协议签订后,如另有补充协议,该等补充协议及附件构成本协议不可分割的组成部分,具有同等法律效。
+    </p>
+    <p>
+      7.4.本协议项下各方声明、承诺和保证:本协议任何一方已披露签署和履行本协议所应当向另一方披露的全部信息,且披露内容真实、准确、无遗漏。协议各方同时声明和承诺:本协议的签署和履行不与本协议任何一方已经签署的协议或需承担的任何义务相冲突,且也不会对本协议任何一方以外的第三方形成任何法律和商业上的冲突。
+    </p>
+    <p>
+      7.5.除本协议另有约定外,在履行本协议过程中的一切通知,甲方将通过在阿拉钉系统平台向乙方发送平台消息的方式送达乙方,甲方将通知消息发出之时即视为甲方完成通知义务。
+    </p>
+    <p>
+      7.6.本协议经甲方盖章、乙方签字之日起生效,本协议有效期为壹年。协议到期后如双方均未以书面方式提出异议,则本协议有效期自动顺延壹年。本协议壹式贰份,甲乙双方各执壹份,每份具有同等法律效力。
+    </p>
+    <p>
+      7.7
+      您/本人委托甲方代理本合同交易项下的涉税事务,包括代理报税、代开发票和代开个人完税证明。您/本人确认甲方根据本合同授权提交的相关申报资料和信息是真实、完整、准确,和符合有关法律法规的。您/本人确认与甲方的合作公司不存在法律上和事实上的人事劳动关系,不属于合作公司人事管理权限范围内的个人,也并非其股东。
+    </p>
+    <p>
+      7.8因履行本协议发生的纠纷,双方应友好协商解决,协商不成的,提请我司所在地人民法院诉讼解决。
+    </p>
+    <p>7.9我司有权根据业务需要修改本协议条款。</p>
+    <p>(以下无正文,仅为签署页)</p>
+    <p>甲方(盖章):</p>
+    <p>日期:</p>
+    <p>乙方(签字):</p>
+    <p>日期:</p>
+  </view>
+</template>
+
+<script>
+export default {
+  name: 'jinyuan'
+}
+</script>
+
+<style lang="scss" scoped>
+p:not(.title) {
+  text-indent: 2em;
+  line-height: 1.5em;
+}
+.underline-bold {
+  text-decoration: underline;
+  font-weight: bold;
+}
+.bold-text {
+  font-weight: bold;
+}
+.yellow-bgc {
+  background-color: yellow;
+}
+</style>

+ 184 - 0
src/pages-sub-packages/agreement/olading.vue

@@ -0,0 +1,184 @@
+<!--
+ * @desc 钉灵工-海南飞亿协议模板(共享经济综合服务协议)
+ * @author linyuanjie
+ * @date 2022/4/20
+-->
+
+<template>
+  <view class="pl20 pr20 pb20">
+    <p class="title mt20 mb20 bold-text tc">海南省飞亿信息科技有限公司</p>
+    <p class="title mt20 mb20 bold-text tc">与</p>
+    <p class="title mt20 mb20 bold-text tc">自由职业者</p>
+    <p class="title mt20 mb20 bold-text tc">共享经济综合服务协议</p>
+    <p>甲 方:海南省飞亿信息科技有限公司(以下简称“甲方”)</p>
+    <p>乙 方: (以下简称“乙方”)</p>
+    <p>证件号码:</p>
+    <p>联系电话:</p>
+    <p>联系邮箱:</p>
+    <p>(在本协议下,甲方和乙方统称为“双方”,或各自被称为“各方”或“一方”。)</p>
+    <p><text class="underline-bold">特别提示:</text></p>
+    <p class="underline-bold">
+      针对获得生产经营所得的自由职业者在使用本协议项下甲方(还包括甲方指定的合作方、关联方及其他分支机构,下同)提供的共享经济综合服务时,甲方承诺依法纳税、确保自然纳税人取得税后的合法收入。
+    </p>
+    <p class="underline-bold">
+      军人、公职人员等国家法律法规和纪律规定禁止从事兼职或经商的人员,严禁使用本协议项下甲方提供的共享经济综合服务。
+    </p>
+    <p class="underline-bold">
+      公司雇员等其他与公司具有劳动/劳务合同关系、或其他类似的劳动人事法律关系并从与其有前述关系的公司取得工资薪金所得的人员,严禁使用本协议项下甲方提供的共享经济综合服务;该类人员因从事生产经营而从非与其有前述关系的企、事业单位所取得的生产经营所得,甲方可为其提供本协议项下的共享经济综合服务。
+    </p>
+    <p class="underline-bold">
+      公司法定代表人、股东、董事、监事等从公司取得收入的高管人员,一律严禁使用本协议项下甲方提供的共享经济综合服务;该类人员因从事生产经营而从非与其有前述关系的企、事业单位所取得的生产经营所得,甲方同样不可为其提供本协议项下的共享经济综合服务。
+    </p>
+    <p class="underline-bold">一经发现有上述任一行为的,乙方应自行承担相关法律责任。</p>
+    <p class="underline-bold">
+      上述“公司”特指与乙方建立业务关系并提供相应生产经营活动的公司,乙方与其他公司之间的法律关系不受上述条款约束(公司法定代表人、股东、董事、监事等从公司取得收入的高管人员除外)。
+    </p>
+    <p>
+      依据《中华人民共和国税收征收管理法》及其细则、《中华人民共和国民法典》、《中华人民共和国发票管理办法》、《委托代征管理办法》等相关法律法规的规定,甲乙双方经协商一致,达成协议如下:
+    </p>
+    <p class="bold-text">1、定义</p>
+    <p>
+      1.1.甲方系国内注册成立的科技公司,通过阿拉钉系统平台为自由职业者提供账户搭建与管理、交易管理及撮合、交易合同签订与存证、订单管理与查询、信息咨询及管理等其他现代服务,基于该等经济管理服务及经济业务往来,接受乙方委托,为乙方提供共享经济综合服务。
+    </p>
+    <p>
+      1.2.乙方系具有完全的民事行为能力且具备相应专业技能及许可(如有)的自由职业者,接受甲方(包括甲方指定的合作方、关联方及其他分支机构,下同)提供的共享经济综合服务,与甲方或甲方企业客户之间建立业务关系并提供相应的生产经营活动。乙方承诺作为服务提供者,应遵守国家相关法律法规及行业规范,按照甲方与企业客户的业务具体要求完成服务内容,履行生产经营活动过程中的相关义务并享有相关权利。
+    </p>
+    <p>
+      1.3.阿拉钉系统平台:是由甲方合作方研发及运营维护的一套综合云服务平台,具备电子协议签署、电子数据存证、账户管理、交易管理、订单管理与查询等各项技术服务能力。
+    </p>
+    <p class="bold-text">2、合作内容</p>
+    <p>
+      2.1.乙方应自行负担就其生产经营所得需缴纳的各项税款及行政收费(如有),甲方及甲方指定的合作方、关联方及其他分支机构按照有关税收政策规定及相关主管税务机关的要求,接受乙方委托协助其向主管税务机关缴纳或代征前述税费。
+    </p>
+    <p>
+      2.2.甲方及甲方指定的合作方、关联方及其他分支机构接受乙方委托,通过本协议项下的服务将乙方生产经营所得完税后的金额发放至乙方,并接受乙方委托由甲方或主管税务机关代开增值税普通发票。
+    </p>
+    <p class="bold-text">3、甲方权利义务</p>
+    <p>3.1.甲方有权就乙方提供的生产经营活动制定相应规则及标准,乙方应当遵守。</p>
+    <p>
+      3.2.甲方协助乙方获取生产经营所得时,应当按照有关税收政策规定及主管税务机关授予的代征权限向乙方代征个人所得税等各项税款及行政收费(如有),或协助乙方按照有关税收政策规定及主管税务机关的要求缴纳个人所得税等各项税款及行政收费(如有)。
+    </p>
+    <p>
+      3.3.甲方有权对乙方提供的信息进行验证,但该等验证行为并不意味着甲方对乙方信息的真实性、有效性、合法性、完整性负责,也并不因此减轻或免除乙方的任何义务或责任。
+    </p>
+    <p>
+      3.4.甲方发现乙方违反相关法律法规或本协议规定的,甲方有权中止本协议。乙方应自行承担由此产生的税务相关的处罚责任,包括但不限于根据税务机关的要求补缴相应的税款、滞纳金等。
+    </p>
+    <p>3.5.甲方承诺对乙方所披露的个人隐私信息进行保密。</p>
+    <p>
+      3.6.甲方可以留存为实现本次合作内容从乙方处获取的乙方个人信息。但是,未经乙方授权,甲方不得将乙方个人信息披露给任何第三方。
+    </p>
+    <p>
+      3.7.甲方承诺将按照相关法律法规的要求,对从乙方处获得的乙方个人信息履行安全保护义务,保障网络免受干扰、破坏或未经授权的访问,防止网络数据泄露或被窃取、篡改。
+    </p>
+    <p>3.8.如乙方与其客户之间如有非因本协议产生的争议或纠纷的,与甲方无关,甲方不承担任何责任。</p>
+    <p>
+      3.9.甲方向乙方提供本协议项下服务在任何情况下均不得被理解为与乙方之间建立或存在劳动/劳务合同关系、或其他类似的劳动人事法律关系。
+    </p>
+    <p class="bold-text">4、乙方权利义务</p>
+    <p>
+      4.1.乙方保证提供的个人信息等均是真实的、有效的、合法的、完整的,如信息变更应当及时通知甲方,与此有关的全部法律责任由乙方承担。同时,乙方知悉并确认,当且仅当其通过了甲方系统或甲方合作的第三方系统的实名认证后,方能享有本协议项下的服务。
+    </p>
+    <p>
+      4.2.乙方保证提供各项业务往来信息,包括但不限于业务合作协议、相关补充协议及业务结算单等,均是真实的、有效的、合法的、完整的,如信息变更应当及时通知甲方,与此有关的全部法律责任由乙方承担。
+    </p>
+    <p>
+      4.3.乙方有义务向甲方提供与生产经营所得相对应的收入凭据,并保证其均是真实的、有效的、合法的、完整的,如信息变更应当及时通知甲方,与此有关的全部法律责任由乙方承担。
+    </p>
+    <p>
+      4.4.乙方有义务自行保护账户信息的安全,任何通过乙方账户进行的操作均将被视为乙方的真实意思表示,相应责任均由乙方自行承担。
+    </p>
+    <p>4.5.乙方承诺与其客户之间不具有下列关系:</p>
+    <p>1)与客户具有劳动/劳务合同关系、或其他类似的劳动人事法律关系;</p>
+    <p>2)与客户的关联企业具有劳动/劳务合同关系、或其他类似的劳动人事法律关系;</p>
+    <p>3)为客户及其关联企业或其他企业的法定代表人、董事、监事、股东等高管人员;</p>
+    <p>4)其他不适用于本协议适用范围之规定的人员关系。</p>
+    <p>
+      4.6.乙方发现甲方违反法律、行政法规的规定或者双方的约定收集、使用其个人信息的,有权要求其删除其个人信息;发现甲方收集、存储的其个人信息有错误的,有权要求其予以更正。甲方应当采取措施予以删除或者更正。
+    </p>
+    <p>
+      4.7.乙方保证活动过程中遵守国家法律法规,因乙方个人原因造成其个人或任何第三方损害的责任,由乙方承担全部法律责任。
+    </p>
+    <p>4.8.乙方不得申请代开以下发票:</p>
+    <p>1)凡带有抵扣功能的普通发票;</p>
+    <p>2)非税务部门管理的经营收入。</p>
+    <p>
+      4.9.乙方承诺应当基于真实业务交易向甲方申请代开或委托甲方由税务机关代开相应发票并提供真实、准确、完整的开票信息,否则若乙方违反该承诺造成的相关法律责任及损失由乙方自行承担,若由此造成甲方损失或被相关行政机关处罚的,乙方应当承担赔偿责任。
+    </p>
+    <p>
+      4.10.乙方不得从事违反法律及行政法规等行为,如洗钱、偷税漏税及其他甲方认为不得使用甲方服务的行为等。
+    </p>
+    <p>
+      4.11.乙方确认,其具有完全民事权利能力及完全民事行为能力,所有业务合作均为其真实意愿,且遵守国家法律法规及行业监管要求并满足所有履行本协议所需的法定条件或约定条件。
+    </p>
+    <p>4.12.乙方确认,已知晓其生产经营所得的计算方式及结算周期。</p>
+    <p>
+      4.13.乙方可自行在企业客户处查询生产经营所得的计算方式、结算周期、支付途径等信息,如有异议,可直接与企业客户沟通,甲方可在必要时提供相关协助。
+    </p>
+    <p>
+      4.14.乙方理解并同意,甲方仅能根据乙方的委托及主管税务机关规定的或授予的委托代征范围、期限,及税种、税率等,协助乙方缴纳相关税费或依法代征相关税费,各地主管税务机关的具体规定可能不一致。同时,如遇国家或地方政府及主管税务机关政策变更的,甲方有权根据变更后的政策规定自动调整本协议项下的权利义务乃至终止本协议。
+    </p>
+    <p>
+      4.15.为便利业务的开展,根据实际业务情况,甲方可能会安排一家或多家合作方、关联方及/或分支机构作为实际业务提供方,为乙方提供本协议项下约定的服务,乙方对此知情并完全同意。同时,乙方同意授权并委托甲方为其申请数字证书,并签署所需的相关协议,但该协议应以不加重乙方的合同义务为限。
+    </p>
+    <p>
+      4.16.乙方知悉并同意,经数字证书签署后的电子合同,与乙方以纸质形式进行的签章具有同等法律效力,对乙方具有不可撤销的法律约束力。乙方不得以未签署纸质合同为由、或未实际操作数字证书等理由,否认该等电子合同的法律效力。
+    </p>
+    <p class="bold-text">5、保密条款</p>
+    <p>
+      5.1.本协议任何一方应对本协议所涉及的所有内容以及协议各方在执行本协议过程中相关的一切法律、商业、合作业务的所有资讯进行保密。未经对方允许,均不得向对方以外的任意第三方披露。
+    </p>
+    <p>5.2.保密期应为:协议的有效期内及协议终止之后的十年。</p>
+    <p class="bold-text">6、违约责任</p>
+    <p>
+      任何一方违反本协议约定,即构成该方的违约;除本协议另有规定外,违约方应向守约方承担违约责任,补偿守约方承受或遭致的所有损失、责任、赔偿金或费用(包括但不限于合理的律师费、诉讼费、公证费等)。
+    </p>
+    <p class="bold-text">7、其他</p>
+    <p>
+      7.1.在本协议的任意一方或双方未能及时行使本协议项下的权利不应被视为放弃该权利,也不影响该方在将来行使该权利。
+    </p>
+    <p>
+      7.2.本协议的订立、执行和解释及争议的解决均应适用中国法律。凡因本协议引起的或与本协议有关的任何争议,协议各方应友好协商解决。如不能协商解决,双方一致同意提交至北京仲裁委员会仲裁。
+    </p>
+    <p>
+      7.3.双方同意,在本协议签订后,如另有补充协议,该等补充协议及附件构成本协议不可分割的组成部分,具有同等法律效。
+    </p>
+    <p>
+      7.4.本协议项下各方声明、承诺和保证:本协议任何一方已披露签署和履行本协议所应当向另一方披露的全部信息,且披露内容真实、准确、无遗漏。协议各方同时声明和承诺:本协议的签署和履行不与本协议任何一方已经签署的协议或需承担的任何义务相冲突,且也不会对本协议任何一方以外的第三方形成任何法律和商业上的冲突。
+    </p>
+    <p>
+      7.5.除本协议另有约定外,在履行本协议过程中的一切通知,甲方将通过在阿拉钉系统平台向乙方发送平台消息的方式送达乙方,甲方将通知消息发出之时即视为甲方完成通知义务。
+    </p>
+    <p>
+      7.6.本协议经甲方盖章、乙方签字之日起生效,本协议有效期为壹年。协议到期后如双方均未以书面方式提出异议,则本协议有效期自动顺延壹年。本协议壹式贰份,甲乙双方各执壹份,每份具有同等法律效力。
+    </p>
+    <p>(以下无正文,仅为签署页)</p>
+    <p>甲方(盖章):</p>
+    <p>日期:</p>
+    <p>乙方(签字):</p>
+    <p>日期:</p>
+  </view>
+</template>
+
+<script>
+export default {
+  name: 'olading'
+}
+</script>
+
+<style lang="scss" scoped>
+p:not(.title) {
+  text-indent: 2em;
+  line-height: 1.5em;
+}
+.underline-bold {
+  text-decoration: underline;
+  font-weight: bold;
+}
+.bold-text {
+  font-weight: bold;
+}
+.yellow-bgc {
+  background-color: yellow;
+}
+</style>

+ 70 - 0
src/pages-sub-packages/agreement/personalInfoAuth.vue

@@ -0,0 +1,70 @@
+<!--
+ * @desc 个人信息使用授权书
+-->
+
+<template>
+  <view class="pl20 pr20">
+    <p class="title mt20 bold-text tc">个人信息使用授权书</p>
+    <p class="title mt20 mb20 bold-text">重要提示:</p>
+    <p class="bold-text">
+      为了保障您的合法权益,您应当阅读并遵守本授权书,请您务必审慎阅读、充分理解授权书条款内容,特别是免除或者减轻中国生物技术股份有限公司(以下统称“被授权人"或“中国生物”)责任,或限制您权利的条款,其中免除或者减轻责任条款可能以加粗形式提示您注意。
+    </p>
+    <p class="bold-text">
+      除非您已阅读并接受本授权书所有条款,否则您无权使用“营销行为小助手”服务。您的使用、登录等行为即视为您已阅读并同意本授权书条款的约束。
+    </p>
+    <p class="mt20">中国生物技术股份有限公司:</p>
+    <p>
+      本人充分理解并同意,“营销行为小助手”服务是中国生物技术股份有限公司(以下简称“中国生物”)与实体企业等相关合作方进行合作,开展业务证据链采集系统服务。通过信息技术手段,对营销行为进行全面、高效的管控,以实现强化企业管理、提升营销效率、降低运营成本等目标。
+    </p>
+    <p>
+      本人在使用“营销行为小助手”服务时,承诺遵守《平台用户协议》《隐私政策》等协议。同时,为便于中国生物提供优质、便捷的服务,就使用本人的相关必要信息,本人同意并授权如下:
+    </p>
+    <p class="bold-text">
+      一、本人同意并授权,中国生物可使用和分析本人在“营销行为小助手”中所有填写登记或提供身份证明等资料中载明的姓名、、身份证号、联系电话、联系地址等个人信息及身份证明等相关材料,本人领取任务、实施任务等在“营销行为小助手”中的所有操作记录以及在实施任务时获取地理位置,访问手机相机、手机图片等数据信息(以下称“授权使用信息”);
+    </p>
+    <p class="bold-text">
+      二、本人同意并授权,中国生物可以保存、整理、加工授权使用信息,将授权使用信息及中国生物使用该信息分析结果传输共享给本人通过本“营销行为小助手”领取、实施任务的项目发布人、发起人,以便中国生物开展证据链服务。
+    </p>
+    <p class="bold-text">
+      三、本人同意并授权,中国生物可以将本人授权使用信息共享给“营销行为小助手”中为本人领取任务、实施任务提供第三方服务的企业使用。
+    </p>
+    <p class="bold-text">
+      四、除上述授权中国生物共享主体外,本人授权中国生物可将本人提交的或中国生物自行收集的本人授权使用信息与“营销行为小助手”项下相关合作方,即本人在“营销行为小助手”领取任务、实施任务所必要的其他合作方进行数据共享。若因本人授权中国生物共享信息主体不当使用本人个人信息或资料等可能造成损失,本人要求该主体承担赔偿责任,中国生物无须承担任何法律责任。
+    </p>
+    <p>同时,本人声明如下:</p>
+    <p class="bold-text">
+      一、本授权书是本人向中国生物做出的单方承诺,效力具有独立性,不因相关交易合同的任何条款无效而失效。
+    </p>
+    <p class="bold-text">
+      二、本人承诺本人在“营销行为小助手”所填写的信息或向“营销行为小助手”所提交的证明材料均真实有效、全面完整,不存在虚假陈述、伪造或篡改信息的情形,如有违反,本人承担全部法律责任。
+    </p>
+    <p>以上授权期限为本人作出本授权承诺之日起至本人在“营销行为小助手”上用户账号注销之日止</p>
+    <p class="underline-bold">
+      若本人与以上被授权人发生任何纠纷或争议,首先应友好协商解决;协商不成的,本人同意将纠纷或争议提交被授权人所在地有管辖权的人民法院管辖。本授权书的成立、生效、履行、解释及纠纷解决,适用中华人民共和国大陆地区法律(不包括冲突法)。
+    </p>
+    <p class="bold-text">
+      本人已知悉本授权书所有内容(特别是加粗字体内容)的意义以及由此产生的法律效力,自愿作出上述授权,本授权书是本人真实的意思表示,本人同意承担由此带来的一切法律后果。
+    </p>
+    <p>特此授权!</p>
+  </view>
+</template>
+
+<script>
+export default {
+  name: 'personalInfo'
+}
+</script>
+
+<style lang="scss" scoped>
+p:not(.title) {
+  text-indent: 2em;
+  line-height: 1.5em;
+}
+.underline-bold {
+  text-decoration: underline;
+  font-weight: bold;
+}
+.bold-text {
+  font-weight: bold;
+}
+</style>

+ 4085 - 0
src/pages-sub-packages/agreement/platformUsers.vue

@@ -0,0 +1,4085 @@
+<template>
+  <view class="pl20 pr20">
+    <div>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-align: center;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold">营销行为平台用户协议</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-align: right;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 7.5pt;
+        "
+      >
+        <span style="">第2.0版</span>
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >《营销行为平台用户协议》系由您(或称“用户”)与中国生物技术股份有限公司(或称“中国生物”)之间就“营销行为平台”(以下或简称“本平台”)服务而签订。本平台依据《营销行为平台用户协议》的规定提供服务,该协议一旦生效对用户及中国生物均产生法律效力。您在用户注册时,请认真阅读本协议,审阅并选择同意或不同意本协议。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >在使用本平台服务之前,请您务必审慎阅读、充分理解本协议各项条款,特别是限制或免除责任条款、隐私保护政策、账号规则、法律适用和争议解决条款(包括管辖条款),</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >以及其它以加粗加黑和/或加下划线等显示形式提示您注意的重要条款,请务必重点查阅。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >中国生物与您将通过数据电文形式订立本协议,若您不同意本协议,则您有充分且完全</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >的权利立即停止注册程序(但这并不妨碍您浏览本平台中的信息)。您通过网络页面点击“同意”的按钮,且该注册和/或实际使用平台服务的行为即视为您已阅读、充分理解并同意接受</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >本协议的全部条款含义即相应的法律后果,不可撤销地同意与中国生物以数据电文形式订立本协议并接受本协议及其之后修订版本的全部约束,本协议成立生效并产生法律效力。如果您对本协议有任何的疑问、投诉、意见和建议,欢迎您通过本协议所附联系方式与中国生物沟通反馈。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold">第1条 基础约定事项</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >1.1
+          协议范围:考虑到互联网服务以及商品频繁迭代更新等行业特点,为了更全面的界定您与本平台之间的权利义务,</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >本协议包括中国生物根据法律法规规定以及本协议制定的其他政策、规则、公告声明等(除非特有所指,合称为“本协议”)</span
+        ><span style="">,您也应当加以遵守。</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >1.2
+          服务范围:中国生物可能通过不断丰富的功能界面向您提供本协议项下的平台服务,包括但不限于系统软件、移动应用程序(“APP”)、PC端网站、小程序以及其他形式。具体以中国生物实时发布的服务功能界面范围为准。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >1.3 主体地位:请您在接受本协议或者以其他中国生物允许的方式实际使用本服务之前,</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >请确保您是适格的合同主体,并在清楚理解本协议内容及其法律后果后自行决定是否同意签署,而且就您所知,不存在任何可能使得本协议无效或者本协议项下义务的履行产生重大不利影响之情形。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold">第2条 用户资格</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >2.1
+          只有符合下列条件之一的自然人或机构才能申请成为本平台用户,可以使用本平台的服务:</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">2.1.1 </span
+        ><span style="font-weight: bold; text-decoration: underline">自然人用户:</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >年满十八周岁且未满六十周岁,具有完全民事行为能力;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">2.1.2 </span
+        ><span style="font-weight: bold; text-decoration: underline">非自然人用户:</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(1)根据中国法律、法规、行政规章合法设立并有效存续的机关、企事业单位、社团组织和其他组织;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(2)未被国家企业信用信息公示系统(www.gsxt.gov.cn)列入严重违法失信企业名录;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(3)未被责令停业或处于破产状态的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(4)财产及其股权未被重组、接管、查封、扣押或冻结;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(5)近三年内不涉及重大诉讼、仲裁,不属于失信被执行人的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(6)不存在违反法律法规规定的其他情形。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">2.2 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >不符合以上条件的自然人、法人或其他组织,将不被允许注册及认证成为本平台用户,且不得使用本平台相关服务,本平台一经发现,有权立即终止对该用户的服务,并追究其使用本平台服务的一切法律责任。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">2.3 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >非自然人用户需通过授权自然人为管理员后进行操作及管理。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">2.4 用户需要提供真实有效的联系电话,并提供真实信息。</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >2.5
+          本平台用户须承诺遵守法律法规、社会主义制度、国家利益、公民合法权益、公共秩序、社会道德风尚和信息真实性。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold">第3条</span><span style=""> </span
+        ><span style="font-weight: bold">用户账号规则</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">3.1 用户账号</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >3.1.1
+          您通过平台或上级企业管理员获得中国生物配置的用户账号,自首次使用该账号登陆并使用平台服务之日起即成为平台用户(以下称“注册”),您在使用本平台服务时可能需要提供一些必要的信息,具体验证方式(包括但不限于您需要提供验证的身份要素)以本网站相关页面提示为准。您须保证所填写及所提供的资料真实、准确、完整,否则可能无法使用本平台服务,或在使用过程中受到限制,甚至影响您是否能够使用本平台特定功能。</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >对于因您提供的信息不真实、不准确或不完整导致的责任和损失由您自行承担。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >3.1.2
+          本平台有权根据您所提供资料的真实性、准确性、完整性以及是否符合本平台服务规定的其他条件,决定是否为您提供服务。您在使用本平台服务过程中,所提供的信息发生变动,应及时进行变更。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">3.1.3 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >您在平台注册的用户账号仅限您本人使用,账号信息和权限不得以转让、赠与、借用、售卖、授权或租用等方式许可给第三方使用或和第三方共同控制、使用。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">3.1.4 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >您在用户账号中的设置必须遵守法律法规、公序良俗、社会公德,且不会侵害其他第三方的合法权益,否则中国生物可能会停止您使用平台账号的权利,但中国生物不对此负有实质审查义务,相关法律后果将由您自行承担。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">3.1.5 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >您有责任自行负责保管账号的用户名和登陆密码等信息,否则因该等事项引发的法律责任由用户自行承担(例如盗用、转让等)。凡使用本平台服务登录账号和登录凭证的行为,本平台服务视为您本人的操作,操作所产生的电子信息记录均为本平台服务用户行为的有效凭据。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">3.4 账号使用</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >3.4.1
+          您在使用本平台服务账号登录时,除遵守本协议约定外,还应遵守平台项下发生服务行为时相应的服务协议约定,对可能出现的纠纷在法律规定和协议约定的范围内各自承担责任。</span
+        ><span style="">&nbsp;</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >3.4.2
+          为客户体验及功能服务考虑,您在使用不同服务时被要求填写的信息内容可能不完全一致,因此,在使用本平台更高级别服务时,为了给您提供更好的服务及为了您的登录账号安全,可能需要您补充完整信息后方可使用。</span
+        ><span style="">&nbsp;</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">3.5 账号休眠</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">3.5.1 用户申请休眠情形</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >账号休眠指,在本平台执行某账户进行休眠后,该用户将不能登陆该账户、进而不能使用平台项下全部功能。如果您需要休眠您的账号,您可以通过联系平台客服进行申请,经本平台审核同意后方可解除与本平台的协议关系并休眠您账号。当您的账户休眠后,您的个人信息和您在使用本平台期间提供或产生的信息我们将按照《中国生物隐私权政策》第三条第二款约定的存储期限进行保存。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">3.5.2 强制休眠情形</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >中国生物有权在您的账号符合如下情况时,休眠您的账号并停止服务:</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline">(1)未通过实名认证;</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(2)连续180日未曾登陆、使用本平台服务;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(3)在用户违反本协议及相关规则规定时,本平台有权终止向该用户提供服务。但该</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >用户在被本平台终止提供服务后,再一次直接或间接或以他人名义注册为本平台用户的,本平台有权再次单方面终止为该用户提供服务;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(4)本平台发现用户注册资料中主要内容是虚假的,本平台有权随时终止为该用户提供服务;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(5)本协议终止或更新时,用户未确认新的协议的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(6)其它本平台认为需终止服务的情况。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >本平台可自行全权决定,在发出通知或不发出通知的情况下,随时停止或终止提供全部或部分服务。服务终止后,本平台没有义务为用户保留原账户中或与之相关的任何信息,或转发任何未曾阅读或发送的信息给用户或第三方。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">3.5.3 不论用户账户通过何种方式休眠,本平台仍保留下列权利:</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >(1)本平台有权在法律、法规、行政规章规定的时间内保留该用户的资料,包括但不限于以前的用户资料、任务对接记录等;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >(2)若终止服务之前,该用户在本平台交易平台上存在违法行为或违反本协议的行为,本平台仍可行使本协议所规定的权利。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold">第4条</span><span style=""> </span
+        ><span style="font-weight: bold">平台交易规则</span>
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >您应承诺与本平台其他用户进行交易的过程中,均应良好的遵守如下基本交易规则:</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">4.1 了解服务信息</span>
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">您在</span><span style="">使用</span
+        ><span style="">本平台前,应详细了解并完全接受本平台服务内容及交易规则</span
+        ><span style="">。</span>
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">4.2 交易协议的提交及确认</span
+        ><span style="width: 7.58pt; text-indent: 0pt; display: inline-block">&nbsp;</span>
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >在您提交本平台任务接收单或其他文件(以下称“任务文件”)</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >前,请您务必仔细确认服务时间、内容、限制性要求等重要事项,并核实您的联系地址、电话、个人信息。您根据平台指引</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >点击提交“【同意】”按钮行为,意味着您认可文件中包含的所有信息都是正确和完整</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >的,且视为您同意并认可任务文件所载明内容,待点击确认后,该任务文件即成立并生效,对您发生法律效力。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">4.3 信息发布及虚假交易</span>
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >若根据平台规则,您有权在平台系统中发布信息的,应根据本平台指引操作并应遵守本平台信息发布规则。您应确保在平台系统发布信息及交易的准确性、真实性、完整性,禁止提供虚假信息,一旦被中国生物发现,中国生物将有权单方面取消您用户资格并限制您在【
+          壹 】年内不得注册成为用户。且由此给平台或其他用户造成的损失也均由您自行承担。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">4.4 其他规则说明</span>
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >4.4.1
+          为交易达成以及提升用户体验等目的,本平台可能会为您提供更为友好完善的规则服务,并优化和引入第三方服务。由此发生的法律关系是由您和该等第三方服务商之间形成,和本平台无关。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >4.4.2
+          您同意并知悉,本平台中的具体内容、功能和形式由平台根据实际情况按“现状”实时提供,中国生物有权自行确定本平台服务的具体内容、功能和形式,有权自行决定增加、变更、中断和停止本平台具体的内容、功能和形式。具体以本平台实时呈现的服务内容、功能和形式为准。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">4.4.3 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >由于众所周知的互联网技术因素等客观原因存在,本平台显示的信息可能会有一定的滞后性或差错,对此情形您知悉并理解,如因系统故障或平台重大误解导致显示信息明</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >显不合理的,请勿进行下一步操作,</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >如您明知显示信息明显不合理仍然提交任务文件的,将可能被视为恶意行为,本平台将有权</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >冻结和/或取消本次交易;如果您在不知情的情况下进行了下一步操作,请第一时间联系本平台客服。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">4.4.4 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >您同意在使用本平台服务的过程中遵守诚实信用原则,您</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >不得实施恶意行为扰乱本平台正常交易秩序。如本平台根据您的登录账号下的记录及其他相关信息,发现您有(或可能有)恶意行为的,则本平台有权单方拒绝您的需求,或单方取消您的交易且不予退还保证金(如有),且无须由此向您承担法律责任。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold">第5条 用户的权利和义务</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >5.1
+          用户有权根据本协议及本平台发布的相关规则,登录并利用本平台查询公开的用户信息、发布或承接服务、统计汇总信息、</span
+        ><span style="">使用手机客户端填写真实业务信息、</span
+        ><span style="">参加本平台的有关活动,并有权享受本平台提供的其他有关资讯及信息服务。</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">5.2 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >用户有权对部分自身账号相关信息进行查询、更新、删除。用户有权对自身账号对应的用户信息、任务信息、汇总信息等相关信息进行查询,用户可以按其权限进行任务处理,例如管理员权限可以对任务进行审核验收、个人用户可以承接、实施任务。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">5.3 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >用户须自行负责自己的用户账号和密码,且须对在用户账号密码下发生的所有活动(包括但不限于发布服务信息、网上点击同意各类协议、规则、参与承接服务等)承担责任。用户有权根据需要更改登录密码。因用户的过错导致的任何损失由用户自行承担,该过错包括但不限于:不按照提示操作、不按照平台流程操作、未及时进行操作、遗忘或泄漏密码、密码被他人破解及用户使用的计算机被他人侵入等情形。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >5.4
+          用户应当向本平台提供真实准确的注册信息,包括但不限于真实姓名、身份证号、手机号码(</span
+        ><span style="">手机号码即为用户在本平台的账户</span
+        ><span style="">)、电子邮箱等。保证本平台可以通过上述联系方式与用户进行联系。同时,</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >用户也应当在相关资料实际变更时及时更新有关注册资料</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >,因未及时更新注册资料导致的任何损失由用户自行承担。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">5.5 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >用户在本平台注册的账号名称及发布的内容,不得有下列情形:</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(1)违反中国宪法或法律法规规定的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(2)危害国家安全,泄露国家秘密,颠覆国家政权,破坏国家统一的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(3)损害国家荣誉和利益的,损害公共利益的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(4)煽动民族仇恨、民族歧视,破坏民族团结的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(5)破坏国家宗教政策,宣扬邪教和封建迷信的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(6)散布谣言,扰乱社会秩序,破坏社会稳定的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(7)散布淫秽、色情、赌博、暴力、凶杀、恐怖或者教唆犯罪的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(8)侮辱或者诽谤他人,侵害他人合法权益的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(9)含有法律、行政法规禁止的其他内容的。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">5.6 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >用户不得以虚假信息骗取账号名称注册,或其账号头像、简介等注册信息存在违法和不良信息。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">5.7 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >用户不得冒用关联机构或社会名人注册账号名称。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">5.8 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >用户不得以任何形式擅自转让或授权他人使用自己在本平台的实名注册账号。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">5.9 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >非自然人用户认证通过后,认证信息不可随意进行变更;如需变更,须重新提交平台管理员审核。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">5.10 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >用户有义务确保在本平台上发布的需求信息真实、准确,无误导性。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">5.11 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >用户在本平台上所实施行为,不得违反国家法律、法规、行政规章的规定,不得侵犯他人知识产权或其他合法权益的信息,不得违背社会公共利益或公共道德,不得违反本平台的相关规定。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">5.12 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >用户在本平台交易中应当遵守诚实信用原则,不得以干预或操纵发布服务等不正当竞争方式扰乱网上交易秩序,不得从事与网上交易无关的不当行为。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">5.13 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >用户不应采取违法或不正当手段(包括但不限于提供虚假证明材料等方式)在平台获利。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">5.14 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >用户承诺自己在使用本平台实施的所有行为遵守法律、法规、行政规章和本平台的相关规定以及各种社会公共利益或公共道德。如有违反导致任何法律后果的发生,用户将以自己的名义独立承担相应的法律责任。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">5.15 用户如发现其他用户有违法或违反本协议的行为,可以向本平台举报。</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">5.16 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >未经本平台书面允许,用户不得将本平台的任何资料以及在平台上所展示的任何信息作商业性利用(包括但不限于以复制、修改、翻译等形式制作衍生作品、分发或公开展示)。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">5.18 </span
+        ><span style="font-weight: bold"
+          >用户不得使用以下方式登录平台或破坏本平台所提供的服务:</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(1)以任何机器人软件、蜘蛛软件、爬虫软件、刷屏软件或其它自动方式访问或登录本平台;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(2)通过任何方式对本平台内部结构造成或可能造成不合理或不合比例的重大负荷的行为;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(3)通过任何方式干扰或试图干扰本平台的正常工作或本平台上进行的任何活动。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">5.19 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >用户同意接收来自本平台的信息,包括但不限于活动信息、完成信息等。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">5.20 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >用户如为非自然人用户的,其在本平台实名认证的管理人员的所有操作视为用户行为,用户须对其管理人员的行为承担一切责任。用户应要求其管理的人员遵守本协议及</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >本平台相关规则等要求,如用户实名认证的管理人员违反本协议及/或本平台规则等</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >要求的,视为用户违反上述要求,用户应按照本协议要求承担相应责任。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold">第6条 本平台的权利和义务</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">6.1 本平台仅为用户提供一个信息交流、</span
+        ><span style="">服务接洽及证据链采集的第三方平台</span><span style="">,</span
+        ><span style="">是为实施服务提供解决方案的信息服务平台</span><span style="">。</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >6.2
+          本平台有义务在现有技术水平的基础上努力确保整个网上交流平台的正常运行,尽力避免因平台原因导致服务中断或将中断时间限制在最短时间内,保证用户网上交流活动的顺利进行。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >6.3
+          本平台有义务对用户在注册使用本平台信息中所遇到的与注册或任务对接有关的问题及反映的情况及时作出回复。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >6.4
+          本平台有权对用户的注册资料进行审查,对存在任何问题或怀疑的注册资料,本平台有权发出通知询问用户并要求用户做出解释、改正。</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >用户拒不解释、改正的,本平台有权拒绝用户使用本平台。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">6.5</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >因网上信息平台的特殊性,本平台不承担对所有用户的任务发布、对接行为以及与任务对接有关的其他事项进行事先审查的义务,但如发生以下情形,本平台有权无需征得用户的同意限制用户的活动、向用户核实有关资料、发出警告通知、暂时中止、无限期中止及拒绝向该用户提供服务:</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(1)用户以非自然人名义进行认证之后认证主体自行休眠或者经有权机关吊销或撤销的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(2)用户违反本协议或因被提及而纳入本协议的相关规则;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(3)存在用户或其他第三方通知本平台,认为某个用户或具体交易事项存在违法或不当行为,并提供相关证据,而本平台无法联系到该用户核证或验证该用户向本平台提供的任何资料;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(4)存在用户或其他第三方通知本平台,认为某个用户或具体事项存在违法或不当行</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >为,并提供相关证据。本平台以普通非专业人员的知识水平标准对相关内容进行判别,可以明显认为这些内容或行为可能对他方或本平台造成财务损失或承担法律责任。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">6.6 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >根据国家法律、法规、行政规章规定、本协议的内容和本平台所掌握的事实依据,可以认定该用户存在违法或违反本协议行为以及在本平台交易平台上的其他不当行为,本平台有权无需征得用户的同意在本平台上以网络发布形式公布该用户的违法行为,并有权随时作出删除相关信息、终止服务提供等处理。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">6.7 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >本平台有权在不通知用户的前提下,删除或采取其他限制性措施处理下列信息:包括但不限于以规避费用为目的;以炒作信用为目的;存在欺诈等恶意或虚假内容;与本平台服务无关或不是以服务任务对接为目的;存在恶意竞价或其他试图扰乱正常秩序因素;违反法律法规、公共利益或可能严重损害本平台和其他用户合法利益。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold">第7条 免责声明</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">当用户接受该协议时,用户应当明确了解并同意:</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">7.1 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >您在本平台发表的言论和信息如有涉及侵权、违法的情况,该等言论和信息仅代表您个人行为和个人观点。权利人或受害人有权向本平台举报该等情况,本平台在收到并查实后将配合尽快删除,但并不因此代表本平台将承担权利人或受害人因侵权、违法等行为造成的法律责任。同时,若您该侵权、违法行为给本平台造成财产、名誉等损失的,本平台有权要求您承担全部赔偿责任。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">7.2 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >本平台是在现有技术基础上提供的服务,本平台不能随时预见到任何技术上的问题或其他困难。该等困难可能会导致数据损失或其他服务中断。本平台不保证以下事项:</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(1)本平台将符合所有用户的要求;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(2)本平台不受干扰、能够及时提供、安全可靠或免于出错;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(3)本服务使用权的取得结果是正确或可靠的。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">7.3 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >中国生物对本平台涉及的境内外基础运营商的通信网络的故障、技术缺陷、覆盖范围限制、不可抗力、计算机病毒、黑客攻击、客户所在位置、客户关机或其他非中国生物技术能力范围内的事因等造成的服务中断、用户数据d丢失、出现乱码、错误接收、无法接收、迟延接收不承担责任。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">7.4 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >是否经由本平台下载或取得任何资料,由用户自行考虑、衡量并且自负风险,因下载任何资料而导致用户电脑系统的任何损坏或资料流失,用户应负完全责任。希望用户在使用本平台时,小心谨慎并运用常识。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">7.5 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >用户经由本平台取得的建议和资讯,无论其形式或表现,绝不构成中国生物对用户通过本平台进行事宜所作出的任何明示或暗示的保证或担保。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">7.6</span><span style="font-weight: bold"> </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >基于以下原因而造成的利润、商誉、使用、资料损失或其它无形损失,本平台不承担任何直接、间接、附带、特别、衍生性或惩罚性赔偿(即使本平台已被告知该赔偿的可能性):</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(1)本平台的使用或无法使用;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(2)用户的传输或资料遭到未获授权的存取或变更;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(3)本平台中任何第三方之声明或行为;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(4)本平台在任务服务对接中为用户提供成交机会,推荐对接方;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline">(5)本平台其它相关事宜。</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">7.7 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >本平台提供与其它互联网上的平台或资源的链接,用户可能会因此链接至其它运营商经营的平台,但不表示本平台与这些运营商有任何关系。其它运营商经营的平台均由各经营者自行负责,不属于本平台控制及负责范围之内。对于存在或来源于此类平台或资源的任何内容、广告、物品或其它资料,本平台亦不予保证或负责。因使用或依赖任何此类平台或资源发布的或经由此类平台或资源获得的任何内容、物品或服务所产生的任何损害或损失,本平台不负任何直接或间接的责任。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">7.9 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >就下列情形的发生,本平台不承担任何法律责任:</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(1)由于您将账号、密码告知他人或与他人共享注册账户,由此导致的任何个人信息的泄漏,或其他非因本平台原因导致的个人信息的泄漏;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(2)您在申请使用平台服务时因个人资料有任何变动,但未能及时更新,由此导致个人信息不真实而引起的问题及后果;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(3)本平台根据法律规定、政策要求或行政/司法机关的要求对外提供您的个人信息或交易记录;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(4)因不可抗力导致的任何后果。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">7.10 </span><span style="font-weight: bold">中国生物</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >保留判定您的行为是否符合本服务协议要求的权利,如果您违背了本服务协议的规定,</span
+        ><span style="font-weight: bold">中国生物</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >有权中止或终止本平台服务。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold">第8条 知识产权</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">8.1 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >本平台及本平台所使用的任何相关软件、程序、内容,包括但不限于作品、图片、档案、资料、平台构架、平台版面的安排、网页设计、经由本平台向用户呈现的资讯,均由本平台或法定权利人依法享有相应的知识产权,包括但不限于著作权、商标权、专利权或其它专属权利等,受到相关法律的保护。未经本平台或权利人明示授权,用户不得擅自复制、传播、展示、镜像、上传、下载、使用、修改、出租、出借、出售、散布本平台及本平台所使用的上述任何资料和资源,或根据上述资料和资源制作成任何种类产品,或者从事任何其他侵犯知识产权的行为,否则,平台有权追求侵权人的相关法律责任。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">8.2 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >本平台授予用户不可转移及非专属的使用权,使用户可以通过单独计算机使用本平</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >台的目标代码(以下简称“软件”),但用户不得且不得允许任何第三方复制、修改、创作</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >衍生作品、进行还原工程、反向组译,或以其它方式破译或试图破译源代码,或出售、转</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >让“软件”或对“软件”进行再授权,或以其它方式移转“软件”之任何权利。用户同意不以任何方式修改“软件”,或使用修改后的“软件”。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >8.3
+          您在使用中国生物服务时利用本平台及服务所发表上传的文字、图片、视频等原创信息的知识产权归您所有。</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >您在此明确授权:您上传到本平台服务器上的任何内容,您皆授予本平台在世界范围内基于商业或非商业目的,永久的、免费的以复制、翻译、发行、重新编排、节选等方式使用,或采用任何形式再传播或创作改变或衍生作品的权利。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">8.4 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >基于对数据的合法加工而获得的具有竞争性的数据权益,除法律法规另有规定外,中国生物享有独立的使用权益而无须获得您的同意。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">8.5 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >在未得到著作权人的授权时,您不得将他人的作品全部或部分复制发表到本平台系统。如您上传的内容侵犯了第三方的著作权或其他权利,本平台将不承担任何法律责任,所有后果由您自行承担。如果第三方提出关于著作权的异议,本平台有权根据实际情况删除相关的内容,并有权追究您的法律责任。因您的侵权行为给本平台或任何第三方造成损失的,您应负责全部赔偿责任。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >8.6
+          关于信息内容的投诉或举报。若您在使用平台过程中,不慎受到合法权益的侵犯,您有权通知中国生物采取必要措施进行处置。若您在使用平台过程中,发现存在违法违规或违反本服务相关规则的情况,您也有权向中国生物发起举报,中国生物亦会及时采取必要措施(删除、屏蔽、断开链接或限制使用功能等)进行处置。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">8.7 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >内容维权授权。在法律法规允许的范围内,您同意并授权中国生物就侵犯您合法权益的行为(包括但不限于私自复制、使用、编辑、抄袭等行为)采取任何形式的法律行动,包括但不限于投诉、诉讼等必要的维权措施。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">8.8 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >用户不得经由非本平台所提供的界面使用本平台。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold">第9条 用户行为规范</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">9.1 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >您保证合理地使用本平台服务,并接受本协议和中国生物适时制定并发布的其他政策、规则、公告声明。</span
+        ><span style="font-weight: bold; text-decoration: underline"> </span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">9.2 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >行为禁止:您可在本协议约定的范围内使用本平台及服务,您不得利用本平台从事以下行为:</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(1)超出授权或恶意使用平台服务;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(2)利用本平台发表、传送、传播、储存危害国家安全、国家统一、社会稳定的内容,或侮辱诽谤、色情、暴力、引起他人不安及任何违反国家法律法规政策的内容,或者设置含有上述内容的网名、角色名,发布、传送、传播违法广告信息、营销信息及垃圾信息等;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(3)利用本平台侵害他人知识产权、肖像权、隐私权、名誉权、个人信息等合法权利或权益;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(4)恶意虚构或协助虚构事实、评价等信息或数据;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(5)进行任何危害计算机网络安全的行为,包括但不限于:使用未经许可的数据或进入未经许可的服务器/账户;未经允许进入公众计算机网络或者他人计算机系统并删除、修改、增加存储信息;未经许可,企图探查、扫描、测试本“软件”系统或网络的弱点或其它实施破坏网络安全的行为;企图干涉、破坏本“软件”系统或网站的正常运行,故意传播恶意程序或病毒以及其他破坏干扰正常网络信息服务的行为;伪造TCP/IP数据包名称或部分名称;利用本平台及服务上传任何病毒、木马,或者蠕虫等危害网络健康的内容;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(6)对本平台进行反向工程、反向编译或反向汇编或以其它方式企图发现平台的源代码和算法,未经许可修改、禁用软件的任何功能或创建基于软件的衍生作品。去除本平台或文档上的任何所有权声明或标签,或将其他软件与本平台合并;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(7)进行任何破坏中国生物提供服务公平性或者其他影响应用正常秩序的行为,如主动或被动刷分、合伙作弊、使用外挂或者其他的作弊软件、利用BUG(又叫“漏洞”或者“缺陷”)来获得不正当的非法利益,或者利用互联网或其他方式将外挂、作弊软件、BUG公之于众;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(8)从事其他法律法规、政策及公序良俗、社会公德禁止的行为以及侵犯其他个人、公司、社会团体、组织的合法权益的行为。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">9.3 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >信息内容规范:为了营造良好网络生态,保障公民、法人和其他组织的合法权益,维护国家安全和公共利益,中国生物将根据法律、行政法规,营造清朗的网络空间,并开展弘扬正能量、处置违法和不良信息等相关活动。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">9.3.1 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >您不得制作、复制、发布含有下列内容的违法信息:</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(1)反对中国宪法所确定的基本原则的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(2)危害国家安全,泄露国家秘密,颠覆国家政权,破坏国家统一的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(3)损害国家荣誉和利益的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(4)歪曲、丑化、亵渎、否定英雄烈士事迹和精神,以侮辱、诽谤或者其他方式侵害英雄烈士的姓名、肖像、名誉、荣誉的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(5)宣扬恐怖主义、极端主义或者煽动实施恐怖活动、极端主义活动的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(6)煽动民族仇恨、民族歧视,破坏民族团结的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(7)破坏国家宗教政策,宣扬邪教和封建迷信的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(8)散布谣言,扰乱经济秩序和社会秩序的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(9)散布淫秽、色情、赌博、暴力、凶杀、恐怖或者教唆犯罪的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(10)侮辱或者诽谤他人,侵害他人名誉、隐私和其他合法权益的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(11)法律、行政法规禁止的其他内容。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">9.3.2 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >中国生物也将依法采取措施,防范和抵制制作、复制、发布含有下列内容的不良信息:</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(1)使用夸张标题,内容与标题严重不符的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(2)炒作绯闻、丑闻、劣迹等的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(3)不当评述自然灾害、重大事故等灾难的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(4)带有性暗示、性挑逗等易使人产生性联想的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(5)展现血腥、惊悚、残忍等致人身心不适的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(6)煽动人群歧视、地域歧视等的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(7)宣扬低俗、庸俗、媚俗内容的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(8)可能引发未成年人模仿不安全行为和违反社会公德行为、诱导未成年人不良嗜好等的;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(9)其他对网络生态造成不良影响的内容。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">9.4 </span
+        ><span style="font-weight: bold; text-decoration: underline">信息内容的使用规范</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >未经中国生物书面许可,您不得自行或授权、允许、协助任何第三人对本平台中信息内容进行如下行为:</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(1)复制、读取、采用本平台的信息内容,用于任何形式的商业用途;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(2)擅自编辑、整理、编排平台及相关服务的信息内容后在平台及相关服务的源页面</span
+        ><span style="font-weight: bold; text-decoration: underline">以外的渠道进行展示;</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(3)采用不正当方式,自行或协助第三人对本平台及相关服务的信息内容产生流量、</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >阅读量或交易引导、转移、劫持等不利影响。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold">第10条 个人信息保护与隐私政策</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >10.1
+          尊重用户隐私并保护您的个人信息安全是中国生物的一贯态度,平台将会采取合理的措施保护您的个人信息与隐私。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">10.2 信息使用</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(1)中国生物有权在遵守法律法规的前提下,以明示的方式获取、使用、储存和分享您</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >的个人信息。中国生物不会在未经您授权时,公开、编辑或透露您的个人信息及您保存在中国生物的非公开内容。您同意并保证:本平台有权依法收集使用您的相关信息。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">(2)本平台不会向任何人出售或出借用户的个人或法人信息,</span
+        ><span style=""
+          >(因业务需要,自然人用户需要通过本平台合作指定的第三方企业进行代缴税款的除外),</span
+        ><span style="">除非事先得到用户得许可;</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(3)本平台亦不允许任何第三方以任何手段收集、编辑、出售或者无偿传播用户的个</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >人或法人信息。任何用户如从事上述活动,一经发现,本平台有权立即终止与该用户的服务协议,查封其账号。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(4)您同意,中国生物有权通过cookie等技术收集您的使用、行为信息,并在经过数据脱敏使之不再指向、关联到您个人的身份信息时,自由使用脱敏后的纯商业数据。当然,您也可根据自己的偏好删除Cookie,但如果您这么做,则需要在每一次访问中国生物的网站时亲自更改用户设置。目前删除Cookie的一般路径是浏览器:“设置-清除数据”,或者将手机系统还原/清除。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">10.3 信息披露</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >用户的信息将在下述情况下部分或全部被披露:</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(1)经用户同意,向第三方披露;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(2)根据法律的有关规定,或者行政、司法机关的要求,向第三方或者行政、司法机关披露;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(3)若用户出现违反中国有关法律或者平台规定的情况,需要向第三方披露;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(4)为提供您所要求的产品和服务,而必须和第三方分享用户的个人或法人信息(</span
+        ><span style="font-weight: bold; text-decoration: underline">例</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >如自然人用户需要通过本平台合作指定的第三方企业进行代缴税款的</span
+        ><span style="font-weight: bold; text-decoration: underline">);</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(5)为保护您、本平台的其他用户或本平台的关联方的合法权益,本平台可能将您的</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >个人信息用于预防、发现、调查以下事项:欺诈、危害安全、违法或违反与本平台或关联方协议、政策或规则的行为;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(6)在遵循隐私权保护以及其他相应的保密安全措施的前提下,允许本平台将您的个</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >人信息提供给相关合作方,让其根据本平台指令处理相关信息;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(7)其它本平台根据法律或者平台规定认为合适的披露。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >若您不同意以上内容,请立即停止使用中国生物平台服务。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >用户或者第三方申请本平台披露其他用户信息的,本平台有权视实际情况要求申请人出具申请书,申请书内容应包含申请披露的信息范围、用途及使用承诺等内容。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">10.4 信息安全</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >(1)中国生物将运用各种安全技术和程序建立完善的管理制度来保护您的个人信息及隐私安全,以免遭受未经授权的访问、使用或披露。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline">(2)</span
+        ><span style=""
+          >如果用户发现自己的个人或法人信息泄密,尤其是用户账户或密码发生泄露,请用户立即联络本平台客服,以便中国生物采取相应措施。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">10.5 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >在遵守本协议项下特别约定的个人信息保护与隐私政策外,中国生物希望您认真并完整阅读中国生物特别针对平台而制定并适时发布的《隐私权政策》,这将更有助于保障您的个人信息。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold">第11条 信息推送</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >您同意在接受中国生物提供服务的同时,允许中国生物在遵守法律法规的前提下自行或由第三方向您发送、展示提示信息(包括商业与非商业信息)。如您对发送、推荐的信息不感兴趣,您可以基于中国生物提供的相关技术选项,控制系统向您展示或不展示/减少展示相关类型的信息。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold">第12条 不可抗力</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">12.1</span><span style="font-weight: bold"> </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >鉴于互联网服务的特殊性,您理解并同意中国生物在因不可抗力或者其他意外事件导致平台及服务障碍不能正常运作、服务中断或延迟等情形下,对您在本平台所遭受的损失(包括但不限于财产、收益、数据资料等方面的损失或其它无形损失)无需承担责任。同时,因不可抗力使得本协议的履行不可能、不必要或者无意义的,任何一方均可单方解除本协议且无需承担违约责任。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >本协议所称之不可抗力意指不能预见、不能避免并不能克服的客观情况,包括但不限于战争、台风、水灾、火灾、雷击或地震、罢工、暴动、法定疾病、停电、计算机病毒、木马、其他恶意程序、黑客攻击、网络病毒、电信部门技术管制、网络运营公司技术调整或故障、系统维护、政府行为或任何其它自然或人为造成的灾难等客观情况。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">12.2 </span
+        ><span style=""
+          >若任何一方由于不可抗力无法履行协议,该方须及时通知另一方以便减轻另一方可能遭受的损失,并应在合理的时间内提供不可抗力的证明。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold">第13条 保密</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >用户保证在使用本平台过程中所获悉的属于本平台、本平台其他用户及其他第三方的无法自公开渠道获得的文件及资料(包括但不限于商业秘密、公司计划、运营活动、财务信息、技术信息、经营信息及其他商业秘密)予以保密</span
+        ><span style="">,保密期限为【</span><span style="font-family: Calibri">3</span
+        ><span style="">】年</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >。未经该资料和文件的原提供方同意,用户不得向第三方泄露该商业秘密的全部或者部分内容。但法律、法规、行政规章另有规定或者双方另有约定的除外。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold">第14条 违约责任</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">14.1 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >如果您在使用本平台服务的过程中违反本协议约定、本平台其他规则、协议,或其他可适用的法律法规、国家政策、合同约定、平台规则或公告的,本平台有权要求您改正或直接采取一切必须要的措施以减轻或消除您的不当行为,并可根据违规情形严重情况要求您承担违约责任,具体措施包括但不限于:</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline">(1)警告;</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline">(2)违规情形的公示;</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(3)修改或屏蔽违规内容,包括但不限于将违规信息移除;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(4)限制信息发布,限制平台其他功能的使用;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(5)部分或全部扣除相关费用;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(6)部分或全部扣除保证金(如有);</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(7)冻结用户账号,中断向您提供本平台服务;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(8)休眠您的账号,终止向您提供服务,和/或拒绝或限制您再行注册或使用本平台服务;</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >(9)要求您承担损害赔偿责任。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">14.2 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >若您的行为给我们造成损失的(包括但不限于直接损失、名誉损失、第三方的罚款、索赔等),我们有权全额向您追偿,如您在本平台中有保证金等财产权益的,我们有权冻结。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">14.3 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >本协议终止后,除法律有明确规定外,本平台无义务向您或您指定的第三方披露您账户中的任何信息。本协议终止后,本平台仍享有下列权利:根据法律规定,继续保存您留存于本平台的的各类信息;对于您过往的违约行为,本平台仍可依据本协议向您追究违约责任。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">14.4 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >本协议及本平台其他规则、协议项下所述“损失”或“赔偿责任”,均包括但不限于自身损失、向第三方支付的违约金、赔偿金及因实现权利而产生的律师费、取证费、诉讼/仲裁费、</span
+        ><span style="font-weight: bold; text-decoration: underline">财产保全费。</span>
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold">第15条 交易纠纷解决方式</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >15.1
+          本协议及其规则的有效性、履行和与本协议及其规则效力有关的所有事宜,将受中华人民共和国法律管辖,任何争议仅适用中华人民共和国法律。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >15.2
+          本平台有权受理并调处用户之间因承接服务产生的纠纷。因本平台非司法机关,您完全理解并承认,本平台对证据的鉴别能力及对纠纷的处理能力有限,调节纠纷完全是基于用户委托,不保证处理结果符合用户的期望,本平台有权决定是否参与争议的调处。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >15.3
+          凡因履行本协议及其规则发生的纠纷以及在本平台上接洽服务产生的所有纠纷,各方可协商解决,若协商不成的,</span
+        ><span style=""
+          >双方就本协议所发生的及/或与本协议相关的争议,均提交本平台所在地仲裁委员会调解中心按照其调解规则进行调解。不愿调解或者调解不成时,均提交深圳仲裁委员会依据其现行有效的仲裁规则进行仲裁。【个人信息使用授权书约定的争议解决方式为法院诉,建议两份材料保持一致】</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >15.4
+          用户已知悉并确认:对于因用户使用本平台争议引起的纠纷,仲裁机构可以通过手机短信或电子邮件等现代通讯方式送达法律文书;指定接收法律文书的手机号码或电子邮箱为用户注册时输入的手机号码或电子邮箱;仲裁机构可采取一种或多种送达方式送达法律文书,送达时间以上述送达方式中最先送达的为准;上述送达方式适用于各个仲裁阶段;用户保证送达地址准确、有效,如果提供的地址不确切,或者不及时告知变更后的地址,使法律文书无法送达或未及时送达,自行承担由此可能产生的法律后果。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold">第16条 完整协议</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >16.1
+          本协议由本协议条款与本平台公示的各项规则组成,相关名词可互相引用参照,如有不同理解,以本协议条款为准。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >16.2
+          用户一旦确认对本协议理解和认同,即对本协议所有组成部分的内容理解并认同,一旦用户使用本平台提供的服务,即受本协议所有组成部分的约束。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold">第17条 协议修改及解释</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >17.1
+          本协议内容包括本协议条款及平台不时发布或组织订立的各类协议、平台规则和公告。所有签署内容均为本协议不可分割的组成部分,与本协议正文具有同等法律效力。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">17.2 修改与更新:</span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >中国生物有权根据法律法规变化、维护平台交易秩序、保护用户合法权益的需要,在必要时修改本协议(包括适时制定并发布其他政策、规则、公告声明),当您登陆本平台时会自动弹出变更后的协议,若您同意变更后的内容,请点击“同意”按钮并继续登陆本平台使用平台服务,若您不同意变更后的内容,您将无法使用本平台服务,同时应及时与平台客服取得联系,本平台将根据情况审核确认给予您一定的时限完成您账户下尚未完结的事项,在已有业务全部完结且在本平台项下财务结清后休眠您的账户,但此期间您将无法继续开展新的业务。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold">第18条 通知与送达</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">18.1 </span><span style="font-weight: bold">有效联系方式</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >您在注册成为本平台用户并接受本平台服务时,您应该向本平台提供真实有效的联系方式(包括您的电子邮件地址、联系电话、联系地址等),对于联系方式发生变更的,您有义务及时更新有关信息,并保持可被联系的状态。您在注册本平台用户时生成的用于登陆本平台接收站内信、系统消息的用户账号,也作为您的有效联系方式。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >本平台将向您的上述联系方式的其中之一或其中若干向您送达各类通知,而此类通知的内容可能对您的权利义务产生重大的有利或不利影响,请您务必及时关注。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >您有权通过您注册时填写的手机号码或者电子邮箱获取您感兴趣的商品广告信息、促销优惠等商业性信息;您如果不愿意接收此类信息,您有权通过本平台提供的相应的退订功能进行退订。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">18.2 </span><span style="font-weight: bold">通知与送达</span>
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >本平台通过上述联系方式向您发出通知,其中以电子的方式发出的书面通知,包括但不限于在本平台公告,向您提供的联系电话发送手机短信,向您提供的电子邮件地址发送电子邮件,向您的账号发送系统消息以及站内信息,在发送成功后即视为送达;以纸质载体发出的书面通知,按照提供联系地址交邮后的第五个自然日即视为送达。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >对于在本平台上因交易活动引起的任何纠纷,您同意司法机关(包括但不限于人民法院)可以通过手机短信、电子邮件等现代通讯方式或邮寄方式向您送达法律文书(包括但不限于诉讼文书)。您指定接收法律文书的手机号码、电子邮箱等联系方式为您在平台注册、更新时提供的手机号码、电子邮箱联系方式以及在注册用户时生成的用户账号,司法机关向上述联系方式发出法律文书即视为送达。您指定的邮寄地址为您的法定联系地址或您提供的有效联系地址。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >您同意司法机关可采取以上一种或多种送达方式向您达法律文书,司法机关采取多种方式向您送达法律文书,送达时间以上述送达方式中最先送达的为准。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >您同意上述送达方式适用于各个司法程序阶段。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 0pt;
+          margin-bottom: 0pt;
+          text-indent: 21.2pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold; text-decoration: underline"
+          >你应当保证所提供的联系方式是准确、有效的,并进行实时更新。如果因提供的联系方式不确切,或不及时告知变更后的联系方式,使法律文书无法送达或未及时送达,由您自行承担由此可能产生的法律后果。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold">第19条 附则</span>
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">19.1 </span
+        ><span style="font-weight: bold; text-decoration: underline"
+          >用户在注册或使用前应认真阅读本协议的全部内容,如对协议有任何疑问,可向中国生物咨询。本协议对注册成功之后的用户产生法律约束力,届时用户不得以未阅读本协议内容或未获得本平台对问题的解答等为由,主张本协议无效或要求撤销本协议。</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">19.2 本协议服务期限自本协议生效之日起至用户账户休眠之日止。</span>
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">19.3 本协议的最终解释权归中国生物所有。</span>
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          line-height: 150%;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="font-weight: bold">第20条 联系中国生物</span>
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style=""
+          >如果您有任何的疑问、投诉、意见和建议,欢迎您与中国生物沟通反馈。中国生物的联系方式见下:</span
+        >
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">客服邮箱:yxhg2024@sinopharm.com</span>
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 21pt;
+          text-align: justify;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">联系地址:北京市朝阳区双桥路乙2号院2号楼</span>
+      </p>
+      <p
+        style="
+          margin-top: 7.8pt;
+          margin-bottom: 7.8pt;
+          text-indent: 15.75pt;
+          text-align: justify;
+          widows: 0;
+          orphans: 0;
+          font-size: 10.5pt;
+        "
+      >
+        <span style="">(正文完)</span>
+      </p>
+      <div style="-aw-headerfooter-type: footer-primary">
+        <p style="margin-top: 0pt; margin-bottom: 0pt; widows: 0; orphans: 0; font-size: 9pt">
+          <span style="height: 0pt; display: block; position: absolute; z-index: -65536"></span
+          ><span style="font-family: Calibri">&nbsp;</span>
+        </p>
+      </div>
+    </div>
+  </view>
+</template>
+
+<script>
+export default {
+  name: 'platformUsers'
+}
+</script>
+
+<style lang="scss" scoped>
+p:not(.title) {
+  text-indent: 2em;
+  line-height: 1.5em;
+}
+.underline-bold {
+  text-decoration: underline;
+  font-weight: bold;
+}
+.bold-text {
+  font-weight: bold;
+}
+</style>

+ 385 - 0
src/pages-sub-packages/agreement/privacyPolicy.vue

@@ -0,0 +1,385 @@
+<!--
+ * @desc 隐私权政策
+-->
+
+<template>
+  <view class="pl20 pr20">
+    <p class="title mt20 bold-text tc">中国生物隐私权政策</p>
+    <p class="bold-text">本版生效日期:【2024】年【10】月【14】日</p>
+    <p class="bold-text">概述</p>
+    <p class="bold-text">
+      中国生物技术股份有限公司及其附属、关联公司(以下称“中国生物”或“我们”)非常注重保护用户(“您”)的个人信息及隐私,我们深知个人信息对您的重要性,并将按照法律法规要求和业界成熟的安全标准,采取相应的安全保护措施来保护您的个人信息。我们将通过本政策向您说明中国生物会如何收集、存储、保护、使用及对外提供您的信息,并说明您享有的权利。其中要点如下:
+    </p>
+    <p class="bold-text">
+      1.为了便于您了解您在使用我们的服务时,我们需要收集的信息类型与用途,我们将结合具体服务向您逐一说明。
+    </p>
+    <p class="bold-text">2.为了向您提供服务所需,我们会按照合法、正当、必要的原则收集您的信息。</p>
+    <p class="bold-text">
+      3.如果为了向您提供服务而需要将您的信息共享至第三方,我们将评估该第三方收集信息的合法性、正当性、必要性。我们将要求第三方对您的信息采取保护措施并且严格遵守相关法律法规与监管要求。另外,我们会按照法律法规及国家标准的要求以确认协议、具体场景下的文案确认、弹窗提示等形式征得您的同意或确认第三方已经征得您的同意。
+    </p>
+    <p class="bold-text">
+      4.如果为了向您提供服务而需要从第三方获取您的信息,我们将要求第三方说明信息来源,并要求第三方保障其提供信息的合法性;如果我们开展业务需进行的个人信息处理活动超出您原本向第三方提供个人信息时的授权范围,我们将征得您的明确同意。
+    </p>
+    <p class="bold-text">
+      5.您可以通过本政策介绍的方式访问和管理您的信息、设置隐私功能、注销中国生物账户或进行投诉举报。
+    </p>
+    <p class="bold-text">您可以根据以下索引阅读相应章节,进一步了解本政策的具体约定:</p>
+    <p class="bold-text">一、我们如何收集和使用您的个人信息</p>
+    <p class="bold-text">二、我们如何使用Cookie、Beacon、Proxy等技术</p>
+    <p class="bold-text">三、我们如何存储和保护信息</p>
+    <p class="bold-text">四、我们如何共享、转让、公开披露您的信息</p>
+    <p class="bold-text">五、您如何管理您的信息</p>
+    <p class="bold-text">六、对第三方责任的声明</p>
+    <p class="bold-text">七、我们如何保护未成年人的信息</p>
+    <p class="bold-text">八、本政策的适用及更新</p>
+    <p class="bold-text">九、本政策中关键词说明</p>
+    <p>
+      <span class="bold-text">中国生物技术股份有限公司</span>
+      (注册地址:北京市朝阳区双桥路乙2号院2号楼;客服邮箱:yxhg2024@sinopharm.com)尊重并保护您的隐私。您使用我们的服务时,我们将按照中国生物隐私权政策(以下简称“本政策”)收集、存储、使用及对外提供您的信息。同时,我们会通过本政策向您说明,我们如何为您提供访问、更新、管理和保护您的信息的服务。
+      <text class="bold-text"
+        >本政策与您使用我们的服务关系紧密,我们建议您仔细阅读并理解本政策全部内容,做出您认为适当的选择。我们努力用通俗易懂、简明扼要的文字表达,并对本政策中与您的权益存在重大关系的条款和个人信息,采用粗体字进行标注以提示您注意。</text
+      >
+    </p>
+    <p>
+      为了遵守国家法律法规及监管规定(例如:进行实名制管理、履行反洗钱职责、安全管理),也为了向您提供服务及提升服务质量,我们需要收集、存储、使用及对外提供您的信息。您同意我们按照本政策约定处理您的信息,以便您享受优质、便捷、个性化的服务,同时更好地保护您的账户安全。
+    </p>
+    <p class="bold-text">一、我们如何收集和使用您的个人信息</p>
+    <p>在您使用我们的产品/服务时,您需要/可以选择授权我们收集和使用个人信息的场景包括:</p>
+    <p>
+      1.为了向您提供我们产品/服务的基本功能,您需要授权我们收集、使用必要信息的情形,如您拒绝提供前述必要信息,您将无法正常使用我们的产品/服务;
+    </p>
+    <p>
+      2.为了向您提供我们产品/服务的拓展功能,您可以选择授权我们收集、使用信息的情形,如您拒绝提供前述信息,您将无法正常使用相关附加功能或无法实现我们拟达到的功能效果,但并不会影响您正常使用我们产品/服务的基本功能。
+    </p>
+    <p>3.以下需要/选择授权场景内容如果有变动,我们将按实际情况进行调整。</p>
+    <p class="bold-text">(一)您需要授权我们收集和使用个人信息的场景</p>
+    <p class="bold-text">
+      我们会遵循正当、合法、必要的原则,出于本政策所述的下列目的收集和使用您的个人信息。
+    </p>
+    <p class="bold-text">1.帮助您成为我们的用户</p>
+    <p>
+      为遵守法律法规的要求,以及向您提供更个性化、更便捷的服务,在您注册成为中国生物用户时,您需要<text
+        class="bold-text"
+        >至少提供手机号码以创建中国生物账号;</text
+      >如果您仅需使用浏览、搜索等功能,您无需注册成为我们的用户以及提供上述信息。在提供账号信息的过程中,如果您愿意额外补充如下个人信息,将有助于我们向您提供更为个性化的服务:包括您的姓名、身份证号、头像、个性签名等。如果您不提供该等信息,不会影响您享受中国生物产品/服务的基本功能。
+    </p>
+    <p class="bold-text">2. 门诊数据收集</p>
+    <p>
+      当您在中国生物小程序(即营销行为管理小助手)上进行门诊数据收集证据链上传时,您需要
+      <text class="bold-text"
+        >提供关联执行包信息、标题、调研类型、调查时间、所属地区、位置打卡、数据情况上传、调研总结等。</text
+      >
+    </p>
+    <p class="bold-text">3.市场信息收集</p>
+    <p>
+      当您在中国生物小程序(即营销行为管理小助手)上进行市场信息收集证据链上传时,您需要
+      <text class="bold-text"
+        >提供关联执行包信息、调研主题、调研对象、信息类型、调研时间、所属地区、调研文件上传、调研总结等。</text
+      >
+    </p>
+    <p class="bold-text">4. 库存数据收集</p>
+    <p>
+      当您在中国生物小程序(即营销行为管理小助手)上进行库存数据收集证据链上传时,您需要
+      <text class="bold-text"
+        >提供关联执行包信息、调查类别、标题、调查对象、库存数量、调研时间、所属地区、位置打卡、库存情况上传、调研总结等。</text
+      >
+    </p>
+    <p class="bold-text">5. 医学警戒信息收集</p>
+    <p>
+      当您在中国生物小程序(即营销行为管理小助手)上进行医学警戒信息收集证据链上传时,您需要
+      <text class="bold-text"
+        >提供关联执行包信息、标题、调查类型、调查时间、所属地区、调查情况上传、调查总结等。</text
+      >
+    </p>
+    <p class="bold-text">6. 问卷信息收集</p>
+    <p>
+      当您在中国生物小程序(即营销行为管理小助手)上进行问卷信息收集证据链上传时,您需要
+      <text class="bold-text"
+        >提供关联执行包信息、问卷标题、调研对象、调查时间、所属地区、位置打卡、调查问卷上传、调查总结等。</text
+      >
+    </p>
+
+    <p class="bold-text">7. 产品相册分享</p>
+    <p>
+      当您在中国生物小程序(即营销行为管理小助手)上进行产品相册分享时,您需要
+      <text class="bold-text">提供关联执行包信息、分享文章的标题、转发时间等。</text
+      >其中,转发分享过程中,中国生物小程序(即营销行为管理小助手)会自动唤起并跳转微信转发界面。中国生物不会获取此界面的微信好友或者微信群信息,也不会获取您转发分享该文章的对象信息。
+    </p>
+
+    <p class="bold-text">8. 学术信息交流</p>
+    <p>
+      当您在中国生物小程序(即营销行为管理小助手)上进行学术文章分享时,您需要
+      <text class="bold-text">提供关联执行包信息、分享文章的标题、转发时间等。</text
+      >其中,转发分享过程中,中国生物小程序(即营销行为管理小助手)会自动唤起并跳转微信转发界面。中国生物不会获取此界面的微信好友或者微信群信息,也不会获取您转发分享该文章的对象信息。
+    </p>
+
+    <p class="bold-text">9. 众包广场</p>
+    <p>
+      您可以通过众包广场查看领取进度,包括审核通过、审核未通过、已终止,全部收回、已终止,剩余收回等。同时,当您领取的某个执行包任务全部完成、上级机构审核通过后,您可以通过“工作台-众包广场-已领取-该执行包-执行包详情-导出报告”导出该执行包对应的报告。
+    </p>
+
+    <p class="bold-text">10. 意见反馈</p>
+    <p>
+      我们<span class="bold-text"
+        >会收集您通过“我的-意见反馈”提交的意见反馈、您与客服团队联系时提供的信息及您参与问卷调查时向我们发送的信息。</span
+      >
+    </p>
+    <p class="bold-text">11. 执行包自动提交审核</p>
+    <span class="bold-text"
+      >当您使用中国生物小程序进行学术拜访服务、门诊数据收集、市场信息收集、库存数据收集、医学警戒信息管理、问卷信息收集、学术会议服务、线上学术会议、健康教育课堂、产品相册分享、学术信息交流等任务时,我们会收集您提交的任务信息,自动汇总到关联执行包,并传给您绑定的上级机构进行审核。</span
+    >同时,执行包任务审核详情在上级机构管理员审核时实时回传给您,您通过按执行包途径,即“接包记录-该执行包-任务列表”,看到各项任务审核情况,或者通过按单个任务“我的-任务完成记录”看到该任务审核情况。
+
+    <p class="bold-text">(二)您可以选择授权我们收集和使用个人信息的场景</p>
+
+    <p>
+      为向您提供个性化的服务,您可以选择使用我们提供的拓展功能,我们会在符合法律规定并根据您具体授权的情况下收集并使用如下信息。这类信息将在您选择的具体功能和业务场景中进行收集,如果您不提供这些信息,不会影响您使用中国生物的基本功能。
+    </p>
+
+    <p class="bold-text">12. 学术会议服务</p>
+    <p>
+      当您在中国生物小程序上进行学术会议服务证据链上传时,
+      <text class="bold-text"
+        >您需要提供关联执行包信息、会议主题、会议时间、会议时长、区县专家人数、会议报告、会议议程、会议签到表、现场照片、会议邀请函、企业批复证明、会议总结。其中,针对会议报告、会议议程、会议签到表、现场照片、会议邀请函、企业批复证明,需要您授权使用拍照功能或者从手机相册选择照片。</text
+      >
+      如果您愿意,可以额外补充如下信息:会议人次、位置打卡(需要您授权在使用小程序期间获取位置信息)、外采费用。
+    </p>
+    <p class="bold-text">13. 线上学术会议</p>
+    <p>
+      当您在中国生物小程序上进行线上学术会议服务证据链上传时,
+      <text class="bold-text"
+        >您需要提供关联执行包信息、会议主题、预约会议编号、会议时间、会议时长、会议人次、会议议程、会议内容、线上会议截图、参会人列表截图、企业批复证明、会议总结。其中,针对会议议程、会议内容、线上会议截图、参会人列表截图、企业批复证明,需要您授权使用拍照功能或者从手机相册选择照片。</text
+      >
+    </p>
+    <p class="bold-text">14. 健康教育课堂</p>
+    <p>
+      当您在中国生物小程序上进行健康教育课堂证据链上传时,
+      <text class="bold-text"
+        >您需要提供关联执行包信息、培训主题、培训时间、主讲人、会议人次、位置打卡、培训总结、培训议程、现场照片、培训内容、培训总结。其中,针对培训总结、培训议程、现场照片、培训内容,需要您授权使用拍照功能或者从手机相册选择照片。</text
+      >
+    </p>
+    <p class="bold-text">15. 学术拜访服务</p>
+    <p>
+      当您在中国生物小程序上进行学术拜访服务证据链上传时,
+      <text class="bold-text">您需要授权在使用小程序期间获取位置信息。</text>
+      进行专业拜访和专项拜访证据链上传时,
+      <text class="bold-text"
+        >您需要提供关联执行包信息、拜访类型、拜访对象、拜访主题、提纲/报告、现场照片、拜访总结。其中,针对提纲/报告、现场照片,需要您授权使用拍照功能或者从手机相册选择照片。</text
+      >
+    </p>
+
+    <p class="bold-text">(三)征得同意的例外</p>
+    <p class="bold-text">请您知悉,以下情形中,我们收集、使用个人信息无需征得您的授权同意:</p>
+    <p>(1)与国家安全、国防安全直接相关的;</p>
+    <p>(2)与公共安全、公共卫生、重大公共利益直接相关的;</p>
+    <p>(3)与犯罪侦查、起诉、审判和判决执行等直接相关的;</p>
+    <p>(4)出于维护您或他人的生命、财产等重大合法权益目的但又很难得到您本人同意的;</p>
+    <p>(5)所收集的个人信息是您自行向社会公众公开的;</p>
+    <p>(6)从合法公开披露的信息中收集个人信息,例如:合法的新闻报道、政府信息公开等渠道;</p>
+    <p>(7)根据您的要求签订和履行合同所必需的;</p>
+    <p>(8)用于维护所提供的服务的安全稳定运行所必需的,例如:发现、处置商品或服务的故障;</p>
+    <p>(9)法律法规规定的其他情形。</p>
+    <p class="bold-text">
+      请注意,单独或与其他信息相结合无法识别您的身份或者与您直接建立联系的信息,不属于个人信息。如果我们将单独无法与任何特定个人建立联系的信息与其他信息结合用于识别自然人个人身份,或者将其与个人信息结合使用,则在结合使用期间,此类信息将被视为个人信息。
+    </p>
+    <p class="bold-text">(四)个人信息的使用规则</p>
+    <p>
+      为满足您的个性化需求,维护、改进我们的产品或服务质量,我们会在符合法律规定并根据您具体授权的情况下使用如下信息:
+    </p>
+    <p class="bold-text">
+      1.
+      我们可能会收集您的任务信息、浏览及转发信息,以及将您在中国生物上使用某项服务中提供的信息与来自其他服务中的信息结合起来,进行综合统计、分析,用来在日常维护过程中对您使用的疑问提出建议方案。包括通过电话进行回访、向您提供信息咨询等服务或邀请您参与服务、产品或功能有关的客户调研。
+    </p>
+    <p>
+      2.
+      我们可能会收集您在参与产品/服务调查时主动向我们提供的信息,以及您与我们的关联方、合作伙伴之间互动时提供的相关信息,以便于您追踪订单情况、发起用户投诉以及我们优化客户服务的质量与流程。
+    </p>
+    <p>
+      3.
+      我们可能将业务中收集的个人信息用于统计分析和改进运营,将已经去标识化无法识别您身份且不能复原的信息用于建立数据库并进行商业化利用。例如为改进我们系统而进行的技术改造、网络维护、故障排除、内部政策与流程制定、生成内部报告等。
+    </p>
+    <p>
+      4.
+      【当我们展示您的个人信息时,我们会采用包括内容替换、匿名处理方式对您的信息进行脱敏展示,以保护您的信息安全。】
+    </p>
+    <p class="bold-text">二、我们如何使用Cookie、Beacon、Proxy等技术</p>
+    <p>
+      为使您获得更轻松的访问体验,您使用中国生物提供的服务时,我们可能会通过小型数据文件识别您的身份,这么做可帮您省去重复输入注册信息的步骤,或者帮助判断您的账户安全状态。这些数据文件可能是Cookie,FlashCookie,您的应用程序提供的其他本地存储(以下简称“Cookie”)。
+      <text class="bold-text">请您理解,我们的某些服务只能通过使用Cookie才可得到实现。</text>
+    </p>
+    <p class="bold-text">
+      我们中国生物系统上还可能包含一些电子图像(以下简称“网络Beacon”),使用网络Beacon可以帮助网站计算浏览网页的用户或访问某些Cookie,我们会通过网络Beacon收集您浏览网页活动的信息(您访问的页面地址、您先前访问的援引页面的位置、您的浏览环境以及显示设定)。
+    </p>
+    <p class="bold-text">
+      如您通过我们的微信小程序,使用了由第三方而非中国生物提供的服务时,为尽力确保您的账号安全,使您获得更安全的访问体验,我们可能会使用专用的网络协议及代理技术(以下简称“Proxy技术”)。使用Proxy技术,可以帮助您识别到我们已知的高风险站点,减少由此引起的钓鱼、账号泄露等风险,同时更有利于保障您和第三方的共同权益,阻止不法分子篡改您和您希望访问的第三方之间正常服务内容,包括:不安全路由器、非法基站等引起的广告注入、非法内容篡改。在此过程中,我们也可能会获得和保存您设备的IP地址、硬件ID以及您访问的页面位置。
+    </p>
+    <p class="bold-text">三、我们如何存储和保护信息</p>
+    <p class="bold-text">(一)存储地点</p>
+    <p>
+      我们在<text class="bold-text">中华人民共和国境内</text
+      >运营中收集和产生的个人信息,将存储在中国境内。<text class="bold-text"
+        >目前我们不存在向境外传输境内收集的相关个人信息的场景。如果将来涉及向境外传输境内收集的相关个人信息,我们将明确向您告知个人信息出境的目的、接收方、安全保障措施等情况,并另行征得您的同意。</text
+      >
+    </p>
+    <p class="bold-text">(二)存储期限</p>
+    <p>
+      我们<text class="bold-text">仅在本政策所述目的所必需期间和法律法规及监管规定的时限内保存</text
+      >您的个人信息。我们判断个人信息的存储期限主要参考以下标准并以其中较长者为准:
+    </p>
+    <p>1. 完成与您相关的交易目的、维护相应交易及业务记录,以应对您可能的查询或投诉;</p>
+    <p>2. 保证我们为您提供服务的安全和质量;</p>
+    <p>3. 您是否同意更长的留存期间;</p>
+    <p>4. 是否存在关于保留期限的其他特别约定或法律法规规定。</p>
+    <p>
+      当前我们存储期限为【5】年,如果相关法律法规长于该存储期限,以相关法律法规规定的期限保存为准。在超出保留期间后,我们会根据适用法律的要求删除您的个人信息,或使其匿名化处理。
+    </p>
+    <p>
+      在您终止使用中国生物服务后,我们会停止对您的信息的收集和使用,法律法规或监管部门另有规定的除外。如我们停止运营,我们将及时停止收集您个人信息的活动,将停止运营的通知以逐一送达或公告的形式通知您,并对所持有的您的个人信息进行删除或匿名化处理。
+    </p>
+    <p class="bold-text">(三)个人信息的保护措施</p>
+    <p>1. 数据安全措施</p>
+    <p>
+      为保障您的信息安全,我们努力采取各种符合业界标准的物理、电子和管理方面的安全措施来保护您的个人信息。中国生物通过信息接触者保密协议、监控机制来对数据进行全面安全控制。防止您的个人信息遭到未经授权访问、公开披露、使用、修改、损坏或丢失。
+    </p>
+    <p>2. 安全事件</p>
+    <p>
+      在不幸发生个人信息安全事件后,我们会立即成立专项应急小组,启动应急预案,防止安全事件扩大,并按照法律法规的要求及时向您告知:安全事件的基本情况和可能的影响、我们已采取或将要采取的处置措施、您可自主防范和降低风险的建议、对您的补救措施等。我们将及时将事件相关情况以邮件、信函、电话、推送通知等方式告知您,难以逐一告知个人信息主体时,我们会采取合理、有效的方式发布公告。同时,我们还将按照监管部门要求,主动上报个人信息安全事件的处置情况。
+    </p>
+    <p class="bold-text">
+      请您知悉并理解,互联网并非绝对安全的环境,您务必妥善保管好您的中国生物登录账号及登录时系统向您发送的验证码。如您发现自己的个人信息泄密,尤其是您的账户或密码发生泄露,请您立即根据本隐私政策中提供的联系方式联络我们,以便我们采取相应措施。
+    </p>
+    <p class="bold-text">四、我们如何共享、转让、公开披露您的信息</p>
+    <p class="bold-text">(一)共享</p>
+    <p>
+      我们承诺对您的信息进行严格保密。除法律法规及监管部门另有规定外,我们仅在以下情形中与第三方共享您的信息,第三方包括合作金融机构、其他合作伙伴。如果为了向您提供服务而需要将您的信息共享至第三方,我们将评估该第三方收集信息的合法性、正当性、必要性。我们将要求第三方对您的信息采取保护措施,并且严格遵守相关法律法规与监管要求。另外,我们会按照法律法规及国家标准的要求以确认协议、具体场景下的文案确认、弹窗提示等形式征得您的同意,或确认第三方已经征得您的同意。
+    </p>
+    <p>
+      1.
+      为了让您完成交易、实现交易目的,我们需要向您的交易相关方提供相关业务证据链信息,同时您的交易相关方可在证据链审核、付款过程中或付款成功后查看您的全部证据链信息以及部分个人信息;
+    </p>
+    <p>
+      2. 某些产品或服务可能由第三方提供或由我们与第三方共同提供,因此,<text class="bold-text"
+        >只有共享您的信息,才能提供您需要的产品或服务;</text
+      >
+    </p>
+    <p class="bold-text">(二)转让</p>
+    <p>我们不会将您的个人信息转让给任何公司、组织和个人,但以下情况除外:</p>
+    <p>1. 在获取明确同意的情况下转让:获得您的明确同意后,我们会向其他方转让您的个人信息;</p>
+    <p>2. 根据法律法规或强制性的行政或司法要求;</p>
+    <p>
+      3.
+      在平台发生合并、收购或破产清算情形,或其他涉及合并、收购或破产清算情形时,如涉及到个人信息接收主体变更,我们会要求新的持有您个人信息的公司、组织继续受本政策的约束,且不变更本政策项下约定的处理目的和处理方式,否则我们将要求该公司、组织重新向您征求授权同意。
+    </p>
+    <p class="bold-text">(三)公开披露</p>
+    <p>
+      我们仅会在以下情况下,且采取符合业界标准的安全防护措施的前提下,才可能公开披露您的个人信息:
+    </p>
+    <p>1. 根据您的需求,在您明确同意的披露方式下披露您所指定的个人信息;</p>
+    <p>
+      2.
+      根据法律、法规的要求、强制性的行政执法或司法要求所必须提供您个人信息的情况下,我们可能会依据所要求的个人信息类型和披露方式公开披露您的个人信息。在符合法律法规的前提下,当我们收到上述披露信息的请求时,我们会要求必须出具与之相应的法律文件,如传票或调查函。
+    </p>
+    <p class="bold-text">(四)共享、转让、公开披露个人信息时事先征得授权同意的例外</p>
+    <p>
+      根据相关法律法规规定,以下情形中,共享、转让、公开披露您的个人信息无需事先征得您的授权同意:
+    </p>
+    <p>1. 与我们履行法律法规规定的义务相关的;</p>
+    <p>2. 与国家安全、国防安全直接相关的;</p>
+    <p>3. 与公共安全、公共卫生、重大公共利益直接相关的;</p>
+    <p>4. 与犯罪侦查、起诉、审判和判决执行等司法或行政执法直接相关的;</p>
+    <p>5. 出于维护您或其他个人的生命、财产等重大合法权益但又很难得到本人同意的;</p>
+    <p>6. 您自行向社会公众公开的个人信息;</p>
+    <p>
+      7. 从合法公开披露的信息中收集个人信息的,如合法的新闻报道、政府信息公开等渠道。
+      根据法律规定,共享、转让、公开披露经去标识化处理的个人信息,且确保数据接收方无法复原并重新识别个人信息主体的,我们对此类数据的处理将无需另行向您通知并征得您的同意。
+    </p>
+    <p class="bold-text">五、您如何管理您的信息</p>
+    <p>您对您的个人信息享有以下权利:</p>
+    <p class="bold-text">(一)您有权访问、更正、删除您的个人信息,法律法规规定的例外情况除外。</p>
+    <p>您可以通过以下方式管理您的信息:</p>
+    <p>
+      账户信息——您可以通过“我的-个人名片”访问个人资料及账号信息。若您已经通过身份认证,您的身份认证信息将无法进行更改,如姓名、身份证号。您的手机号作为您的登录账号,无法进行更改。角色和绑定上级机构(即公司名称)是我们后台按照您或者相关方提供的信息进行后台配置,如若您发现有错误信息,可通过本隐私政策联系方式与我们进行联系,进行纠正处理。
+    </p>
+    <p class="bold-text">(二)改变您授权同意的范围或撤回授权</p>
+    <p>
+      您可以在中国生物小程序通过“右上角胶囊按钮-左边三个点-设置”中开通、关闭位置信息和相册(包含拍照)功能权限。其中,当您不允许我们获取您位置信息后,您将无法使用中国生物小程序中涉及需要使用到定位信息的功能,如无法通过客户拜访进行打卡、无法在进行会议举办任务时位置打卡等。如果您关闭相册功能权限,您将无法使用中国生物小程序中涉及使用相册或拍照的部分功能,如上传会议方案、会议签到表、现场照片等。您如果拒绝前述的授权提供,仅影响部分相关功能,但不影响您正常使用中国生物小程序其他功能。
+    </p>
+    <p class="bold-text">(三)注销账户</p>
+    <p>
+      您有权注销您的中国生物账户,您可以通过“我的-意见反馈”、我们的客服或者根据本隐私政策中提供的联系方式联络我们,帮助您办理注销账户。当您符合账户注销条件并注销中国生物账户后,我们将根据法律法规的要求尽快删除您的个人信息或作匿名化处理,我们将不会再收集、使用或对外提供与该账户相关的个人信息,但您在使用中国生物服务期间提供或产生的信息我们仍需按照前述第三条第二款“存储期限”进行保存,且在该存储期限内依法配合有权机关的查询。
+    </p>
+    <p class="bold-text">(四)响应您的上述请求</p>
+    <p class="bold-text">
+      为保障您的账户安全,您向我们提出上述请求时,我们可能会先要求您验证您的身份(如要求您提供书面请求或其他方式),然后再处理您的请求。
+    </p>
+    <p>
+      对于您向我们提出的上述请求,我们将在15个工作日内做出答复。如您不满意我们的答复,还可以通过本隐私政策中提供的联系方式发起投诉。
+    </p>
+    <p>
+      对于您合理的请求,我们原则上不收取费用,<text class="bold-text"
+        >但对多次重复、超出合理限度的请求,我们将酌情收取一定费用。对于与您的身份不直接关联的信息、无合理理由重复申请的信息,或者需要过多技术手段(例如,需要开发新系统或从根本上改变现行惯例)、给他人合法权益带来风险或者不切实际的请求,我们可能会予以拒绝。</text
+      >
+    </p>
+    <p class="bold-text">在以下情形中,按照法律法规要求,我们将无法响应您的请求:</p>
+    <p class="bold-text">1. 与我们履行法律法规规定的义务相关的;</p>
+    <p class="bold-text">2. 与国家安全、国防安全直接相关的;</p>
+    <p class="bold-text">3. 与公共安全、公共卫生、重大公共利益直接相关的;</p>
+    <p class="bold-text">4. 与刑事犯罪侦查、起诉、审判和执行判决等直接相关的;</p>
+    <p class="bold-text">5. 有充分证据表明个人信息主体存在主观恶意或滥用权利的;</p>
+    <p class="bold-text">
+      6. 出于维护个人信息主体或其他个人的生命、财产等重大合法权益但又很难得到本人授权同意的;
+    </p>
+    <p class="bold-text">7. 响应您的请求将导致您或其他个人、组织的合法权益受到严重损害的;</p>
+    <p class="bold-text">8. 涉及商业秘密的。</p>
+    <p class="bold-text">六、对第三方责任的声明</p>
+
+    <p class="bold-text">
+      请您注意,您的交易相对方、通过中国生物小程序接入的第三方服务和由中国生物处接收您的个人信息的第三方可能有自己的隐私权保护政策;当您查看第三方创建的网页或使用第三方开发的应用程序时,这些第三方可能会放置他们自己的Cookie或网络Beacon,这些Cookie或网络Beacon不受我们的控制,且它们的使用不受本政策的约束。我们会努力去要求这些主体对您的个人信息采取保护措施,建议您与他们联系以获得关于他们的隐私权政策的详细情况。如您发现这些第三方创建的网页或第三方开发的应用程序存在风险时,建议您终止相关操作以保护您的合法权益。
+    </p>
+    <p class="bold-text">七、我们如何保护未成年人的信息</p>
+    <p>我们的中国生物小程序和服务面向成人。</p>
+    <p class="bold-text">八、本政策的适用及更新</p>
+    <p class="bold-text">
+      中国生物所有服务均适用本政策,除非相关服务已有独立的隐私权政策或相应的用户服务协议当中存在特殊约定。
+    </p>
+    <p class="bold-text">发生下列重大变化情形时,我们会适时对本政策进行更新:</p>
+    <p class="bold-text">1. 我们的基本情况发生变化,例如:兼并、收购、重组引起的所有者变更;</p>
+    <p class="bold-text">2. 收集、存储、使用个人信息的范围、目的、规则发生变化;</p>
+    <p class="bold-text">3. 对外提供个人信息的对象、范围、目的发生变化;</p>
+    <p class="bold-text">4. 您访问和管理个人信息的方式发生变化;</p>
+    <p class="bold-text">5. 数据安全能力、信息安全风险发生变化;</p>
+    <p class="bold-text">6. 用户询问、投诉的渠道和机制,以及外部纠纷解决机构及联络方式发生变化;</p>
+    <p class="bold-text">7. 其他可能对您的个人信息权益产生重大影响的变化。</p>
+    <p class="bold-text">
+      由于中国生物的用户较多,如本政策发生更新,我们将以微信小程序推送通知、弹窗提示、发送短消息或者在中国生物官方网站发布公告的方式来通知您。如您在本政策更新生效后继续使用中国生物服务,即表示您已充分阅读、理解并接受更新后的政策并愿意受更新后的政策约束。
+    </p>
+    <p class="bold-text">九、本政策中关键词说明</p>
+    <p class="bold-text">
+      1.
+      个人信息:指以电子或者其他方式记录的能够单独或者与其他信息结合识别特定自然人身份或者反映特定自然人活动情况的各种信息。本隐私政策中可能涉及到的个人信息包括但不限于:个人基本信息(包括姓名、电话号码、生日等);个人身份信息(包括身份证);网络身份标识信息(包括系统账号);个人财产信息(包括银行账号、交易记录以及虚拟财产信息等);个人上网记录(包括网站浏览记录、点击记录等);个人设备信息(包括唯一设备识别码等描述个人常用设备基本情况的信息);个人位置信息(包括行踪轨迹、精准定位信息等)。
+    </p>
+    <p class="bold-text">
+      2.
+      个人敏感信息:是指一旦泄露、非法提供或滥用可能危害人身和财产安全,极易导致个人名誉、身心健康受到损害或歧视性待遇等的个人信息。本隐私政策中可能涉及到的个人敏感信息包括:个人身份认证信息(包括身份证、护照等);个人财产信息(银行账号、交易记录以及虚拟财产信息等);其他信息(行踪轨迹、通讯录信息等);14周岁以下的儿童信息。
+    </p>
+  </view>
+</template>
+
+<script>
+export default {
+  name: 'policy'
+}
+</script>
+
+<style lang="scss" scoped>
+p:not(.title) {
+  text-indent: 2em;
+  line-height: 1.5em;
+}
+.underline-bold {
+  text-decoration: underline;
+  font-weight: bold;
+}
+.bold-text {
+  font-weight: bold;
+}
+</style>

+ 224 - 0
src/pages-sub-packages/agreement/taxhelper.vue

@@ -0,0 +1,224 @@
+<!--
+ * @desc 税邦云协议模板(共享经济个体合作协议)
+ * @author linyuanjie
+ * @date 2022/3/30
+-->
+
+<template>
+  <view class="pl20 pr20 pb20">
+    <p class="title mt20 mb20 bold-text tc">共享经济个体合作协议</p>
+    <p>
+      《共享经济个体合作协议》(以下简称“本协议”)为永州市罗数云科技有限责任公司(以下简称“永州罗数云”或“我们”)与您(即本协议项下的个体经营者)签订的合作协议。感谢您选择我们为您提供共享经济综合服务,我们将依托综合实力竭诚为您提供规范、专业的服务。
+    </p>
+    <p class="underline-bold">特别提示:</p>
+    <p class="underline-bold">
+      您是为<text class="yellow-bgc">【】</text
+      >(以下称“企业客户”)提供与您的技能或您从事生产经营活动的经营范围相符服务的个体经营者,向您提供服务前,已默认您已取得提供的生产经营活动所必须的相关资质。我们将按照我们与企业客户签署的《共享经济综合服务协议》及本协议的约定,在您为企业客户提供服务完成后向您结算生产经营收入并代您办理相关涉税事务。
+    </p>
+    <p class="underline-bold">
+      您与企业客户系适用《中华人民共和国民法典》合同编相关法律规定约束的平等主体之间的合作关系,您提供服务前确认您的年龄符合要求(18-75周岁),不是企业客户(含关联方)的法定代表人、股东、董事、监事或其近亲属等,与企业客户及其关联企业之间不存在劳动/劳务合同关系或其他类似的劳动人事法律关系。如您不同意上述规定,请不要勾选同意本协议;一经发现您违反上述规定的,我们有权上报税务机关或/及其他相关国家机关,由税务机关或/及其他相关国家机关根据《中华人民共和国税收征收管理法》及其他相关法律法规的规定追究相关责任主体及您的法律责任。
+    </p>
+    <p class="underline-bold">
+      为维护您的自身权益,在您通过点击勾选同意本协议之前,请务必审慎阅读、充分理解本协议各条款内容。本协议中凡涉及粗体、斜体或下划线标识的条款,您均应重点阅读。阅读过程中,如您不同意本协议的任意内容,请您立即停止任何的申请/注册/签署程序,不要点击勾选同意或以其他方式进行后续操作,并请停止使用我们的服务;当您按照提示填写您的个人信息、阅读并同意本协议且完成全部注册申请确认,点击勾选同意或以其他方式确认本协议,即表示您已充分阅读、理解并同意接受本协议的全部内容。本协议自您点击勾选同意或以其他方式确认本协议时依法成立并生效,对您和我们即具有法律约束力。此后您不得以未阅读/不理解本协议内容或类似言辞做任何形式的抗辩。
+    </p>
+    <p class="underline-bold">
+      我们有权随时根据法律法规、政策、经营需要、业务发展等对本协议条款内容进行修订,或发布新的规则,或在未另行约定情况下,将我们在本合作协议项下的权利与义务转由我们指定的其他关联企业或其他合作伙伴行使与承继,相关变更将在罗格税邦云网站(网址:www.taxhelper.cn/contract-p4)予以公布,我们将不单独向您发出通知,您有责任登录罗格税邦云网站并知悉所有相关变更或通知。如您不同意相关变更,请立即停止使用服务,书面通知我们终止本协议,并同时注销账户信息。任何修订、新规则及提供服务方的变更一经公布即自动生效,成为本协议的一部分。如您继续执行协议,则表示您知悉并接受经修订后的协议。
+    </p>
+    <p>鉴于:</p>
+    <p>
+      我们通过永州市罗数云科技有限责任公司共享经济综合服务平台(以下简称“永州罗数云”)为诸多企业客户提供共享经济综合服务;您系我们为企业客户筛选、匹配的个体经营者,能满足企业客户的商业需求,为企业客户提供服务。您与我们将依据《中华人民共和国民法典》合同编及相关法律法规的规定,本着平等、自愿、诚信的原则,在平等互利的基础上签署本协议。
+    </p>
+    <p class="bold-text">第一条 定义</p>
+    <p>除非本协议中另有定义,下列词语应具有以下特定涵义:</p>
+    <p>
+      <text class="bold-text">1、关联方:</text
+      >指相互间直接或间接持有其中一方的股权/股份总和达到25%或以上的;或者直接或间接同为第三者所拥有或控制股权/股份达到25%或以上的。如果一方通过中间方对另一方间接持有股权/股份,只要其对中间方持股比例达到25%以上,则其对另一方的持股比例按照中间方对另一方的持股比例计算;两个以上具有夫妻、直系血亲、兄弟姐妹以及其他抚养、赡养关系的自然人共同持股同一企业,在判定关联关系时持股比例合并计算。
+    </p>
+    <p>
+      <text class="bold-text">2、个体经营者:</text
+      >指自我雇佣、自我管理、自担成本、自负盈亏并通过永州罗数云从事合法合规生产经营活动的个体。
+    </p>
+    <p>
+      <text class="bold-text">3、生产经营收入(税后):</text
+      >指您为企业客户提供服务并获得生产经营活动而获取的税后收入。
+    </p>
+    <p>
+      <text class="bold-text">4、服务费:</text
+      >指由我们向企业客户提供共享经济综合服务,我们就该等服务向企业客户收取的费用。
+    </p>
+    <p><text class="bold-text">5、身份标识:</text>指能够证明您本人身份的凭证,具体如下:</p>
+    <p>5.1您为中国公民且持有有效《中华人民共和国居民身份证》的,为居民身份证(简称“身份证”);</p>
+    <p>5.2您为华侨且没有居民身份证的,为有效的《中华人民共和国护照》和华侨身份证明;</p>
+    <p>5.3您为港澳居民的,为有效《港澳居民来往内地通行证》或《中华人民共和国港澳居民居住证》;</p>
+    <p>5.4您为台湾居民的,为有效的《台湾居民来往大陆通行证》或《中华人民共和国台湾居民居住证》;</p>
+    <p>
+      5.5您为持有有效《中华人民共和国外国人永久居留身份证》的外籍个人的,为永久居留证和外国护照;未持有永久居留证但持有有效《中华人民共和国外国人工作许可证》的,为工作许可证和外国护照;其他外籍个人,为有效的外国护照。
+    </p>
+    <p><text class="bold-text">6、罗格税邦云系统:</text>一套可以提供信息化服务和支持的系统。</p>
+    <p class="bold-text">第二条 合作内容</p>
+    <p>
+      1、我们依据与企业客户签署的《共享经济综合服务协议》的约定,依托共享经济资源向企业客户筛选并推荐您为企业客户提供相应服务,并按照企业客户业务规则查询、接受服务需求、履行服务过程中的相关义务并享有相关权利等。
+    </p>
+    <p>
+      2、<text class="bold-text"
+        >您委托我们(我们及我们指定的代为办理本款约定的委托事宜的必要方,本款内均作如上指代)代理您办理工商登记/税务登记/临时税务登记、申报纳税、发票(领用、开具、代开)、工商注销、税务注销等相关事宜,同意按照有关税收法律法规、政策规定及管辖主管税务机关的要求由我们代征或受您委托代缴相关税费款项,并同意在为您办理相关事宜时依法向办理事项对应的国家机关(包含但不限于市场监督局、主管税务机关等)出示本协议,您无需另行出具授权委托书。</text
+      >除特别约定外,我们代理申报缴纳您的生产经营所得相关税费时,有权从应付您的合作费用中扣除相关税费总额。
+    </p>
+    <p>
+      3、您应是自我雇佣、自我管理、自担成本、自负盈亏的个体经营者。<text class="bold-text"
+        >我们为使您满足企业客户业务需求而向您提供的服务,不导致我们与您之间构成劳动/劳务关系,我们不承担您任何社保福利待遇,也不承担您的任何医疗保险费用,且我们对您违反法律法规的行为不承担任何法律责任。</text
+      >
+    </p>
+    <p>4、我们服务的对象仅限于从事合法合规生产经营活动的个体。</p>
+    <p class="bold-text">第三条 服务费的结算及支付方式</p>
+    <p>
+      1、根据我们与企业客户签署的《共享经济综合服务协议》的约定,我们有权向企业客户就所提供的共享经济综合服务收取服务费,其中,服务费金额涵盖基于您为企业客户提供服务而取得的生产经营活动的收入。我们收到企业客户支付的服务费后,将依据企业客户提供的您所提供服务的数量、质效标准及考核结果核算您的生产经营收入(税后)并支付予您。<text
+        class="bold-text"
+        >如发生企业客户拖欠服务费情形,我们有权暂缓支付您的生产经营收入(税后),直至企业客户足额支付服务费。您同意为我们向企业客户追讨服务费提供相应之配合及协助。</text
+      >
+    </p>
+    <p>
+      2、<text class="bold-text"
+        >您应自行负担就您取得的生产经营收入需缴纳的各项税款,应我们要求,您应提供与相关税费申报缴纳相关的协助及信息。如果您拒绝提供相关协助或信息,我们有权暂缓支付生产经营收入(税后)。</text
+      >
+    </p>
+    <p class="bold-text">第四条 您的权利与义务</p>
+    <p class="bold-text">
+      1、您保证签署本协议时具有完全民事权利能力和民事行为能力,并满足所有履行本协议所需的法定条件或约定条件,保证为企业客户提供生产经营活动时,遵照其业务规则并自备所需要的设备设施、自行承担必要费用,如因您个人原因造成您自己或任意第三方损害的(包括但不限于人身、财产损害等),由您自行承担全部法律责任。
+    </p>
+    <p class="bold-text">2、您保证为企业客户提供的生产经营活动是以您自己名义进行的。</p>
+    <p>
+      <text class="bold-text"
+        >3、您保证在生产经营活动过程中遵守国家法律法规,不得从事违反法律或行政法规等行为(包括但不限于涉嫌洗钱、偷税、漏税、逃税等)及其他不得使用我们服务的行为(包括但不限于您为企业客户提供活动的特点、性质不符合本协议第二条约定的服务范围的情形),</text
+      >我们/企业客户主管税务机关或/及其他相关国家机关介入调查时,您应当予以协助并如实反映情况,不得阻挠、拒绝调查。
+    </p>
+    <p class="bold-text">4、您充分理解个体经营者的定义,并承诺不存在下列所述情形:</p>
+    <p class="bold-text">4.1与企业客户具有劳动/劳务合同关系或其他类似的劳动人事法律关系;</p>
+    <p class="bold-text">4.2为企业客户的法定代表人、股东、董事、监事;</p>
+    <p class="bold-text">4.3为企业客户的法定代表人、股东、董事、监事的近亲属;</p>
+    <p>4.4年龄不符合要求(应为18-75周岁);</p>
+    <p class="bold-text">4.5 外籍人士(加入中国以外国家的国籍);</p>
+    <p>4.6根据相关法律规定不适用于本协议第二条第3款范围规定的其他人员。</p>
+    <p>
+      <text class="bold-text"
+        >您保证向我们提供的信息均是真实的、有效的、合法的,如信息发生变更(如不再是个体经营者身份)应及时通知我们。</text
+      >您的账户信息以您实名提交至企业客户平台后台或您自行提交的信息为准,且您保证该账户为纳税义务人所有。自我们将应支付的生产经营收入(税后)支付至您的账户之日起,视为您收到前述费用。<text
+        class="bold-text"
+        >如因您提供信息有误等导致付款失败的,由您自行承担相应责任。</text
+      >您承诺您所提供的账户应符合中华人民共和国法律的规定,如果我们收到主管税务机关或/及其他相关国家机关任何调查请求的,您应提供协助并如实反映情况。
+    </p>
+    <p>
+      您保证向同创众盈提供的信息均是真实的、有效的、合法的,如信息发生变更(如不再是个体经营者身份)应及时通知同创众盈。您的账户信息以您实名提交至企业客户平台后台的信息为准,且您保证该账户为纳税义务人所有。自同创众盈将应支付的生产经营收入(税后)支付至您的账户之日起,视为您收到前述费用。如因您提供信息有误等导致付款失败的,由您自行承担相应责任。您承诺您所提供的账户应符合中华人民共和国法律的规定,如果同创众盈收到同创众盈主管税务机关或/及其他相关国家机关任何调查请求的,您应提供协助并如实反映情况。
+    </p>
+    <p class="bold-text">
+      5、您所使用的唯一身份标识仅限本人使用,因您泄露或提供给他人使用该等身份标识而造成的不利后果,由您自行承担。
+    </p>
+    <p class="bold-text">
+      6、您同意我们为实现本协议合作之目的,在为您提供服务的过程中收集使用您的一些必要的个人信息,如姓名、身份证件信息、联系方式、常住地址、银行账户信息、人脸信息及其他因提供的不同类别的生产经营活动履行本协议义务而必要之信息,并依法用于合理用途(如身份验证、客户服务、存档备份、参与调查、数据统计、数据分析或数据加工等处理、业绩展示/宣传等)。除法律法规规定外,未经您的同意,我们将不会擅自披露、改变或以其他方式使用您的个人信息。若您认为我们存在违反前述范围使用该等个人信息的,应立即与我们进行联系,我们将及时核实处理。
+    </p>
+    <p class="bold-text">
+      7、虚构生产经营活动或伪造、变造生产经营活动的相关证明材料将涉嫌构成虚开发票或虚开增值税专用发票的刑事犯罪,可能承担拘役、有期徒刑及罚金的刑事责任。您承诺您从事的生产经营活动是真实的,亦未从事涉嫌违反法律及行政法规的行为(包括但不限于虚开发票、洗钱、逃税、传销、赌博等)。
+    </p>
+    <p class="bold-text">
+      8、销售收入、直播带货收入、财产转让(含股权转让)收入、财产租赁收入、高管薪酬、利息股息红利、依劳动/劳务合同关系取得的收入等不属于本协议定义的生产经营收入范围,您承诺您取得生产经营收入不属于上述范围。
+    </p>
+    <p>9、您确认您提供服务的范围需要获取相关资质的,您已符合条件。</p>
+    <p class="bold-text">第五条 我们的权利与义务</p>
+    <p>
+      1、我们有权根据企业客户的业务需求以及企业客户安排的服务内容,就您提供的生产经营活动制定相应的服务标准细则,您应遵守前述服务标准细则。我们有权敦促您不得违背相关法律法规和前述服务标准细则,但该等敦促为平等主体之间为实现合同目的的敦促,适用《中华人民共和国民法典》合同编等相关法律法规的规定。
+    </p>
+    <p class="bold-text">
+      2、我们在向您支付生产经营收入(税后)时,我们(我们及我们指定的代为办理本款约定的委托事宜的必要方,本款内均作如上指代)代理您办理工商登记/税务登记/临时税务登记、申报缴税、发票(领用、开具、代开)、工商注销、税务注销等相关事宜,并同意按照有关税收法律法规、政策规定及管辖主管税务机关的要求由我们代征或受您委托代缴相关税费款项,并在为您办理相关事宜时依法向主管税务机关出示本协议。
+    </p>
+    <p class="bold-text">
+      3、我们发现您违反本协议第四条第4款之约定的,有权立即终止履行本协议,并向税务机关报告,您应自行承担由此产生的税务相关的处罚责任(包括但不限于根据税务机关的要求补缴相应的税款、滞纳金、罚金等)。
+    </p>
+    <p class="bold-text">
+      4、我们可以为实现本次合作内容从企业客户/您处收集、留存并合法使用您的个人信息,我们(含其股东、董事、监事、高级管理人员及其顾问)承诺对您所披露的个人信息进行保密,未经您授权或基于合法并可执行的法律、法规、法院命令、监管机构的要求或为遵守适用法律法规、履行网络安全保护义务或应对网络安全事件的需要进行披露,或为履行本协议之需要委托给我们的关联企业或者合作伙伴进行处理之外,我们(含其股东、董事、监事、高级管理人员及其顾问)不会将您的个人信息披露给任意第三方。我们承诺按照相关法律法规的要求对您的个人信息履行安全保护义务,保障网络免受干扰、破坏或未经授权的访问,防止网络数据泄露或被窃取、篡改。
+    </p>
+    <p>
+      5、我们因网络服务的特殊性需短时间中断服务对系统进行维护和升级,您理解并认可前述行为不属于我们违约情形。
+    </p>
+    <p>6、如企业客户与您之间另有服务或其他约定安排的,我们就未参与的安排不承担任何义务。</p>
+    <p class="bold-text">
+      7、我们向您提供服务前,已默认您已取得提供的生产经营活动所必须的相关资质,因未取得承接业务所需相应资质的风险由您自行承担。
+    </p>
+    <p class="bold-text">
+      8、我们仅就企业客户之委托事项为您提供共享经济综合服务,非经我们办理的工商登记/税务登记/临时税务登记及相关涉税事项不在我们的服务范围内,发生补税相关风险由您自行承担。
+    </p>
+    <p class="bold-text">
+      9、如我们受两个及以上企业客户委托同时为您提供共享经济综合服务,且您在企业客户处取得的累计生产经营收入经综合汇算后需要补税的,因此产生的补税责任及风险由您自行承担。
+    </p>
+    <p class="bold-text">第六条 违约责任</p>
+    <p>
+      1、除本协议另有约定外,本协议任意一方不履行或不完全履行本协议约定的义务和承诺即构成违约。违约方应当负责赔偿其违约行为给守约方造成的一切经济损失(本协议所称“经济损失”均指包括但不限于守约方遭受的损失以及因此支出的律师费、诉讼费、仲裁费、保全费、诉讼财产保全责任保险费、担保费、执行费、公证费、鉴定费、审计费、评估费、差旅费、复印费等合理费用)。
+    </p>
+    <p class="bold-text">
+      2、因政府行为(包括但不限于因中国政府机关不授予或调整我们相应经营资质或权利)或其他不可抗力因素导致本协议部分条款或全部条款无法履行的,遭受该行为的一方不承担违约责任。
+    </p>
+    <p class="bold-text">
+      3、因企业客户拖欠服务费导致我们暂缓支付您的生产经营收入(税后),将不视为我们的违约行为。
+    </p>
+    <p class="bold-text">第七条 协议效力及保密责任</p>
+    <p>
+      1、本协议任意一方应对本协议所涉及的所有内容以及协议双方在执行本协议过程中相关的法律、商业、合作业务的所有信息进行保密。除经对方允许或基于合法并可执行的法律、法规、法院命令、监管机构的要求或为遵守适用法律法规、履行网络安全保护义务或应对网络安全事件的需要所进行披露,或为履行本协议之需要委托给我们的关联企业或者合作伙伴进行处理之外,均不得向任意第三方披露。我们基于融资/资本运作需要可向投资方及其雇员、顾问披露本协议及与您有关的相关信息,但我们应与该投资方及其雇员、顾问签署保密协议,使该投资方及其雇员、顾问承担与我们相同的保密义务。
+    </p>
+    <p>2、保密期限应为:自协议生效之日起至协议终止后十年。</p>
+    <p class="bold-text">第八条 协议的终止</p>
+    <p>
+      1、自您点击勾选同意或以其他方式确认本协议时依法成立并生效,本协议有效期与我们与企业客户签署的《共享经济综合服务协议》的协议有效期保持一致。
+    </p>
+    <p>2、发生以下情形时,本协议终止并解除:</p>
+    <p class="bold-text">
+      2.1
+      任何一方提前30日书面通知对方要求终止协议的,但您要求终止协议应事先获得企业客户的同意并不得影响企业客户的运营;
+    </p>
+    <p class="bold-text">
+      2.2一方违反协议约定,且违约方在非违约方书面通知后15日内仍未予改正的,非违约方可以书面通知的形式终止本协议;
+    </p>
+    <p class="bold-text">
+      2.3
+      您如未能达到企业客户的要求,我们在工作验收时将给予警告;此后如仍发生类似情况的,我们可提前终止本协议;
+    </p>
+    <p class="bold-text">2.4 我们发现您存在违反第四条任一情形的;</p>
+    <p class="bold-text">
+      2.5
+      企业客户与我们签署的《共享经济综合服务协议》被解除或终止,导致本协议无法继续履行的,本协议自动终止。
+    </p>
+    <p class="bold-text">
+      2.6
+      我们发布新的新规则或变更协议条款后,您不同意相关变更,书面通知我们解除协议,并同时注销账户信息的。
+    </p>
+    <p>3、本协议的提前终止或解除不影响已经产生的权利义务关系。</p>
+    <p class="bold-text">
+      4、您应遵守本协议约定及相关法律法规的规定,我们有权自主判断您的行为是否违约或/及违规。如我们有合理理由或有证据认定您违反本协议或相关法律法规的,有权在不事先通知的情况下,限制、停止或取消您使用我们服务的资格。
+    </p>
+    <p class="bold-text">第八条 协议的终止</p>
+    <p>
+      本协议的订立、执行、解释和争议的解决均应适用中华人民共和国法律。凡因本协议引起的或与本协议有关的任何争议,协议双方应友好协商解决。如不能协商解决,任何一方可提交至北京市海淀区人民法院诉讼解决。
+    </p>
+  </view>
+</template>
+
+<script>
+export default {
+  name: 'taxhelper'
+}
+</script>
+
+<style lang="scss" scoped>
+p:not(.title) {
+  text-indent: 2em;
+  line-height: 1.5em;
+}
+.underline-bold {
+  text-decoration: underline;
+  font-weight: bold;
+}
+.bold-text {
+  font-weight: bold;
+}
+.yellow-bgc {
+  background-color: yellow;
+}
+</style>

+ 187 - 0
src/pages-sub-packages/agreement/xintaizi.vue

@@ -0,0 +1,187 @@
+<!--
+ * @desc 薪泰梓
+ * @author linyuanjie
+ * @date 2022/4/20
+-->
+
+<template>
+  <view class="pl20 pr20 pb20">
+    <p class="title mt20 mb20 bold-text tc">河南薪泰梓信息科技有限公司</p>
+    <p class="title mt20 mb20 bold-text tc">与</p>
+    <p class="title mt20 mb20 bold-text tc">自由职业者</p>
+    <p class="title mt20 mb20 bold-text tc">共享经济综合服务协议</p>
+    <p>甲 方:河南薪泰梓信息科技有限公司(以下简称“甲方”)</p>
+    <p>乙 方: (以下简称“乙方”)</p>
+    <p>证件号码:</p>
+    <p>联系电话:</p>
+    <p>联系邮箱:</p>
+    <p>(在本协议下,甲方和乙方统称为“双方”,或各自被称为“各方”或“一方”。)</p>
+    <p><text class="underline-bold">特别提示:</text></p>
+    <p class="underline-bold">
+      针对获得生产经营所得的自由职业者在使用本协议项下甲方(还包括甲方指定的合作方、关联方及其他分支机构,下同)提供的共享经济综合服务时,甲方承诺依法纳税、确保自然纳税人取得税后的合法收入。
+    </p>
+    <p class="underline-bold">
+      军人、公职人员等国家法律法规和纪律规定禁止从事兼职或经商的人员,严禁使用本协议项下甲方提供的共享经济综合服务。
+    </p>
+    <p class="underline-bold">
+      公司雇员等其他与公司具有劳动/劳务合同关系、或其他类似的劳动人事法律关系并从与其有前述关系的公司取得工资薪金所得的人员,严禁使用本协议项下甲方提供的共享经济综合服务;该类人员因从事生产经营而从非与其有前述关系的企、事业单位所取得的生产经营所得,甲方可为其提供本协议项下的共享经济综合服务。
+    </p>
+    <p class="underline-bold">
+      公司法定代表人、股东、董事、监事等从公司取得收入的高管人员,一律严禁使用本协议项下甲方提供的共享经济综合服务;该类人员因从事生产经营而从非与其有前述关系的企、事业单位所取得的生产经营所得,甲方同样不可为其提供本协议项下的共享经济综合服务。
+    </p>
+    <p class="underline-bold">一经发现有上述任一行为的,乙方应自行承担相关法律责任。</p>
+    <p class="underline-bold">
+      上述“公司”特指与乙方建立业务关系并提供相应生产经营活动的公司,乙方与其他公司之间的法律关系不受上述条款约束(公司法定代表人、股东、董事、监事等从公司取得收入的高管人员除外)。
+    </p>
+    <p>
+      依据《中华人民共和国税收征收管理法》及其细则、《中华人民共和国民法典》、《中华人民共和国发票管理办法》、《委托代征管理办法》等相关法律法规的规定,甲乙双方经协商一致,达成协议如下:
+    </p>
+    <p class="bold-text">1、定义</p>
+    <p>
+      1.1.
+      甲方系国内注册成立的科技公司,通过阿拉钉系统平台为自由职业者提供账户搭建与管理、交易管理及撮合、交易合同签订与存证、订单管理与查询、信息咨询及管理等其他现代服务,基于该等经济管理服务及经济业务往来,接受乙方委托,为乙方提供共享经济综合服务。
+    </p>
+    <p>
+      1.2.
+      乙方系具有完全的民事行为能力且具备相应专业技能及许可(如有)的自由职业者,接受甲方(包括甲方指定的合作方、关联方及其他分支机构,下同)提供的共享经济综合服务,与甲方或甲方企业客户之间建立业务关系并提供相应的生产经营活动。乙方承诺作为服务提供者,应遵守国家相关法律法规及行业规范,按照甲方与企业客户的业务具体要求完成服务内容,履行生产经营活动过程中的相关义务并享有相关权利。
+    </p>
+    <p>
+      1.3.阿拉钉系统平台:是由甲方合作方研发及运营维护的一套综合云服务平台,具备电子协议签署、电子数据存证、账户管理、交易管理、订单管理与查询等各项技术服务能力。
+    </p>
+    <p class="bold-text">2、合作内容</p>
+    <p>
+      2.1.乙方应自行负担就其生产经营所得需缴纳的各项税款及行政收费(如有),甲方及甲方指定的合作方、关联方及其他分支机构按照有关税收政策规定及相关主管税务机关的要求,接受乙方委托协助其向主管税务机关缴纳或代征前述税费。
+    </p>
+    <p>
+      2.2.甲方及甲方指定的合作方、关联方及其他分支机构接受乙方委托,通过本协议项下的服务将乙方生产经营所得完税后的金额发放至乙方,并接受乙方委托由甲方或主管税务机关代开增值税普通发票。
+    </p>
+    <p class="bold-text">3、甲方权利义务</p>
+    <p>3.1.甲方有权就乙方提供的生产经营活动制定相应规则及标准,乙方应当遵守。</p>
+    <p>
+      3.2.甲方协助乙方获取生产经营所得时,应当按照有关税收政策规定及主管税务机关授予的代征权限向乙方代征个人所得税等各项税款及行政收费(如有),或协助乙方按照有关税收政策规定及主管税务机关的要求缴纳个人所得税等各项税款及行政收费(如有)。
+    </p>
+    <p>
+      3.3.甲方有权对乙方提供的信息进行验证,但该等验证行为并不意味着甲方对乙方信息的真实性、有效性、合法性、完整性负责,也并不因此减轻或免除乙方的任何义务或责任。
+    </p>
+    <p>
+      3.4.甲方发现乙方违反相关法律法规或本协议规定的,甲方有权中止本协议。乙方应自行承担由此产生的税务相关的处罚责任,包括但不限于根据税务机关的要求补缴相应的税款、滞纳金等。
+    </p>
+    <p>3.5.甲方承诺对乙方所披露的个人隐私信息进行保密。</p>
+    <p>
+      3.6.甲方可以留存为实现本次合作内容从乙方处获取的乙方个人信息。但是,未经乙方授权,甲方不得将乙方个人信息披露给任何第三方。
+    </p>
+    <p>
+      3.7.甲方承诺将按照相关法律法规的要求,对从乙方处获得的乙方个人信息履行安全保护义务,保障网络免受干扰、破坏或未经授权的访问,防止网络数据泄露或被窃取、篡改。
+    </p>
+    <p>3.8.如乙方与其客户之间如有非因本协议产生的争议或纠纷的,与甲方无关,甲方不承担任何责任。</p>
+    <p>
+      3.9.甲方向乙方提供本协议项下服务在任何情况下均不得被理解为与乙方之间建立或存在劳动/劳务合同关系、或其他类似的劳动人事法律关系。
+    </p>
+    <p class="bold-text">4、乙方权利义务</p>
+    <p>
+      4.1.乙方保证提供的个人信息等均是真实的、有效的、合法的、完整的,如信息变更应当及时通知甲方,与此有关的全部法律责任由乙方承担。同时,乙方知悉并确认,当且仅当其通过了甲方系统或甲方合作的第三方系统的实名认证后,方能享有本协议项下的服务。
+    </p>
+    <p>
+      4.2.乙方保证提供各项业务往来信息,包括但不限于业务合作协议、相关补充协议及业务结算单等,均是真实的、有效的、合法的、完整的,如信息变更应当及时通知甲方,与此有关的全部法律责任由乙方承担。
+    </p>
+    <p>
+      4.3.乙方有义务向甲方提供与生产经营所得相对应的收入凭据,并保证其均是真实的、有效的、合法的、完整的,如信息变更应当及时通知甲方,与此有关的全部法律责任由乙方承担。
+    </p>
+    <p>
+      4.4.乙方有义务自行保护账户信息的安全,任何通过乙方账户进行的操作均将被视为乙方的真实意思表示,相应责任均由乙方自行承担。
+    </p>
+    <p>4.5.乙方承诺与其客户之间不具有下列关系:</p>
+    <p>1)与客户具有劳动/劳务合同关系、或其他类似的劳动人事法律关系;</p>
+    <p>2)与客户的关联企业具有劳动/劳务合同关系、或其他类似的劳动人事法律关系;</p>
+    <p>3)为客户及其关联企业或其他企业的法定代表人、董事、监事、股东等高管人员;</p>
+    <p>4)其他不适用于本协议适用范围之规定的人员关系。</p>
+    <p>
+      4.6.乙方发现甲方违反法律、行政法规的规定或者双方的约定收集、使用其个人信息的,有权要求其删除其个人信息;发现甲方收集、存储的其个人信息有错误的,有权要求其予以更正。甲方应当采取措施予以删除或者更正。
+    </p>
+    <p>
+      4.7.乙方保证活动过程中遵守国家法律法规,因乙方个人原因造成其个人或任何第三方损害的责任,由乙方承担全部法律责任。
+    </p>
+    <p>4.8.乙方不得申请代开以下发票:</p>
+    <p>1)凡带有抵扣功能的普通发票;</p>
+    <p>2)非税务部门管理的经营收入。</p>
+    <p>
+      4.9.乙方承诺应当基于真实业务交易向甲方申请代开或委托甲方由税务机关代开相应发票并提供真实、准确、完整的开票信息,否则若乙方违反该承诺造成的相关法律责任及损失由乙方自行承担,若由此造成甲方损失或被相关行政机关处罚的,乙方应当承担赔偿责任。
+    </p>
+    <p>
+      4.10.乙方不得从事违反法律及行政法规等行为,如洗钱、偷税漏税及其他甲方认为不得使用甲方服务的行为等。
+    </p>
+    <p>
+      4.11.乙方确认,其具有完全民事权利能力及完全民事行为能力,所有业务合作均为其真实意愿,且遵守国家法律法规及行业监管要求并满足所有履行本协议所需的法定条件或约定条件。
+    </p>
+    <p>4.12.乙方确认,已知晓其生产经营所得的计算方式及结算周期。</p>
+    <p>
+      4.13.乙方可自行在企业客户处查询生产经营所得的计算方式、结算周期、支付途径等信息,如有异议,可直接与企业客户沟通,甲方可在必要时提供相关协助。
+    </p>
+    <p>
+      4.14.
+      乙方委托授权甲方,根据乙方的委托及主管税务机关规定的或授予的委托代征范围、期限,及税种、税率等,依法代理乙方缴纳相关税费或代征乙方相关税费的事宜,各地主管税务机关的具体规定可能不一致。同时,如遇国家或地方政府及主管税务机关政策变更的,甲方有权根据变更后的政策规定自动调整本协议项下的权利义务乃至终止本协议。
+    </p>
+    <p>
+      4.15.为便利业务的开展,根据实际业务情况,甲方可能会安排一家或多家合作方、关联方及/或分支机构作为实际业务提供方,为乙方提供本协议项下约定的服务,乙方对此知情并完全同意。同时,乙方同意授权并委托甲方为其申请数字证书,并签署所需的相关协议,但该协议应以不加重乙方的合同义务为限。
+    </p>
+    <p>
+      4.16.乙方知悉并同意,经数字证书签署后的电子合同,与乙方以纸质形式进行的签章具有同等法律效力,对乙方具有不可撤销的法律约束力。乙方不得以未签署纸质合同为由、或未实际操作数字证书等理由,否认该等电子合同的法律效力。
+    </p>
+    <p class="bold-text">5、保密条款</p>
+    <p>
+      5.1.本协议任何一方应对本协议所涉及的所有内容以及协议各方在执行本协议过程中相关的一切法律、商业、合作业务的所有资讯进行保密。未经对方允许,均不得向对方以外的任意第三方披露。
+    </p>
+    <p>5.2.保密期应为:协议的有效期内及协议终止之后的十年。</p>
+    <p class="bold-text">6、违约责任</p>
+    <p>
+      任何一方违反本协议约定,即构成该方的违约;除本协议另有规定外,违约方应向守约方承担违约责任,补偿守约方承受或遭致的所有损失、责任、赔偿金或费用(包括但不限于合理的律师费、诉讼费、公证费等)。
+    </p>
+    <p class="bold-text">7、其他</p>
+    <p>
+      7.1.在本协议的任意一方或双方未能及时行使本协议项下的权利不应被视为放弃该权利,也不影响该方在将来行使该权利。
+    </p>
+    <p>
+      7.2.本协议的订立、执行和解释及争议的解决均应适用中国法律。凡因本协议引起的或与本协议有关的任何争议,协议各方应友好协商解决。如不能协商解决,双方一致同意提交至北京仲裁委员会仲裁。
+    </p>
+    <p>
+      7.3.双方同意,在本协议签订后,如另有补充协议,该等补充协议及附件构成本协议不可分割的组成部分,具有同等法律效。
+    </p>
+    <p>
+      7.4.本协议项下各方声明、承诺和保证:本协议任何一方已披露签署和履行本协议所应当向另一方披露的全部信息,且披露内容真实、准确、无遗漏。协议各方同时声明和承诺:本协议的签署和履行不与本协议任何一方已经签署的协议或需承担的任何义务相冲突,且也不会对本协议任何一方以外的第三方形成任何法律和商业上的冲突。
+    </p>
+    <p>
+      7.5.除本协议另有约定外,在履行本协议过程中的一切通知,甲方将通过在阿拉钉系统平台向乙方发送平台消息的方式送达乙方,甲方将通知消息发出之时即视为甲方完成通知义务。
+    </p>
+    <p>
+      7.6.本协议经甲方盖章、乙方签字之日起生效,本协议有效期为壹年。协议到期后如双方均未以书面方式提出异议,则本协议有效期自动顺延壹年。本协议壹式贰份,甲乙双方各执壹份,每份具有同等法律效力。
+    </p>
+    <p>(以下无正文,仅为签署页)</p>
+    <p>甲方(盖章):</p>
+    <p>日期:</p>
+    <p>乙方(签字):</p>
+    <p>日期:</p>
+  </view>
+</template>
+
+<script>
+export default {
+  name: 'xintaizi'
+}
+</script>
+
+<style lang="scss" scoped>
+p:not(.title) {
+  text-indent: 2em;
+  line-height: 1.5em;
+}
+.underline-bold {
+  text-decoration: underline;
+  font-weight: bold;
+}
+.bold-text {
+  font-weight: bold;
+}
+.yellow-bgc {
+  background-color: yellow;
+}
+</style>

+ 225 - 0
src/pages-sub-packages/agreement/zhengqizhixing.vue

@@ -0,0 +1,225 @@
+<!--
+ * @desc 安之慧
+ * @author linyuanjie
+ * @date 2022/9/8
+-->
+
+<template>
+  <view class="pl20 pr20 pb20">
+    <p class="title mt20 mb20 bold-text tc">自由职业者灵活用工服务合作协议</p>
+    <p>感谢您与我司即【北京安之慧互联网科技有限公司】签署本《服务协议》(下称“本协议”)。</p>
+    <p>
+      【审慎阅读】为维护您的自身权益,在您点击同意/或书面签署本协议之前,请认真阅读本协议,务必审慎阅读、充分理解各条款内容,特别是权利义务条款、法律适用和管辖条款。上述条款以粗体及下划
+      线标识,您应重点阅读。
+    </p>
+    <p>
+      【签约】当您按照提示填写您的个人信息、阅读并同意本协议且完成全部申请/或书面签署后,即表示您已充分阅读、理解并接受本协议的全部内容,且与我司达成一致意见并成为我司的合作人员,此后您
+      不得以未阅读/不理解本协议内容或类似言辞做任何形式的抗辩。阅读本协议的过程中,如果您不同意本协议或其中任何条款约定,请您立即停止任何的申请/注册/或书面签署程序。
+    </p>
+    <p>
+      【合作关系】您与我司通过本协议建立的是平等主体之间的合作关系,适用《中华人民共和国民法典》
+      和其他民事法律,不适用《劳动合同法》。
+    </p>
+    <p class="bold-text">特别提示:</p>
+    <p class="bold-text">
+      针对获得生产经营所得的灵活用工人员在使用本协议项下甲方提供的灵活用工人员服务时,甲方承诺依法纳税、确保自然人纳税人取得税后的合法收入。
+    </p>
+    <p class="bold-text">
+      军人、公职人员等国家法律法规和政策规定禁止从事兼职或经商的人员,严禁使用本协议项下甲方提供的灵活用工人员服务。
+    </p>
+    <p class="bold-text">
+      公司雇员等其他与公司具有劳动/劳务合同关系、或其他类似的劳动人事法律关系并从与其有前述关
+      系的公司取得工资薪金所得的人员,严禁使用本协议项下甲方提供的灵活用工人员服务;该类人员因从事
+      生产经营而从非与其有前述关系的企、事业单位所取得的生产经营所得,甲方可为其提供本协议项下的灵活用工人员服务。
+    </p>
+    <p class="bold-text">
+      公司法定代表人、股东、董事、监事等其他从所属公司取得收入的人员,一律严禁使用本协议项下甲
+      方提供的灵活用工人员服务;该类人员因从事生产经营而从非与其有前述关系的企、事业单位所取得的生
+      产经营所得,甲方可为其提供本协议项下的灵活用工人员服务。
+    </p>
+    <p class="bold-text">
+      一经发现乙方涉嫌有上述任一行为的,甲方有权终止服务并上报税务机关及其他相关国家机关。税务机关及其他相关国家机关根据《中华人民共和国税收征收管理法》及其他相关法律法规的规定追究责任主体的法律责任。
+    </p>
+    <p class="bold-text">协议条款:</p>
+    <p>
+      根据国家法律有关规定,双方按照平等自愿诚实信用的原则,就我司与您建立灵活用工服务合作关系、
+      由您为我司合作单位提供服务事宜订立本服务合作协议。
+    </p>
+    <p class="bold-text">第一条 服务工作内容</p>
+    <p>
+      1.我司因承接第三方(即我司服务合作单位,后文称为”需方”)的灵活用工服务项目分包合作需
+      要,特选用您提供/完成相关服务,该等服务工作的内容主要为您按照需方及需方的项目发包方要求,提供灵活用工服务。
+    </p>
+    <p>2.您应按照我司的要求及需方的标准完成工作。</p>
+    <p class="bold-text">第二条 协议效力</p>
+    <p>
+      1.您的签约信息(包括您的姓名、身份证号等信息),以您提供的信息为准(包括但不限于线上提供或线下提供)。您承诺并保证您所提供的签约信息真实、准确,以免影响您和我司之间的《自由职业者灵活用工服务合作协议》效力。本协议条款若在我司授权的网站上发布,自您线上点击确认之日起生效。
+    </p>
+    <p>
+      2.本协议有效期限为两年。期限届满,双方应另行签署新的协议;若双方未签署新的协议,而以实
+      际行动继续合作的,视为双方同意协议期限顺延直至按照本协议约定终止或解除时为止。
+    </p>
+    <p>3.本协议在发生下列情形时自然终止:</p>
+    <p>3.1经需方事先同意的情况下,您主动退出服务的;</p>
+    <p>3.2需方终止或变更业务模式而不需要您继续履行本协议的;</p>
+    <p>3.3需方认为您不适合继续提供服务的;</p>
+    <p>3.4我司和需方解除合作的;</p>
+    <p>3.5其他原因导致本协议不再继续履行的。</p>
+    <p>您清楚并了解协议期限届满、协议终止,我司以及需方无需支付您任何补偿。</p>
+    <p class="bold-text">第三条 我司的权利和义务</p>
+    <p>
+      1.您应根据我司的安排为需方提供服务,服务期间您应遵守需方的官方要求及相关政策,需方可根
+      据自身的运营要求制定的具体工作安排,您应予遵守。
+    </p>
+    <p>2.我司将按需方的相关规定对您为需方提供服务的工作成果进行验收。</p>
+    <p>
+      3.我司应按约定及时向您支付费用。此处您应明确:您作为我司向需方输出的合作人员,在需方正
+      常向我司结算情况下,您的相关费用结算将由我司完成支付。
+    </p>
+    <p>
+      4.您同意,您不可撤销地授权我司和合作公司有权为提供前述费用结算服务的需要获取您的相关信息(包括但
+      不限于个人身份信息、实名登记手机号码、银行账户相关信息等),并将您的相关信息提交第三方机构进行
+      身份验证。若您提供任何错误、虚假、失效或不完整的资料,或者我司或合作公司有合理的理由怀疑资料为
+      错误、虚假、过期或不完整,我司或合作公司有权暂停或终止向您提供部分或全部服务,对此我司或合作公
+      司不承担任何责任,您承诺并同意负担因此所产生的所有损失,包括但不限于直接损失、间接损失。若因国
+      家法律法规、部门规章或监管机构的要求,我司或合作公司需要您补充提供任何相关资料时,如您不能及时
+      配合提供,我司或合作公司有权暂停或终止向您提供部分或全部服务。
+    </p>
+    <p class="bold-text">第四条 您的权利和义务</p>
+    <p>
+      1.您应按时尽责地完成我司以及需方要求的工作内容,并达到规定的质量标准,不得有侵犯他人知识产权、财产权、人身权、肖像权、隐私权、商业秘密或其他合法权益以及其他违反国家法律法规、国家
+      政策、或有悖于公序良俗的内容。
+    </p>
+    <p>
+      2.协议期内,您应在我司以及需方许可范围内使用本协议有关的商业信息;协议期内以及协议终止后,您均有义务对双方合作的有关协议及合作过程中知悉的我司、需方的相关信息予以保密,未经书面许
+      可,您不得以任何方式向其它方披露、给予或转让该等保密信息。否则,因此导致我司及/或需方或其关联公司的损失,由您负责赔偿。
+    </p>
+    <p>
+      3.除本协议事项外,您不能以我司及/或需方的名义开展任何与完成约定的工作任务无关的业务或活动。
+    </p>
+    <p>
+      4.本协议项下,您为需方提供灵活用工服务。您可根据需方提供的相关交付要求自由选择相应的物料和工具,但在服务过程中产生的任何费用支出需由您本人承担。
+    </p>
+    <p>
+      5.相关服务通过需方网络平台提供,或者需方相关网络平台备案,需方网络平台可能将要求您签署、
+      点击电子协议,您同意点击签署。您点击确认后该协议将对您产生法律效力。
+    </p>
+    <p>6.您不得发表有损我司以及需方的相关言论,不得从事违反法律法规以及社会道德等的相关行为。</p>
+    <p class="bold-text">第五条 服务报酬的支付</p>
+    <p>
+      1.我司将按照“合作政策与规则”向您支付服务报酬。由于您所提供的服务内容、服务质量、服务时长等情况的不同,该等服务报酬金额可能会呈现浮动,您清楚并了解该等浮动为正常情况。我司以人民
+      币形式向您支付服务报酬,您应缴纳的个人所得税及其他税费由我司负责代扣代缴。
+    </p>
+    <p>
+      2.我司的服务报酬将以银行卡转账/支付宝的方式直接支付到您提交的本人开户的银行卡/支付宝账户中,故您需向我司提供您的身份证信息,收款账户信息,我司将为您的以上信息进行严格的保护,如因
+      您以上信息提供不准确导致的服务报酬支付失败、错误,均由您自行承担。
+    </p>
+    <p>
+      3.因您与我司系就需方相关项目服务开展的服务合作关系,故我司不承担您任何劳保福利待遇,也
+      不负责您的任何医疗保险费用。
+    </p>
+    <p class="bold-text">第六条 违约责任</p>
+    <p>
+      1.双方应按本协议约定履行,如有违反,守约方有权要求对方及时改正;造成对方损失的,守约方
+      有权要求违约方赔偿。
+    </p>
+    <p>
+      2.因不可抗力造成损失的,彼此不负赔偿责任,但发生不可抗力一方应及时将有关情况通知另一方,
+      并尽最大努力进行补救。本协议所称不可抗力是指不能预见、不能克服并不能避免且对一方当事人造成重大影响的客观事件,包括但不限于自然灾害如洪水、地震、火灾和风暴等以及社会事件如战争、动乱、政府行为、黑客事件、大范围电信事故等。
+    </p>
+    <p class="bold-text">第七条 协议的终止</p>
+    <p>1.发生以下情形时,本协议终止:</p>
+    <p>
+      1.1协议期限届满或任何一方提前 30
+      日书面通知对方要求终止协议的,但您要求终止协议应事先获得需方的同意并不得影响需方的运营;
+    </p>
+    <p>
+      1.2一方违反协议约定,且违约方在非违约方书面通知后 15
+      日内仍未予改正的,非违约方可以书面通知的形式终止本协议;
+    </p>
+    <p>
+      1.3您如首次未能达到我司的要求,我司在工作验收时将给予警告;此后如仍发生类似情况的,我司
+      可提前终止本协议。
+    </p>
+    <p>1.4本协议的提前终止不影响已经产生的权利义务关系。</p>
+    <p class="bold-text">第八条 涉税事务委托授权</p>
+    <p>
+      您/本人委托我司即【北京安之慧互联网科技有限公司】代理本协议交易项下的涉税事务,包括帮助代缴税款
+      和开具完税证明。
+    </p>
+    <p>
+      您/本人确认我司即【北京安之慧互联网科技有限公司】根据本协议授权提交的相关申报资料和信息是真实、
+      完整、准确,和符合有关法律法规的。
+    </p>
+    <p class="bold-text">第九条 其他</p>
+    <p>
+      1.因履行本协议发生的纠纷,双方应友好协商解决,协商不成的,提请我司所在地人民法院诉讼解决。
+    </p>
+    <p>2.我司有权根据业务需要修改本协议条款。</p>
+    <p>3.如果法律政策等发生变化的,我司将根据法律法规政策进行调整,您/本人应当予以配合。</p>
+    <p>附件:平台企业对自然人注册会员的代开发票风险提醒模板</p>
+    <p>代开发票温馨提示</p>
+    <p>各注册会员:</p>
+    <p>为防范发票虚开风险,我们在为您提供优质服务的同时,温馨提示如下:</p>
+    <p>一、您对本次提供的开票信息真实性、完整性和准确性承担法律责任。</p>
+    <p>二、虚开发票的定义</p>
+    <p>《中华人民共和国发票管理办法》第二十二条规定: 任何单位和个人不得有下列虚开发票行为:</p>
+    <p>(一)为他人、为自己开具与实际经营业务情况不符的发票;</p>
+    <p>(二)让他人为自己开具与实际经营业务情况不符的发票;</p>
+    <p>(三)介绍他人开具与实际经营业务情况不符的发票。</p>
+    <p>三、虚开发票的后果</p>
+    <p>《中华人民共和国刑法》相关规定:</p>
+    <p>
+      第二百零五条
+      【虚开增值税专用发票、用于骗取出口退税、抵扣税款发票罪】虚开增值税专用发票或者虚开用于骗取出口退税、抵扣税款的其他发票的,处三年以下有期徒刑或者拘役,并处二万元以上二
+      十万元以下罚金;虚开的税款数额较大或者有其他严重情节的,处三年以上十年以下有期徒刑,并处五万
+      元以上五十万元以下罚金;虚开的税款数额巨大或者有其他特别严重情节的,处十年以上有期徒刑或者无
+      期徒刑,并处五万元以上五十万元以下罚金或者没收财产。
+    </p>
+    <p>
+      单位犯本条规定之罪的,对单位判处罚金,并对其直接负责的主管人员和其他直接责任人员,处三年
+      以下有期徒刑或者拘役;虚开的税款数额较大或者有其他严重情节的,处三年以上十年以下有期徒刑;虚
+      开的税款数额巨大或者有其他特别严重情节的,处十年以上有期徒刑或者无期徒刑。
+    </p>
+    <p>
+      虚开增值税专用发票或者虚开用于骗取出口退税、抵扣税款的其他发票,是指有为他人虚开、为自己
+      虚开、让他人为自己虚开、介绍他人虚开行为之一的。
+    </p>
+    <p>
+      第二百零五条之一
+      【虚开发票罪】虚开本法第二百零五条规定以外的其他发票,情节严重的,处二年以下有期徒刑、拘役或者管制,并处罚金;情节特别严重的,处二年以上七年以下有期徒刑,并处罚金。
+    </p>
+    <p>
+      单位犯前款罪的,对单位判处罚金,并对其直接负责的主管人员和其他直接责任人员,依照前款的规
+      定处罚。
+    </p>
+    <p>本人已阅读《代开发票温馨提示》,知悉相关法律规定,愿意承担相关法律责任。</p>
+    <p>甲方:北京安之慧互联网科技有限公司</p>
+    <p>年 月 日</p>
+    <p>乙方:</p>
+    <p>年 月 日</p>
+  </view>
+</template>
+
+<script>
+export default {
+  name: 'zhengqizhixing'
+}
+</script>
+
+<style lang="scss" scoped>
+p:not(.title) {
+  text-indent: 2em;
+  line-height: 1.5em;
+}
+.underline-bold {
+  text-decoration: underline;
+  font-weight: bold;
+}
+.bold-text {
+  font-weight: bold;
+}
+.yellow-bgc {
+  background-color: yellow;
+}
+</style>

+ 175 - 0
src/pages-sub-packages/get-task/component/cardItem.vue

@@ -0,0 +1,175 @@
+<template>
+  <view class="card-item" @click="detailClick">
+    <view class="title">
+      <view class="t-l">
+        <text>
+          {{ props!.item!.scorePackageName
+          }}{{ props!.item!.packageSn ? `(${props!.item!.packageSn})` : '' }}
+        </text>
+        <view class="tags">
+          <uv-tags
+            v-if="props!.item!.packageType1 === '1' || props!.item!.packageType1 === '6'"
+            size="mini"
+            borderColor="rgba(63, 163, 241, .1)"
+            bgColor="rgba(63, 163, 241, .1)"
+            text="积分值"
+            color="#3FA3F1"
+            plain
+          />
+          <uv-tags
+            v-if="props!.item!.packageType1 === '2'"
+            size="mini"
+            borderColor="rgba(76,217,100, .1)"
+            bgColor="rgba(76,217,100, .1)"
+            color="#4cd964"
+            text="任务量"
+            plain
+          />
+          <uv-tags
+            v-if="props!.item!.packageType1 === '3'"
+            size="mini"
+            borderColor="rgba(221,82,77, .1)"
+            bgColor="rgba(221,82,77, .1)"
+            color="#dd524d"
+            text="通用"
+            plain
+          />
+          <uv-tags
+            v-if="props!.item!.packageType1 === '4'"
+            size="mini"
+            borderColor="rgba(221,82,77, .1)"
+            bgColor="rgba(221,82,77, .1)"
+            color="#dd524d"
+            text="特定"
+            plain
+          />
+        </view>
+      </view>
+      <view class="t-r">
+        <view class="btn" v-if="props.type === '1'" @click.stop="getTaskClick">立即领取</view>
+        <view class="status" v-else-if="props.type === '2'">
+          <template v-if="props!.item!.enableType == '0' && props!.item!.status === '0'">
+            <view class="point" :style="{ background: '#eeeeee' }"></view>未领取
+          </template>
+          <template v-if="props!.item!.enableType == '0' && props!.item!.status === '1'">
+            <view class="point" :style="{ background: '#288AFF' }"></view>审核中
+          </template>
+          <template v-if="props!.item!.enableType == '0' && props!.item!.status === '2'">
+            <view class="point" :style="{ background: '#34C939' }"></view>申领审核通过
+          </template>
+          <template v-if="props!.item!.enableType == '0' && props!.item!.status === '3'">
+            <view class="point" :style="{ background: '#DF2E2B' }"></view>审核未通过
+          </template>
+          <template v-if="props!.item!.enableType == '1'">
+            <view class="point" :style="{ background: '#DF2E2B' }"></view>已终止,全部收回
+          </template>
+          <template v-if="props!.item!.enableType == '2'">
+            <view class="point" :style="{ background: '#DF2E2B' }"></view>已终止,剩余收回
+          </template>
+        </view>
+      </view>
+    </view>
+    <view class="content">
+      <view class="info-list">
+        <text>发包企业:{{ props!.item!.packageEntName }}</text>
+      </view>
+      <view class="info-list">
+        <text>需求人数:{{ props!.item!.userGetNum }}/{{ props!.item!.userNum }}</text>
+        <text>预计积分值:{{ props!.item!.score }}分</text>
+        <text v-if="props!.item!.taskNum">任务数:{{ props!.item!.taskNum }}个</text>
+      </view>
+      <view class="info-list">
+        <text>发布时间:{{ formatTime(props!.item!.createTime) }}</text>
+      </view>
+      <view class="info-list">
+        <text>需求描述:{{ props!.item!.description || '无' }}</text>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script setup lang="ts">
+import formatTime from '@/utils/formatTime'
+import { defineEmits } from 'vue'
+
+const emit = defineEmits(['getTaskClick'])
+
+const props = defineProps({
+  item: Object,
+  type: String
+})
+
+const getTaskClick = () => {
+  emit('getTaskClick')
+}
+
+const detailClick = () => {
+  uni.navigateTo({
+    url: `/pages-sub-packages/get-task/detail?id=${props!.item!.id}`
+  })
+}
+</script>
+
+<style lang="scss" scoped>
+.card-item {
+  margin-bottom: 16rpx;
+  padding: 30rpx;
+  box-sizing: border-box;
+  background-color: #fff;
+  width: 690rpx;
+  min-height: 300rpx;
+  .title {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    .t-l {
+      flex: 1;
+      min-height: 56rpx;
+      .tags {
+        display: inline-block;
+        margin-left: 20rpx;
+      }
+    }
+
+    .t-r {
+      .btn {
+        margin-left: 20rpx;
+        width: 160rpx;
+        background: #6eb657;
+        border-radius: 200rpx;
+        text-align: center;
+        line-height: 56rpx;
+        color: #fff;
+        font-size: 28rpx;
+        font-weight: 500;
+      }
+      .status {
+        display: flex;
+        align-items: center;
+        color: #999;
+        font-size: 28rpx;
+        font-weight: 400;
+        .point {
+          line-height: 56rpx;
+          display: inline-block;
+          width: 10rpx;
+          height: 10rpx;
+          border-radius: 100%;
+          margin-right: 10rpx;
+        }
+      }
+    }
+  }
+  .content {
+    .info-list {
+      margin-bottom: 10rpx;
+      text {
+        font-size: 24rpx;
+        color: #999;
+        margin-right: 10rpx;
+        font-weight: 400;
+      }
+    }
+  }
+}
+</style>

+ 289 - 0
src/pages-sub-packages/get-task/detail.vue

@@ -0,0 +1,289 @@
+<template>
+  <view class="task-detail">
+    <view class="detail">
+      <view class="cell-row">
+        <view class="cell-row-box">
+          <text class="cell-title">执行包名称</text>
+          <text class="cell-desc">{{ taskDetail?.packageName }}</text>
+        </view>
+      </view>
+      <view class="cell-row">
+        <view class="cell-row-box">
+          <text class="cell-title">需求人数</text>
+          <text class="cell-desc">{{ taskDetail?.userNum }}</text>
+        </view>
+      </view>
+      <view v-if="taskDetail?.packageType1 === '1'" class="cell-row">
+        <view class="cell-row-box">
+          <text class="cell-title">执行包值</text>
+          <text class="cell-desc">{{ taskDetail?.score }}</text>
+        </view>
+      </view>
+      <view v-else class="cell-row">
+        <view class="cell-row-box">
+          <text class="cell-title">预计积分值</text>
+          <text class="cell-desc">{{ taskDetail?.score }}</text>
+        </view>
+      </view>
+      <view v-if="taskDetail?.packageType1 != '1'" class="cell-row">
+        <view class="cell-row-box">
+          <text class="cell-title">任务个数</text>
+          <text class="cell-desc">{{ taskDetail?.taskNum }}</text>
+        </view>
+      </view>
+      <view class="cell-row">
+        <view class="cell-row-box">
+          <text class="cell-title">起止日期</text>
+          <text class="cell-desc">{{ taskDetail?.termDate }}</text>
+        </view>
+      </view>
+      <view class="cell-row">
+        <view class="cell-row-box">
+          <text class="cell-title">发包企业</text>
+          <text class="cell-desc">{{ taskDetail?.packageEntName }}</text>
+        </view>
+      </view>
+      <view class="cell-row">
+        <view class="cell-row-box">
+          <text class="cell-title">发布日期</text>
+          <text class="cell-desc">{{ taskDetail?.createTime }}</text>
+        </view>
+      </view>
+      <view v-show="taskDetail?.exportFlag === '1'" class="cell-row">
+        <uv-button @click="exportFn()" :customStyle="customBtnStyle">导出报告</uv-button>
+      </view>
+    </view>
+    <view class="rules" v-if="rulesList?.length > 0">
+      <view class="rules-con">
+        <view class="r-title">任务完成情况:</view>
+        <view class="table">
+          <uni-table border stripe emptyText="暂无更多数据">
+            <!-- 表头行 -->
+            <uni-tr>
+              <uni-th align="center">任务大类</uni-th>
+              <uni-th align="center">任务类型</uni-th>
+              <uni-th align="center" width="80">拆解个数</uni-th>
+              <uni-th align="center" width="80">完成个数</uni-th>
+            </uni-tr>
+            <!-- 表格数据行 -->
+            <uni-tr v-for="(item, index) in rulesList" :key="index">
+              <uni-td align="center">{{ item.baseId }}</uni-td>
+              <uni-td align="center">{{ item.taskTypeName }}</uni-td>
+              <uni-td align="center">{{ item.qty }}</uni-td>
+              <uni-td align="center">{{ item.count }}</uni-td>
+            </uni-tr>
+          </uni-table>
+        </view>
+      </view>
+    </view>
+    <view class="btn" v-if="taskDetail?.receiveFlag">
+      <uv-button
+        shape="circle"
+        :disabled="disabled"
+        :text="disabled ? '领取成功' : '领取执行包'"
+        :customStyle="customStyle"
+        @click="getTaskClick"
+      />
+    </view>
+    <!-- 导出 -->
+    <uv-modal ref="exportModal" title="报告导出" showCancelButton>
+      <view class="slot-content email-input">
+        <uv-input placeholder="请输入邮箱" border="surround" w v-model="emailValue" />
+      </view>
+      <template v-slot:confirmButton>
+        <view class="export-btns">
+          <button class="export-btn cancel" @click="exportModalCancel">取消</button>
+          <button class="export-btn confirm" @click="exportModalConfirm">确定</button>
+        </view>
+      </template>
+    </uv-modal>
+  </view>
+</template>
+
+<script setup lang="ts">
+import { onLoad } from '@dcloudio/uni-app'
+import { ref } from 'vue'
+import {
+  receivePackage,
+  getScorePackageInfoById,
+  exportZbInfoFormWeiNewApi,
+  getPkgTaskDetailsApi
+} from '@/service/modules/getTask'
+
+import { validateEmail } from '@/utils/index'
+
+const id = ref()
+onLoad((e) => {
+  id.value = e?.id
+  getDetail()
+  getRules()
+})
+
+const taskDetail = ref()
+
+async function getDetail() {
+  let res = await getScorePackageInfoById(id.value)
+  if (res.code === 0) {
+    taskDetail.value = res.data
+  }
+}
+const rulesList = ref()
+async function getRules() {
+  let res = await getPkgTaskDetailsApi({
+    pkgId: id.value
+  })
+
+  if (res.code === 0) {
+    rulesList.value = res.data
+  }
+}
+const disabled = ref(false)
+// 领取执行包
+async function getTaskClick() {
+  uni.showLoading()
+  const res = await receivePackage(id.value)
+  if (res.code === 0) {
+    uni.hideLoading()
+    uni.showToast({
+      title: '领取成功',
+      icon: 'none'
+    })
+    disabled.value = true
+  }
+}
+
+const customStyle = {
+  background: '#6eb657',
+  color: '#ffffff'
+}
+
+const customBtnStyle = {
+  background: '#3fa3f1',
+  color: '#ffffff',
+  marginBottom: '30rpx'
+}
+
+const exportModal = ref()
+const exportFn = () => {
+  exportModal.value.open()
+}
+
+const emailValue = ref('')
+const exportModalCancel = () => {
+  emailValue.value = ''
+  exportModal.value.close()
+}
+const exportModalConfirm = async () => {
+  if (!validateEmail(emailValue.value)) {
+    return uni.showToast({
+      title: '请输入正确的邮箱',
+      icon: 'none',
+      duration: 1200
+    })
+  }
+  if (id.value) {
+    const res = await exportZbInfoFormWeiNewApi({
+      id: id.value,
+      email: emailValue.value
+    })
+    if (res.code === 1) {
+      uni.showToast({
+        title: res.msg || '导出失败,请联系管理员',
+        icon: 'none'
+      })
+    }
+    if (res.code === 0) {
+      uni.showToast({
+        title: '报告将发送至您的邮箱,请注意查收',
+        icon: 'none'
+      })
+    }
+    exportModalCancel()
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.task-detail {
+  background: #f2f2f2;
+  .detail {
+    .cell-row {
+      background: #ffffff;
+      padding: 0 56rpx 0 66rpx;
+      .cell-row-box {
+        border-bottom: 1rpx solid #e2e2e2;
+        position: relative;
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        padding: 32rpx 0;
+        &::before {
+          content: '*';
+          position: absolute;
+          left: -15px;
+          font-size: 14px;
+          color: #fa3534;
+          height: 9px;
+          line-height: 1;
+        }
+        .cell-title {
+          font-size: 30rpx;
+        }
+        .cell-desc {
+          font-size: 30rpx;
+          color: #898989;
+        }
+      }
+      &:last-child {
+        .cell-row-box {
+          border-bottom: none;
+        }
+      }
+    }
+  }
+  .rules {
+    padding-bottom: 150rpx;
+    margin-top: 20rpx;
+    background: #ffffff;
+    .rules-con {
+      .r-title {
+        padding: 22rpx 60rpx;
+        margin-bottom: 10rpx;
+      }
+      .table {
+        padding: 0 20rpx;
+      }
+    }
+  }
+  .btn {
+    box-shadow: 0px 0px 8rpx 0px rgba(193, 193, 193, 0.5);
+    padding: 28rpx 16rpx;
+    background: #ffffff;
+    position: fixed;
+    bottom: 0;
+    left: 0;
+    right: 0;
+    z-index: 10;
+  }
+}
+.email-input {
+  width: 100%;
+}
+
+.export-btns {
+  display: flex;
+  justify-content: space-between;
+
+  .export-btn {
+    border: none;
+    background: none;
+    font-size: 32rpx;
+  }
+  .cancel {
+    color: #666;
+  }
+  .confirm {
+    color: #6eb657;
+  }
+}
+</style>

+ 270 - 0
src/pages-sub-packages/get-task/index.vue

@@ -0,0 +1,270 @@
+<template>
+  <view class="get-list">
+    <view class="header">
+      <view class="search">
+        <uv-input
+          placeholder="请输入内容"
+          clearable
+          border="surround"
+          prefixIcon="search"
+          prefixIconStyle="font-size: 32px;color: #909399"
+          shape="circle"
+          @input="searchValChange"
+          :customStyle="customStyle"
+          v-model="params.packageName"
+        />
+      </view>
+      <view class="tabs">
+        <view class="tab-l">
+          <view class="tabs-item" @click="tabClick(1)">
+            <text :class="params.selType === 1 ? 'active-tab' : ''">可领取({{ allTotal }})</text>
+          </view>
+          <view class="tabs-item" @click="tabClick(2)">
+            <text :class="params.selType === 2 ? 'active-tab' : ''">已领取</text>
+          </view>
+        </view>
+        <view class="tab-r">
+          <view class="date" v-if="!dateStr.year || !dateStr.month" @click="showDatePicker">
+            <text>日期</text>
+            <uv-icon name="arrow-down-fill" color="#333" />
+          </view>
+          <view class="date" v-else>
+            <text @click="showDatePicker">{{ dateStr.year + '年' + dateStr.month + '月' }}</text>
+            <uv-icon name="close-circle" color="#333" @click="clearDate" />
+          </view>
+        </view>
+      </view>
+    </view>
+    <view class="content" v-if="params.total != 0">
+      <view v-show="params.selType === 1">
+        <cardItem
+          v-for="item in dataList"
+          :key="item.id"
+          :item="item"
+          type="1"
+          @getTaskClick="getTaskClick(item)"
+        />
+      </view>
+      <view v-show="params.selType === 2">
+        <cardItem v-for="item in dataList" :key="item.id" :item="item" type="2" />
+      </view>
+    </view>
+    <noData v-else />
+    <!-- 日期选择 -->
+    <uv-datetime-picker
+      ref="datetimePicker"
+      v-model="dateValue"
+      mode="year-month"
+      @confirm="dateConfirm"
+    />
+  </view>
+</template>
+
+<script setup lang="ts">
+import dayjs from 'dayjs'
+import { ref, reactive } from 'vue'
+import { onReachBottom, onShow } from '@dcloudio/uni-app'
+import { getPackageList, receivePackage } from '@/service/modules/getTask'
+import cardItem from './component/cardItem.vue'
+import noData from '@/components/noData/index.vue'
+import { debounce } from '@/utils/index'
+
+class Params {
+  total = -1
+  current = 1
+  size = 20
+  selType = 1
+  selDate = ''
+  packageName = ''
+}
+const params = ref(new Params())
+
+const resetParams = () => {
+  params.value = new Params()
+}
+const dataList = ref<any[]>([])
+
+const allTotal = ref(0)
+
+async function getList() {
+  uni.showLoading({
+    title: '加载中...'
+  })
+  let res = await getPackageList(params.value)
+  if (res.data) {
+    params.value.total = res.data.total
+    dataList.value = dataList.value.concat(res.data.records)
+    // 当获取的是可领取的包
+    if (params.value.selType === 1) {
+      allTotal.value = res.data.total
+    }
+  }
+  uni.hideLoading()
+}
+
+onShow(() => {
+  dataList.value = []
+  getList()
+})
+
+const customStyle = {
+  background: '#f6f6f6',
+  border: 'none',
+  height: '60rpx'
+}
+
+// tab切换
+const tabClick = (act: number) => {
+  if (params.value.selType === act) return
+  resetParams()
+  dataList.value = []
+  params.value.selType = act
+  getList()
+}
+
+// 日期选择
+const datetimePicker = ref()
+const dateValue = ref(Number(new Date()))
+const showDatePicker = () => datetimePicker.value.open()
+
+const dateStr = reactive({
+  year: '',
+  month: ''
+})
+
+const clearDate = () => {
+  dateStr.year = ''
+  dateStr.month = ''
+  dateValue.value = Number(new Date())
+  params.value.selDate = ''
+  params.value.current = 1
+  dataList.value = []
+  getList()
+}
+const dateConfirm = (e: any) => {
+  const date = dayjs(e.value).format('YYYY-MM')
+  params.value.selDate = date
+  let arr = date.split('-')
+  dateStr.year = arr[0]
+  dateStr.month = arr[1]
+  params.value.current = 1
+  dataList.value = []
+  getList()
+}
+
+const searchValChange = debounce(() => {
+  params.value.current = 1
+  dataList.value = []
+  getList()
+})
+
+// 底部
+onReachBottom(() => {
+  if (dataList.value.length === params.value.total) return
+  params.value.current++
+  getList()
+})
+
+// 领取执行包
+async function getTaskClick(item: any) {
+  const res = await receivePackage(item.id)
+  if (res.code === 0) {
+    uni.showToast({
+      title: '领取成功',
+      icon: 'none',
+      duration: 1000
+    })
+    setTimeout(() => {
+      params.value.current = 1
+      dataList.value = []
+      getList()
+    }, 1000)
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.get-list {
+  min-height: 96vh;
+  background-color: #fafafa;
+  padding: 0 30rpx;
+
+  .header {
+    position: fixed;
+    top: 0;
+    left: 0;
+    right: 0;
+    z-index: 999;
+    background-color: #fff;
+
+    .search {
+      padding: 0 30rpx;
+    }
+
+    .tabs {
+      margin-top: 8rpx;
+      height: 80rpx;
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+
+      .tab-l {
+        flex: 1;
+        display: flex;
+        justify-content: space-between;
+
+        .tabs-item {
+          flex: 1;
+          text-align: center;
+          color: #666;
+          font-size: 28rpx;
+          font-weight: 400;
+          text {
+            display: inline-block;
+            &.active-tab {
+              color: #333;
+              font-weight: 600;
+              position: relative;
+              &::after {
+                content: '';
+                display: block;
+                position: absolute;
+                width: 50%;
+                height: 6rpx;
+                background-color: #6eb657;
+                left: 50%;
+                top: 50rpx;
+                transform: translateX(-50%);
+              }
+            }
+          }
+        }
+      }
+      .tab-r {
+        width: 240rpx;
+        height: 40rpx;
+        border-left: 2rpx solid #ebebeb;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+
+        .date {
+          display: flex;
+          justify-content: center;
+          align-items: center;
+          text {
+            margin-right: 10rpx;
+            font-size: 28rpx;
+            font-weight: 400;
+          }
+        }
+      }
+    }
+  }
+
+  .content {
+    margin-top: 180rpx;
+    padding-top: 24rpx;
+  }
+}
+</style>

+ 568 - 0
src/pages-sub-packages/task-history/index.vue

@@ -0,0 +1,568 @@
+<template>
+  <view class="get-list">
+    <!-- 顶部tab -->
+    <view class="header">
+      <view class="tabs">
+        <view class="tab-l">
+          <view class="tabs-item" @click="tabClick(1)">
+            <text :class="params.activeId === 1 ? 'active-tab' : ''">全部</text>
+          </view>
+          <view class="tabs-item" @click="tabClick(2)">
+            <text :class="params.activeId === 2 ? 'active-tab' : ''">进行中</text>
+          </view>
+          <view class="tabs-item" @click="tabClick(3)">
+            <text :class="params.activeId === 3 ? 'active-tab' : ''">审批中</text>
+          </view>
+          <view class="tabs-item" @click="tabClick(4)">
+            <text :class="params.activeId === 4 ? 'active-tab' : ''">已完成</text>
+          </view>
+        </view>
+        <view class="tab-r">
+          <view class="date" v-if="!dateStr.year || !dateStr.month" @click="showDatePicker">
+            <text>日期</text>
+            <uv-icon name="arrow-down-fill" color="#333" />
+          </view>
+          <view class="date" v-else>
+            <text @click="showDatePicker">{{ dateStr.year + '年' + dateStr.month + '月' }}</text>
+            <uv-icon name="close-circle" color="#333" @click="clearDate" />
+          </view>
+        </view>
+      </view>
+    </view>
+    <view class="content" v-if="params.total != 0">
+      <view class="notice">
+        <uv-notice-bar
+          text="任务包即将完成,请不要做积分较高的任务,避免浪费"
+          bgColor="#6eb657"
+          color="#fff"
+        />
+      </view>
+      <!-- 列表 -->
+      <view class="task-content">
+        <view class="task-list">
+          <view
+            v-for="item in dataList"
+            :key="item.statusId"
+            @click="getDetail(item)"
+            class="task-item"
+            :class="{ disable: item.taskAddFlag === '0' }"
+          >
+            <view class="task-top">
+              <view class="top-l">
+                <text class="name">{{ item.scorePackageName }}</text>
+                <view class="tag">
+                  <template v-if="item.taskAddFlag === '0'">
+                    <view class="gry">{{ getText(item.packageType1) }}</view>
+                  </template>
+                  <template v-else>
+                    <view
+                      v-if="item.packageType1 === '1' || item.packageType1 === '6'"
+                      class="main"
+                      >{{ getText(item.packageType1) }}</view
+                    >
+                    <view v-if="item.packageType1 === '2'" class="green">{{
+                      getText(item.packageType1)
+                    }}</view>
+                    <view v-if="item.packageType1 === '3'" class="main">{{
+                      getText(item.packageType1)
+                    }}</view>
+                    <view v-if="item.packageType1 === '4'" class="yellow">{{
+                      getText(item.packageType1)
+                    }}</view>
+                  </template>
+                </view>
+              </view>
+              <view class="top-r">
+                <view class="point"></view>
+                <template v-if="item.enableType == '0'">
+                  <template v-if="item.settleNoteStatus == '1'">
+                    <view class="is-settle">
+                      <view class="settle-text">已结算</view>
+                      <view>{{ item.notifyTime }}</view>
+                    </view>
+                  </template>
+                  <template v-else>
+                    <text v-if="item.status === '1'">审核中</text>
+                    <text v-if="item.status === '2'">申领审核通过</text>
+                    <text v-if="item.status === '3'">审核不通过</text>
+                  </template>
+                </template>
+                <text v-else-if="item.enableType == '1'">已终止,全部收回</text>
+                <text v-else-if="item.enableType == '2'">已终止,剩余收回</text>
+                <text v-else>进行中</text>
+              </view>
+            </view>
+            <view class="task-list-content">
+              <view class="task-info">
+                <text>发包方:{{ item.packageEntName }}</text>
+              </view>
+              <view class="task-info">
+                <text>发包时间:{{ formatTime(item.createTime) }}</text>
+                <text>接包时间:{{ formatTime(item.receiveTime) }}</text>
+              </view>
+              <view class="progress">
+                <uv-line-progress
+                  class="pro-one"
+                  v-if="item.taskAddFlag === '0'"
+                  round
+                  :percentage="100"
+                  activeColor="#999"
+                  inactiveColor="#f8f8f0"
+                ></uv-line-progress>
+                <uv-line-progress
+                  class="pro-two"
+                  v-else
+                  round
+                  :percentage="item.speedProgress"
+                  activeColor="#6eb657"
+                  inactiveColor="#f8f8f0"
+                ></uv-line-progress>
+                <view class="progress-info">
+                  <text
+                    v-if="item.packageType1 === '1' || item.packageType1 === '6'"
+                    class="pro-txt"
+                    :class="{ 'disable-text': item.taskAddFlag === '0' }"
+                  >
+                    {{ item.finishScore }}/{{ item.score }}
+                  </text>
+                  <text
+                    v-else
+                    class="pro-txt"
+                    :class="{ 'disable-text': item.taskAddFlag === '0' }"
+                  >
+                    {{ item.taskAddFlag === '1' ? item.taskFinishNum : item.taskNum2 }}/{{
+                      item.taskNum2
+                    }}
+                  </text>
+                </view>
+              </view>
+              <view class="btns" v-if="showBtn(item)">
+                <view class="btn" @click.stop.self="toQuizDetail(item)"><text>去答题</text></view>
+              </view>
+            </view>
+          </view>
+        </view>
+      </view>
+    </view>
+    <!-- 无数据展示 -->
+    <noData v-else />
+    <!-- 日期选择 -->
+    <uv-datetime-picker
+      ref="datetimePicker"
+      v-model="dateValue"
+      mode="year-month"
+      @confirm="dateConfirm"
+    ></uv-datetime-picker>
+  </view>
+</template>
+
+<script setup lang="ts">
+import dayjs from 'dayjs'
+import { ref, reactive } from 'vue'
+import { onReachBottom, onLoad, onShow } from '@dcloudio/uni-app'
+import { getPackageList } from '@/service/modules/getTask'
+import noData from '@/components/noData/index.vue'
+import { getQuizPltTextResultGroupingApi } from '@/service/modules/quiz'
+
+class Params {
+  total = -1
+  current = 1
+  size = 20
+  selType = 2
+  selDate = ''
+  packageName = ''
+  activeId = 1
+}
+const params = ref(new Params())
+
+const resetParams = () => {
+  params.value = new Params()
+}
+const dataList = ref<any[]>([])
+
+async function getList() {
+  uni.showLoading({
+    title: '加载中...'
+  })
+  let res = await getPackageList(params.value)
+
+  if (res.data) {
+    uni.hideLoading()
+    params.value.total = res.data.total
+    dataList.value = dataList.value.concat(res.data.records)
+  }
+}
+
+const type = ref()
+onLoad((e) => {
+  if (e?.activeId) {
+    params.value.activeId = Number(e?.activeId)
+  }
+  type.value = e?.type
+
+  dataList.value = []
+  getQuizPltTextResultGroupingFn()
+  getList()
+})
+
+const passList = ref<number[]>([])
+const getQuizPltTextResultGroupingFn = async () => {
+  const res = await getQuizPltTextResultGroupingApi()
+  passList.value = res.data?.passed
+}
+
+const showBtn = (item: any) => {
+  const pkgQuizIds = item?.quizIds || []
+  let flag = pkgQuizIds.every((iten: number) => {
+    return passList.value?.includes(iten)
+  })
+  return !flag
+}
+
+const toQuizDetail = (item: any) => {
+  const pkgQuizIds = item?.quizIds || []
+  if (pkgQuizIds[0]) {
+    uni.navigateTo({
+      url: `/pages-sub-mine/quizDetail/index?id=${pkgQuizIds[0]}`
+    })
+  }
+}
+
+// tab切换
+const tabClick = (act: number) => {
+  if (params.value.activeId === act) return
+  resetParams()
+  dataList.value = []
+  params.value.activeId = act
+  getList()
+}
+
+// 日期选择
+const datetimePicker = ref()
+const dateValue = ref(Number(new Date()))
+const showDatePicker = () => datetimePicker.value.open()
+const dateStr = reactive({
+  year: '',
+  month: ''
+})
+const clearDate = () => {
+  dateStr.year = ''
+  dateStr.month = ''
+  dateValue.value = Number(new Date())
+  params.value.selDate = ''
+  params.value.current = 1
+  dataList.value = []
+  getList()
+}
+const dateConfirm = (e: any) => {
+  const date = dayjs(e.value).format('YYYY-MM')
+  params.value.selDate = date
+  let arr = date.split('-')
+  dateStr.year = arr[0]
+  dateStr.month = arr[1]
+  params.value.current = 1
+  dataList.value = []
+  getList()
+}
+
+// 底部
+onReachBottom(() => {
+  if (dataList.value.length === params.value.total) return
+  params.value.current++
+  getList()
+})
+
+function getDetail(item: any) {
+  if (type.value !== '1') {
+    uni.navigateTo({
+      url: `/pages-sub-packages/get-task/detail?id=${item.id}`
+    })
+  } else {
+    if (item.status === '3') {
+      return uni.showToast({
+        title: '当前无可查询的任务',
+        icon: 'none'
+      })
+    }
+    uni.navigateTo({
+      url: `/pages-sub-packages/task-list/index?id=${item.id}`
+    })
+  }
+}
+
+function getText(item: any) {
+  let str = ''
+  item = item + ''
+  switch (item) {
+    case '1':
+      str = '积分值'
+      break
+    case '2':
+      str = '任务量'
+      break
+    case '3':
+      str = '通用'
+      break
+    case '4':
+      str = '特定'
+      break
+    case '6':
+      str = '积分值'
+      break
+  }
+  return str
+}
+
+const formatTime = (time: string) => dayjs(time).format('YYYY-MM-DD')
+</script>
+
+<style lang="scss" scoped>
+.get-list {
+  min-height: 96vh;
+  background-color: #fafafa;
+  padding: 0 30rpx;
+
+  .header {
+    position: fixed;
+    top: 0;
+    left: 0;
+    right: 0;
+    z-index: 999;
+    background-color: #fff;
+
+    .tabs {
+      margin-top: 8rpx;
+      height: 80rpx;
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+
+      .tab-l {
+        flex: 1;
+        display: flex;
+        justify-content: space-between;
+
+        .tabs-item {
+          flex: 1;
+          text-align: center;
+          color: #666;
+          font-size: 28rpx;
+          font-weight: 400;
+          text {
+            display: inline-block;
+            &.active-tab {
+              color: #333;
+              font-weight: 600;
+              position: relative;
+              &::after {
+                content: '';
+                display: block;
+                position: absolute;
+                width: 50%;
+                height: 6rpx;
+                background-color: #6eb657;
+                left: 50%;
+                top: 50rpx;
+                transform: translateX(-50%);
+              }
+            }
+          }
+        }
+      }
+      .tab-r {
+        width: 240rpx;
+        height: 40rpx;
+        border-left: 2rpx solid #ebebeb;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+
+        .date {
+          display: flex;
+          justify-content: center;
+          align-items: center;
+          text {
+            margin-right: 10rpx;
+            font-size: 28rpx;
+            font-weight: 400;
+          }
+        }
+      }
+    }
+  }
+
+  .content {
+    margin-top: 100rpx;
+    padding-top: 24rpx;
+    .notice {
+      :deep(.uv-notice-bar) {
+        border-radius: 8rpx;
+        background: #f8b856;
+      }
+    }
+    .task-content {
+      background-color: #fafafa;
+      .task-list {
+        margin-top: 18rpx;
+        .task-item {
+          width: 100%;
+          background: #ffffff;
+          border-radius: 16rpx;
+          margin-bottom: 24rpx;
+
+          .task-top {
+            display: flex;
+            padding: 20rpx;
+            background: #f8f8f0;
+            border-top-left-radius: 16rpx;
+            border-top-right-radius: 16rpx;
+            .top-l {
+              flex: 1;
+              .name {
+                color: #333;
+                font-weight: 600;
+                font-size: 34rpx;
+                line-height: 50rpx;
+              }
+              .tag {
+                display: inline-block;
+                margin-left: 10rpx;
+                vertical-align: text-bottom;
+                view {
+                  line-height: 34rpx;
+                  text-align: center;
+                  display: inline-block;
+                  margin-left: 10rpx;
+                  padding: 0 12rpx;
+                  border-radius: 8rpx;
+                  font-size: 24rpx;
+                }
+                .main {
+                  border: 2rpx solid #6eb657;
+                  color: #6eb657;
+                }
+                .green {
+                  border: 2rpx solid #55d169;
+                  color: #55d169;
+                }
+                .yellow {
+                  border: 2rpx solid #ffbe1c;
+                  color: #ffbe1c;
+                }
+                .gry {
+                  border: 2rpx solid #d3d3d3;
+                  color: #999999;
+                }
+              }
+            }
+            .top-r {
+              max-width: 250rpx;
+              display: flex;
+              align-items: center;
+              .point {
+                line-height: 56rpx;
+                display: inline-block;
+                width: 10rpx;
+                height: 10rpx;
+                border-radius: 100%;
+                background-color: #6eb657;
+                margin-right: 10rpx;
+              }
+              text {
+                font-weight: 400;
+                line-height: 56rpx;
+                color: #6eb657;
+              }
+              .is-settle {
+                text-align: right;
+                color: #6b8e23;
+                font-size: 24rpx;
+              }
+            }
+          }
+          .task-list-content {
+            padding: 24rpx;
+            background: #fff;
+            .task-info {
+              margin-bottom: 8rpx;
+              text {
+                font-weight: 400;
+                margin-right: 30rpx;
+                font-size: 24rpx;
+                color: #999;
+              }
+            }
+            .progress {
+              margin-top: 20rpx;
+              display: flex;
+              justify-content: space-between;
+              .pro-one {
+                ::v-deep .u-progress {
+                  border: 2.5rpx solid #d5d5d5;
+                  width: 444rpx;
+                  .u-active {
+                    border-radius: 100rpx;
+                  }
+                }
+              }
+              .pro-two {
+                ::v-deep .u-progress {
+                  border: 2.5rpx solid #6eb657;
+                  width: 444rpx;
+                  .u-active {
+                    border-radius: 100rpx;
+                  }
+                }
+              }
+              .progress-info {
+                margin-left: 30rpx;
+                flex: 1;
+                text-align: right;
+              }
+              .disable-text {
+                color: #999;
+              }
+            }
+          }
+        }
+        .disable {
+          .task-top {
+            background-color: #f5f5f5;
+            .top-l {
+              .name {
+                color: #999;
+              }
+            }
+            .top-r {
+              .point {
+                background: #999;
+              }
+              text {
+                color: #999;
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}
+
+.btns {
+  margin-top: 30rpx;
+  display: flex;
+
+  .btn {
+    display: flex;
+    align-items: center;
+    height: 34rpx;
+    margin-right: 36rpx;
+
+    text {
+      color: #6eb657;
+      font-size: 24rpx;
+      line-height: 34rpx;
+    }
+  }
+}
+</style>

+ 153 - 0
src/pages-sub-packages/task-list/index.vue

@@ -0,0 +1,153 @@
+<template>
+  <view class="task-list">
+    <view class="list" v-if="dataList.length">
+      <view class="list-item" v-for="item in dataList" :key="item.id" @click="detailClick(item.id)">
+        <view
+          class="item-top"
+          :class="{ 'disable-top': item.realFlag == '1' || item.taskStatus == '4' }"
+        >
+          <view
+            class="top-clock"
+            :class="{ 'disable-text': item.realFlag == '1' || item.taskStatus == '4' }"
+          >
+            <image
+              v-if="item.realFlag == '1' || item.taskStatus == '4'"
+              class="clock-icon"
+              src="/static/images/task/clock2.png"
+            />
+            <image v-else class="clock-icon" src="/static/images/task/clock.png" />
+            <text :class="{ 'disable-text': item.realFlag == '1' || item.taskStatus == '4' }">{{
+              formatTime(item.createTime)
+            }}</text>
+          </view>
+          <view class="top-ing" v-if="item.realFlag == '1' || item.taskStatus == '4'"
+            >审核不通过</view
+          >
+          <uv-icon
+            name="arrow-right"
+            :color="item.realFlag == '1' || item.taskStatus == '4' ? '#999999' : '#fff'"
+            size="16"
+          />
+        </view>
+        <view class="item-bottom">
+          <text :class="{ 'disable-text': item.realFlag == '1' || item.taskStatus == '4' }">{{
+            item.taskTypeId
+          }}</text>
+          <text :class="{ 'disable-text': item.realFlag == '1' || item.taskStatus == '4' }"
+            >+{{ item.score }}积分</text
+          >
+        </view>
+      </view>
+    </view>
+    <noData v-else />
+  </view>
+</template>
+
+<script setup lang="ts">
+import formatTime from '@/utils/formatTime'
+import { getTaskListByPackageIdApi } from '@/service/modules/getTask'
+import { onLoad, onReachBottom } from '@dcloudio/uni-app'
+import { reactive, ref } from 'vue'
+import { useLoginStore } from '@/store/login'
+import noData from '@/components/noData/index.vue'
+
+const loginStore = useLoginStore()
+
+const total = ref()
+const params = reactive({
+  taskUserId: loginStore?.currentUserInfo.userId,
+  scorePackageId: '',
+  current: 1,
+  size: 10
+})
+
+const dataList = ref<any[]>([])
+async function getTaskListByPackageId() {
+  const res = await getTaskListByPackageIdApi(params)
+  if (res.code === 0) {
+    dataList.value = dataList.value.concat(res.data.records)
+    total.value = res.data.total
+  }
+}
+onLoad((e) => {
+  params.scorePackageId = e?.id
+  getTaskListByPackageId()
+})
+
+onReachBottom(() => {
+  if (dataList.value.length === total.value) return
+  params.current++
+  getTaskListByPackageId()
+})
+
+const detailClick = (id: string) => {
+  uni.navigateTo({
+    url: `/pages/task/task-detail/index?id=${id}`
+  })
+}
+</script>
+
+<style lang="scss" scoped>
+.task-list {
+  .list {
+    margin-top: 20rpx;
+    padding: 30rpx;
+    .list-item {
+      border-radius: 12rpx;
+      margin-top: 32rpx;
+      box-shadow: 0 10rpx 20rpx 10rpx #eaeaea;
+      .item-top {
+        box-sizing: border-box;
+        border-top-right-radius: 12rpx;
+        border-top-left-radius: 12rpx;
+        height: 102rpx;
+        background: #6eb657;
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        padding: 22rpx 34rpx;
+        .top-clock {
+          background: #ffffff;
+          border-radius: 10rpx;
+          display: flex;
+          align-items: center;
+          padding: 12rpx 18rpx;
+          font-size: 26rpx;
+          color: #6eb657;
+          .disable-text {
+            color: #9a9a9a;
+          }
+          .clock-icon {
+            width: 36rpx;
+            height: 36rpx;
+            margin-right: 20rpx;
+          }
+        }
+        .top-ing {
+          text-align: right;
+          line-height: 1.5;
+          font-size: 28rpx;
+          color: #ffffff;
+        }
+      }
+      .disable-top {
+        background: linear-gradient(180deg, rgba(203, 203, 203, 1) 0%, rgba(183, 183, 183, 1) 100%);
+      }
+      .disable-text {
+        color: #9a9a9a;
+      }
+      .item-bottom {
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        padding: 44rpx 28rpx 22rpx;
+        font-size: 28rpx;
+        color: #6eb657;
+        .disable-text {
+          color: #9a9a9a;
+        }
+      }
+    }
+  }
+}
+</style>

+ 416 - 0
src/pages-sub-service-mangement/assignPoints/index.vue

@@ -0,0 +1,416 @@
+<template>
+  <view class="objectives-list">
+    <view class="search">
+      <view class="top-search">
+        <view class="search-input">
+          <uv-input
+            v-model="searchParams.scorePackageName"
+            :customStyle="customStyle"
+            clearable
+            shape="circle"
+            placeholder="请输入"
+            prefixIcon="search"
+            prefixIconStyle="font-size: 22px;color: #6eb657"
+          ></uv-input>
+        </view>
+        <view class="search-button" @click="searchFn">搜索</view>
+        <uv-icon name="plus-circle" color="#6eb657" size="24" @click="addFn" />
+      </view>
+      <view class="search-content">
+        <view
+          class="search-list"
+          @click="searchClick('acceptSug')"
+          :class="searchParams.acceptSug ? 'active' : ''"
+        >
+          <text>承接对象</text>
+          <uv-icon
+            name="arrow-down-fill"
+            :color="searchParams.acceptSug ? '#6eb657' : '#111111'"
+            size="14"
+          />
+        </view>
+        <view
+          class="search-list"
+          @click="searchClick('period')"
+          :class="searchParams.period.length ? 'active' : ''"
+        >
+          <text>创建日期</text>
+          <uv-icon
+            name="arrow-down-fill"
+            :color="searchParams.period.length ? '#6eb657' : '#111111'"
+            size="14"
+          />
+        </view>
+      </view>
+    </view>
+
+    <view class="list" v-if="hasInfo">
+      <view
+        class="item"
+        v-for="item in listArr"
+        :key="item.id"
+        @click.stop.prevent.self="detailFn(item)"
+      >
+        <view class="header">
+          <view class="title">{{ item.scorePackageName }}</view>
+          <view class="status">
+            <text class="circle"></text>
+            <text>{{ getStatusName(item.packageFinishStatus) }}</text>
+          </view>
+        </view>
+        <view class="content">
+          <view class="txt">承接对象:{{ item.userList[0] }}</view>
+          <view class="txt">发布日期:{{ item.belongDate }}</view>
+          <view class="progress">
+            <uv-line-progress
+              class="pro-two"
+              round
+              :showText="false"
+              :percentage="item.finishRate"
+              activeColor="#95dc7e"
+              inactiveColor="#f8f8f0"
+            ></uv-line-progress>
+            <text>{{ item.finishRate }}%</text>
+          </view>
+          <view class="txt">{{ item.ysh }}/{{ item.score }}</view>
+          <view class="btns">
+            <template v-if="item.dsh != null && item.dsh != '0'">
+              <view class="btn" @click.stop.prevent.self="taskReview(item)">
+                <image src="@/static/images/icon/review-img.png" class="image" />
+                <text>任务审核</text>
+              </view>
+            </template>
+            <template v-if="item.dsh != null && item.dsh != '0'">
+              <view class="btn" @click.stop.prevent.self="quickAudit(item)">
+                <image src="@/static/images/icon/review-img.png" class="image" />
+                <text>批量审核</text>
+              </view>
+            </template>
+            <template v-if="item.dsh != null && item.dsh != '0'">
+              <view class="btn" @click.stop.prevent.self="quickAuditFn(item)">
+                <image src="@/static/images/icon/review-img.png" class="image" />
+                <text>快捷审核</text>
+              </view>
+            </template>
+
+            <!-- 终止  -->
+            <view
+              class="btn"
+              v-if="!['4', '5', '6', '9'].includes(item.scorePackageStatus)"
+              @click.stop.prevent.self="stopBtn(item)"
+            >
+              <image src="@/static/images/icon/close.png" class="image" />
+              <text>终止</text>
+            </view>
+            <view class="btn" @click.stop.prevent.self="viewFn(item)">
+              <image src="@/static/images/icon/detail.png" class="image" />
+              <text>查看</text>
+            </view>
+          </view>
+        </view>
+      </view>
+    </view>
+    <noData v-else />
+    <!-- 选择承接对象 -->
+    <uv-picker
+      :cancelText="searchParams.acceptSug ? '清空' : '取消'"
+      ref="pickerRef"
+      :columns="csoList"
+      keyName="gsmc"
+      @confirm="pickerConfim"
+      @cancel="pickerCancel"
+    ></uv-picker>
+    <!-- 月份范围 -->
+    <KDatePicker v-model="show" type="month" is-range @change="getDate" formatter="YYYY-MM-DD" />
+  </view>
+</template>
+
+<script setup lang="ts">
+import { ref } from 'vue'
+import { onShow, onReachBottom } from '@dcloudio/uni-app'
+import { getListCsoApi } from '@/service/modules/objectivesList'
+import { getListApi } from '@/service/modules/assignPoints'
+import { getDictByNameApi } from '@/service/modules/getDict'
+import KDatePicker from '@/components/dateSelect/k-date-picker/KDatePicker.vue'
+import noData from '@/components/noData/index.vue'
+import { useReview } from '@/store/review'
+
+const reviewStore = useReview()
+
+const customStyle = {
+  backgroundColor: '#f6f6f6'
+}
+
+onShow(() => {
+  listArr.value = []
+  getDict()
+  getList()
+})
+
+class Params {
+  acceptSug = ''
+  period = [] as string[]
+  scorePackageName = ''
+  total = -1
+  current = 1
+  packageType1 = 1
+  packageType2 = 1
+  size = 10
+}
+
+const searchParams = ref(new Params())
+
+const hasInfo = ref(true)
+const listArr = ref<any[]>([])
+const getList = async () => {
+  uni.showLoading()
+  const res = await getListApi(searchParams.value)
+  if (res.code === 0) {
+    searchParams.value.total = res.data.total
+    listArr.value = listArr.value.concat(res.data.records)
+    hasInfo.value = !!listArr.value.length
+  }
+  uni.hideLoading()
+}
+
+const csoList = ref<any[]>([])
+const packageFinishStatusList = ref<any[]>([])
+const getDict = async () => {
+  getDictByNameApi('package_finish_status').then(
+    (res: any) => (packageFinishStatusList.value = res.data)
+  )
+  getListCsoApi().then((res: any) => (csoList.value = [res.data]))
+}
+const getCsoName = (acceptSug: number) => {
+  const curr = csoList.value[0]?.find((item: any) => item.id === acceptSug)
+  return curr?.gsmc
+}
+const getStatusName = (planState: string) => {
+  const curr = packageFinishStatusList.value?.find((item: any) => item.value === planState)
+  return curr?.label
+}
+
+const searchFn = () => {
+  listArr.value = []
+  searchParams.value.current = 1
+  getList()
+}
+
+onReachBottom(() => {
+  if (listArr.value.length === searchParams.value.total) return
+  searchParams.value.current++
+  getList()
+})
+const pickerRef = ref()
+const show = ref(false)
+
+const searchClick = (type: string) => {
+  if (type === 'acceptSug') {
+    pickerRef.value.open()
+  } else {
+    show.value = true
+  }
+}
+
+const pickerConfim = (e: any) => {
+  searchParams.value.acceptSug = e.value[0].id
+  searchFn()
+}
+
+const pickerCancel = () => {
+  if (searchParams.value.acceptSug) {
+    searchParams.value.acceptSug = ''
+    searchFn()
+  }
+}
+
+const getDate = (e: any[]) => {
+  if (!e[1]) return
+  searchParams.value.period = e
+  show.value = false
+  searchFn()
+}
+
+const addFn = () => {
+  uni.navigateTo({
+    url: '/pages-sub-service-mangement/assignPointsAdd/index?&type=1'
+  })
+}
+const detailFn = (row: any) => {
+  const info = JSON.stringify(row)
+  reviewStore.setAssignPointsInfo(info)
+  uni.navigateTo({
+    url: '/pages-sub-service-mangement/assignPointsAdd/detail?&type=2'
+  })
+}
+
+//
+const stopBtn = (row: any) => {
+  uni.navigateTo({
+    url: `/pages-sub-service-mangement/stopServiceDelivery/index?type=${2}&id=${row.id}`
+  })
+}
+
+// 任务审核
+const taskReview = (row: any) => {
+  uni.navigateTo({
+    url: `/pages-sub-service-mangement/taskAudit/index?&id=${row.id}&type=taskAudit&taskStatus=2&page=1`
+  })
+}
+// 快捷审核
+const quickAudit = (row: any) => {
+  uni.navigateTo({
+    url: `/pages-sub-service-mangement/quickAudit/index?&id=${row.id}&type=taskAudit&taskStatus=2&page=1`
+  })
+}
+// 快捷审核
+const quickAuditFn = (row: any) => {
+  uni.navigateTo({
+    url: `/pages-sub-service-mangement/quickAuditCard/index?&id=${row.id}&type=1`
+  })
+}
+
+const viewFn = (row: any) => {
+  uni.navigateTo({
+    url: `/pages-sub-service-mangement/taskAudit/index?&id=${row.id}&type=taskAudit&page=1`
+  })
+}
+</script>
+
+<style lang="scss" scoped>
+.objectives-list {
+  padding: 24rpx 0;
+  .search {
+    position: fixed;
+    width: 750rpx;
+    padding: 0 30rpx;
+    top: 0;
+    height: 150rpx;
+    background-color: #fff;
+    z-index: 99;
+    .top-search {
+      display: flex;
+      align-items: center;
+
+      .search-input {
+        width: 540rpx;
+        height: 70rpx;
+      }
+      .search-button {
+        color: #6eb657;
+        font-size: 30rpx;
+        margin: 0 10px;
+        font-weight: 400;
+      }
+    }
+    .search-content {
+      margin-top: 24rpx;
+      padding-bottom: 10rpx;
+      display: flex;
+      .search-list {
+        display: flex;
+        align-content: center;
+        margin-right: 64rpx;
+        height: 40rpx;
+        text {
+          font-weight: 500;
+          line-height: 40rpx;
+          font-size: 28rpx;
+          color: #111111;
+          margin-right: 8rpx;
+        }
+      }
+      .active text {
+        color: #6eb657;
+      }
+    }
+  }
+
+  .list {
+    margin-top: 150rpx;
+    padding: 0 30rpx;
+    .item {
+      margin-bottom: 20rpx;
+      width: 100%;
+      border-radius: 16rpx;
+      box-shadow: 0px 2rpx 8rpx 0px rgba(0, 0, 0, 0.2);
+      .header {
+        background-color: #f8f8f0;
+        padding: 26rpx 20rpx;
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        border-top-left-radius: 16rpx;
+        border-top-right-radius: 16rpx;
+        .title {
+          font-size: 32rpx;
+          line-height: 45rpx;
+          width: 70%;
+          font-weight: 500;
+          color: #333;
+          word-wrap: break-word;
+        }
+        .status {
+          .circle {
+            display: block;
+            border-radius: 50%;
+            background-color: #72b25b;
+            margin-right: 10rpx;
+            width: 15rpx;
+            height: 15rpx;
+          }
+          display: flex;
+          align-items: center;
+          color: #72b25b;
+        }
+      }
+      .content {
+        padding: 20rpx;
+        .txt {
+          font-weight: 400;
+          color: #999;
+          font-size: 22rpx;
+          line-height: 30rpx;
+          margin-bottom: 16rpx;
+        }
+        .progress {
+          display: flex;
+          align-items: center;
+          margin-bottom: 8rpx;
+          .pro-two {
+            width: 80%;
+          }
+          text {
+            margin-left: 10px;
+            color: #010101;
+            font-size: 26rpx;
+            line-height: 36rpx;
+          }
+        }
+        .btns {
+          margin-top: 30rpx;
+          display: flex;
+
+          .btn {
+            display: flex;
+            align-items: center;
+            height: 34rpx;
+            margin-right: 5rpx;
+
+            .image {
+              width: 28rpx;
+              height: 28rpx;
+              margin-right: 12rpx;
+            }
+            text {
+              color: #6eb657;
+              font-size: 24rpx;
+              line-height: 34rpx;
+            }
+          }
+        }
+      }
+    }
+  }
+}
+</style>

+ 88 - 0
src/pages-sub-service-mangement/assignPointsAdd/components/TableData.vue

@@ -0,0 +1,88 @@
+<template>
+  <view class="table">
+    <uni-table border stripe emptyText="暂无更多数据">
+      <!-- 表头行 -->
+      <uni-tr>
+        <uni-th align="center" width="50">序号</uni-th>
+        <uni-th align="center">上级服务类型</uni-th>
+        <uni-th align="center" width="50">积分值</uni-th>
+        <uni-th align="center" width="50">任务总个数</uni-th>
+        <uni-th align="center" width="50">已用个数</uni-th>
+        <uni-th align="center" width="50">任务个数</uni-th>
+        <uni-th align="center" width="80">任务积分值</uni-th>
+      </uni-tr>
+      <!-- 表格数据行 -->
+      <uni-tr v-for="(item, index) in tableData" :key="item?.taskTypeId" index>
+        <uni-td>{{ index + 1 }}</uni-td>
+        <uni-td>{{ item.baseId }}</uni-td>
+        <uni-td>{{ item.score }}</uni-td>
+        <uni-td>{{ item.allQty }}</uni-td>
+        <uni-td>{{ item.used }}</uni-td>
+        <uni-td>
+          <input type="number" @blur="(e) => change(e, index, item)" v-model="item.qty" />
+        </uni-td>
+        <uni-td>{{ item.subtotal }}</uni-td>
+      </uni-tr>
+      <!-- 结尾 -->
+      <uni-tr>
+        <uni-td>总计</uni-td>
+        <uni-td>---</uni-td>
+        <uni-td>---</uni-td>
+        <uni-td>---</uni-td>
+        <uni-td>---</uni-td>
+        <uni-td>{{ totalQty }}</uni-td>
+        <uni-td>{{ totalsubtotal }}</uni-td>
+      </uni-tr>
+    </uni-table>
+  </view>
+</template>
+
+<script setup lang="ts">
+import { ref, defineEmits } from 'vue'
+
+const emit = defineEmits(['updateScope'])
+
+const tableData = ref<any[]>([])
+
+const totalQty = ref(0)
+const totalsubtotal = ref(0)
+
+const change = (detail: any, index: number, item: any) => {
+  let max = item.allQty - item.used
+  const value = tableData.value[index].qty
+  if (value > max) {
+    tableData.value[index].qty = max
+  }
+  tableData.value[index].subtotal = tableData.value[index].qty * tableData.value[index].score
+  totalQty.value = tableData.value.reduce((sum, row) => Number(sum) + Number(row.qty), 0)
+  totalsubtotal.value = tableData.value.reduce((sum, row) => Number(sum) + Number(row.subtotal), 0)
+  emit('updateScope', totalsubtotal.value)
+}
+
+const setData = (data: any[]) => {
+  tableData.value = [...data]
+  tableData.value.forEach((item, index) => {
+    item.index = index
+    item.score = item.price
+    item.subtotal = 0
+    item.baseId = item.taskTypeName
+    item.allQty = item.qty
+    item.qty = 0
+  })
+}
+const getData = () => {
+  return tableData.value
+}
+
+defineExpose({ setData, getData })
+</script>
+
+<style lang="scss" scoped>
+.table {
+  margin-top: 20rpx;
+  width: 640rpx;
+  min-height: 300rpx;
+  background-color: #fff;
+  border-radius: 12rpx;
+}
+</style>

+ 112 - 0
src/pages-sub-service-mangement/assignPointsAdd/components/treeList.ts

@@ -0,0 +1,112 @@
+export const treeList: any[] = [
+  {
+    taskTypeId: 'p-1',
+    taskTypeName: '学术会议服务',
+    show: true,
+    disabled: true,
+    checked: true,
+    children: [
+      { taskTypeId: '1', taskTypeName: 'POV科室会', disabled: true, checked: true },
+      { taskTypeId: '5', taskTypeName: '沙龙会', disabled: true, checked: true },
+      { taskTypeId: '2', taskTypeName: '区县学术会议', disabled: true, checked: true },
+      { taskTypeId: '3', taskTypeName: '市级学术会议', disabled: true, checked: true },
+      { taskTypeId: '4', taskTypeName: '省级学术会议', disabled: true, checked: true },
+      { taskTypeId: '64', taskTypeName: '线上学术会议', disabled: true, checked: true },
+      { taskTypeId: '19', taskTypeName: '健康教育课堂', disabled: true, checked: true }
+    ]
+  },
+  {
+    taskTypeId: 'p-2',
+    taskTypeName: '学术拜访服务',
+    show: true,
+    disabled: true,
+    checked: true,
+    children: [
+      { taskTypeId: '53', taskTypeName: '基础拜访', disabled: true, checked: true },
+      { taskTypeId: '51', taskTypeName: '专业拜访', disabled: true, checked: true },
+      { taskTypeId: '52', taskTypeName: '专项拜访', disabled: true, checked: true }
+    ]
+  },
+  {
+    taskTypeId: 'p-4',
+    taskTypeName: '产品推广',
+    show: true,
+    disabled: true,
+    checked: true,
+    children: [{ taskTypeId: '8', taskTypeName: '产品相册分享', disabled: true, checked: true }]
+  },
+  {
+    taskTypeId: 'p-5',
+    taskTypeName: '学术信息交流',
+    show: true,
+    disabled: true,
+    checked: true,
+    children: [{ taskTypeId: '9', taskTypeName: '学术信息交流', disabled: true, checked: true }]
+  },
+  {
+    taskTypeId: 'p-3',
+    taskTypeName: '商务协作',
+    show: true,
+    disabled: true,
+    checked: true,
+    children: [
+      { taskTypeId: '14', taskTypeName: '数据收集', disabled: true, checked: true },
+      { taskTypeId: '17', taskTypeName: '医学警戒信息收集', disabled: true, checked: true },
+      { taskTypeId: '12', taskTypeName: '产品展示', disabled: true, checked: true },
+      { taskTypeId: '13', taskTypeName: '业务宣传服务', disabled: true, checked: true }
+    ]
+  }
+]
+
+export const pFlist = [
+  {
+    taskTypeName: '学术会议服务',
+    taskTypeId: 'p-1',
+    children: [] as any[]
+  },
+  {
+    taskTypeName: '学术拜访服务',
+    taskTypeId: 'p-2',
+    children: [] as any[]
+  },
+  {
+    taskTypeName: '市场信息服务',
+    taskTypeId: 'p-1',
+    children: [] as any[]
+  },
+  {
+    taskTypeName: '学术会议服务',
+    taskTypeId: 'p-3',
+    children: [] as any[]
+  },
+  {
+    taskTypeName: '产品推广',
+    taskTypeId: 'p-4',
+    children: [] as any[]
+  },
+  {
+    taskTypeName: '学术信息交流',
+    taskTypeId: 'p-5',
+    children: [] as any[]
+  },
+  {
+    taskTypeName: '医药研发服务',
+    taskTypeId: 'p-6',
+    children: [] as any[]
+  },
+  {
+    taskTypeName: '专项服务',
+    taskTypeId: 'p-17',
+    children: [] as any[]
+  },
+  {
+    taskTypeName: '商业公司客户管理',
+    taskTypeId: 'p-18',
+    children: [] as any[]
+  },
+  {
+    taskTypeName: '代理商客户管理',
+    taskTypeId: 'p-19',
+    children: [] as any[]
+  }
+]

+ 209 - 0
src/pages-sub-service-mangement/assignPointsAdd/detail.vue

@@ -0,0 +1,209 @@
+<template>
+  <view class="add">
+    <view class="form">
+      <uv-form
+        labelPosition="left"
+        :model="form"
+        ref="formRef"
+        labelWidth="140"
+        :labelStyle="labelStyle"
+      >
+        <uv-form-item label="执行包名称" prop="scorePackageName" borderBottom required>
+          <uv-input
+            v-model="form.scorePackageName"
+            border="none"
+            placeholder="请输入"
+            inputAlign="right"
+            readonly
+          />
+        </uv-form-item>
+        <uv-form-item label="服务总值" prop="score" borderBottom required>
+          <uv-input v-model="form.score" inputAlign="right" readonly border="none" />
+        </uv-form-item>
+        <uv-form-item label="发布日期" prop="belongDate" borderBottom required>
+          <uv-input v-model="form.belongDate" inputAlign="right" readonly border="none" />
+        </uv-form-item>
+        <uv-form-item label="承接对象" prop="belongDate" borderBottom required>
+          <uv-input v-model="form.userListLabel" inputAlign="right" readonly border="none" />
+        </uv-form-item>
+        <uv-form-item label="执行包状态" prop="scorePackageStatusName" borderBottom required>
+          <uv-input
+            v-model="form.scorePackageStatusName"
+            inputAlign="right"
+            readonly
+            border="none"
+          />
+        </uv-form-item>
+        <uv-form-item label="完成服务分值" prop="ysh" borderBottom required>
+          <uv-input v-model="form.ysh" readonly inputAlign="right" border="none" />
+        </uv-form-item>
+        <uv-form-item label="完成百分比(%)" prop="yshtt" borderBottom required>
+          <uv-input v-model="form.yshtt" readonly inputAlign="right" border="none" />
+        </uv-form-item>
+        <uv-form-item label="审核通过服务分值" prop="shtg" borderBottom required>
+          <uv-input v-model="form.shtg" readonly inputAlign="right" border="none" />
+        </uv-form-item>
+        <uv-form-item label="审核通过百分比(%)" prop="shtgtt" borderBottom required>
+          <uv-input v-model="form.shtgtt" readonly inputAlign="right" border="none" />
+        </uv-form-item>
+        <uv-form-item label="关联执行包名称" prop="relationScoreId" borderBottom required>
+          <uv-input v-model="form.relationScoreId" inputAlign="right" readonly border="none" />
+        </uv-form-item>
+        <uv-form-item label="承接对象范围" prop="packageUserScopeName" borderBottom required>
+          <uv-input v-model="form.packageUserScopeName" inputAlign="right" readonly border="none" />
+        </uv-form-item>
+        <uv-form-item label="承接对象范围" prop="typeidName" borderBottom required>
+          <uv-input v-model="form.typeidName" inputAlign="right" readonly border="none" />
+        </uv-form-item>
+      </uv-form>
+    </view>
+    <view class="task-type">
+      <view class="title">有效服务类型如下:</view>
+      <view class="item">
+        <view class="list" v-for="(item, index) in taskTypeList" :key="index">
+          <view class="dot">
+            <text></text>
+          </view>
+          <view class="txt"> {{ item.code }}:{{ item.label }}</view>
+        </view>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script setup lang="ts">
+import { onLoad } from '@dcloudio/uni-app'
+import { useReview } from '@/store/review'
+import { ref } from 'vue'
+import { reactive } from 'vue'
+import { getTypeidPersonalApi, selectByScorePackageIdById } from '@/service/modules/assignPoints'
+import { getDictByNameApi } from '@/service/modules/getDict'
+
+const reviewStore = useReview()
+
+const currInfo = ref()
+onLoad((e) => {
+  const str = reviewStore.assignPointsInfo
+  if (str) {
+    currInfo.value = JSON.parse(reviewStore.assignPointsInfo)
+    initForm()
+  }
+})
+
+const labelStyle = {
+  fontWeight: 400,
+  fontSize: '30rpx',
+  color: '#000'
+}
+
+const form = reactive({
+  scorePackageName: '',
+  score: '',
+  belongDate: '',
+  userListLabel: '',
+  scorePackageStatusName: '',
+  ysh: 0,
+  yshtt: 0,
+  shtg: 0,
+  shtgtt: 0,
+  relationScoreId: '',
+  packageUserScopeName: '',
+  typeidName: ''
+})
+
+const plist = {
+  'p-1': '学术会议服务',
+  'p-2': '学术拜访服务',
+  'p-3': '市场信息服务',
+  'p-4': '产品推广',
+  'p-5': '学术信息交流',
+  'p-6': '医药研发服务',
+  'p-7': '',
+  'p-17': '专项服务',
+  'p-18': '商业公司客户管理',
+  'p-19': '代理商客户管理'
+} as any
+const taskTypeList = ref<any[]>([])
+const initForm = async () => {
+  const res = await getTypeidPersonalApi()
+  const resA = await getDictByNameApi('score_package_status')
+  form.scorePackageName = currInfo.value.scorePackageName
+  form.score = currInfo.value.score
+  form.belongDate = currInfo.value.belongDate
+  form.userListLabel = currInfo.value?.userList[0]
+  const currA = resA.data.find((item: any) => item.value == currInfo.value.scorePackageStatus)
+  if (currA) {
+    form.scorePackageStatusName = currA.label
+  }
+  form.ysh = currInfo.value?.ysh
+  form.yshtt = currInfo.value?.yshtt
+  form.shtg = currInfo.value?.shtg
+  form.shtgtt = currInfo.value?.shtgtt
+  form.relationScoreId = currInfo.value?.relationScoreId
+  form.packageUserScopeName = currInfo.value?.packageUserScopeName
+  const currB = res.data.find((item: any) => item.value == currInfo.value.typeid)
+  if (currB) {
+    form.typeidName = currB.label
+  }
+  const resC = await selectByScorePackageIdById({ id: currInfo.value?.id })
+  resC.data.forEach((item: any) => {
+    item.code = plist[item.code]
+  })
+  taskTypeList.value = resC.data
+}
+</script>
+
+<style lang="scss" scoped>
+.add {
+  background: #f2f2f2;
+  min-height: 100vh;
+  box-sizing: border-box;
+  padding: 24rpx;
+  .form {
+    background: #fff;
+    padding: 30rpx;
+    border-radius: 12rpx;
+  }
+}
+:deep(.uv-form-item__body__left) {
+  padding-left: 18rpx;
+}
+.task-type {
+  margin-top: 20rpx;
+  background: #fff;
+  border-radius: 12rpx;
+  padding: 20rpx 30rpx;
+
+  .title {
+    font-weight: 400;
+    font-size: 28rpx;
+    line-height: 40rpx;
+    color: #000;
+  }
+  .item {
+    margin-top: 30rpx;
+    .list {
+      display: flex;
+      margin-bottom: 24rpx;
+      .dot {
+        margin-right: 10rpx;
+        height: 36rpx;
+        display: flex;
+        align-items: center;
+        text {
+          display: block;
+          width: 8rpx;
+          height: 8rpx;
+          border-radius: 50%;
+          background-color: #606266;
+        }
+      }
+      .txt {
+        font-weight: 400;
+        font-size: 26rpx;
+        line-height: 36rpx;
+      }
+    }
+  }
+}
+</style>

+ 581 - 0
src/pages-sub-service-mangement/assignPointsAdd/index.vue

@@ -0,0 +1,581 @@
+<template>
+  <view class="add">
+    <view class="form">
+      <uv-form
+        labelPosition="left"
+        :model="form"
+        :rules="rules"
+        ref="formRef"
+        labelWidth="120"
+        :labelStyle="labelStyle"
+      >
+        <uv-form-item label="执行包名称" prop="scorePackageName" borderBottom required>
+          <uv-input
+            v-model="form.scorePackageName"
+            border="none"
+            placeholder="请输入"
+            :readonly="formDisabled"
+          />
+        </uv-form-item>
+        <uv-form-item
+          label="承接对象类型"
+          prop="typeidLabel"
+          borderBottom
+          @click="showSelect('typeidLabel')"
+          required
+        >
+          <uv-input v-model="form.typeidLabel" border="none" placeholder="请选择" readonly />
+          <template v-slot:right>
+            <uv-icon name="arrow-right"></uv-icon>
+          </template>
+        </uv-form-item>
+        <uv-form-item
+          v-if="userListShow"
+          label="承接对象"
+          prop="userListLabel"
+          borderBottom
+          @click="showSelect('userListLabel')"
+          required
+        >
+          <uv-input v-model="form.userListLabel" border="none" placeholder="请选择" readonly />
+          <template v-slot:right>
+            <uv-icon name="arrow-right"></uv-icon>
+          </template>
+        </uv-form-item>
+        <uv-form-item
+          label="关联服务企业"
+          prop="relatedServiceLabel"
+          borderBottom
+          @click="showSelect('relatedServiceLabel')"
+          required
+        >
+          <uv-input
+            v-model="form.relatedServiceLabel"
+            border="none"
+            placeholder="请选择"
+            readonly
+          />
+          <template v-slot:right>
+            <uv-icon name="arrow-right"></uv-icon>
+          </template>
+        </uv-form-item>
+        <uv-form-item
+          label="关联执行包名称"
+          prop="relationScoreIdLable"
+          borderBottom
+          @click="showSelect('relationScoreIdLable')"
+          required
+        >
+          <uv-input
+            v-model="form.relationScoreIdLable"
+            border="none"
+            placeholder="请选择"
+            readonly
+          />
+          <template v-slot:right>
+            <uv-icon name="arrow-right"></uv-icon>
+          </template>
+        </uv-form-item>
+        <uv-form-item label="推广产品" prop="drugtableLabel" borderBottom>
+          <uv-input v-model="form.drugtableLabel" border="none" placeholder="请选择" readonly />
+        </uv-form-item>
+        <uv-form-item label="可分配积分值" prop="kfpjf" borderBottom>
+          <uv-input v-model="form.kfpjf" type="number" readonly border="none" />
+        </uv-form-item>
+        <uv-form-item label="服务总值" prop="score" borderBottom required>
+          <uv-input v-model="form.score" type="number" readonly border="none" />
+        </uv-form-item>
+        <uv-form-item
+          label="接单对象范围"
+          prop="packageUserScopeLable"
+          borderBottom
+          @click="showSelect('packageUserScopeLable')"
+          required
+        >
+          <uv-input
+            v-model="form.packageUserScopeLable"
+            border="none"
+            placeholder="请选择"
+            readonly
+          />
+          <template v-slot:right>
+            <uv-icon name="arrow-right"></uv-icon>
+          </template>
+        </uv-form-item>
+        <uv-form-item label="生效日期" prop="startTime" borderBottom required>
+          <uv-input
+            prefixIcon="calendar"
+            prefixIconStyle="font-size: 22px;color: #909399"
+            v-model="form.startTime"
+            border="none"
+            placeholder="请选择"
+            readonly
+          />
+        </uv-form-item>
+        <uv-form-item label="截止日期" prop="endTimeValue" borderBottom required>
+          <uv-input
+            prefixIcon="calendar"
+            prefixIconStyle="font-size: 22px;color: #909399"
+            v-model="form.endTimeValue"
+            border="none"
+            placeholder="请选择"
+            readonly
+          />
+        </uv-form-item>
+        <uv-form-item label="执行包编号" prop="packageSn" borderBottom>
+          <uv-input v-model="form.packageSn" type="number" readonly border="none" />
+        </uv-form-item>
+        <uv-form-item label="有效任务类型如下:" labelWidth="140" labelPosition="top" placeholder>
+          <!-- <taskTree ref="taskTreeRef" /> -->
+          <TableData
+            ref="tableRef"
+            @updateScope="
+              (val) => {
+                form.score = val
+              }
+            "
+          />
+        </uv-form-item>
+        <uv-form-item label="描述" prop="description" borderBottom labelWidth="40">
+          <uv-textarea
+            v-model="form.description"
+            placeholder="请输入内容"
+            height="48"
+          ></uv-textarea>
+        </uv-form-item>
+      </uv-form>
+    </view>
+    <view class="btn">
+      <view class="cancel" @click="cancelFn">取消</view>
+      <view class="confirm" @click="confirmFn(0)">确定</view>
+      <!-- <view class="confirm" @click="confirmFn(1)">确定并继续</view> -->
+    </view>
+    <!-- 选择承接对象类型 -->
+    <uv-picker
+      ref="typeidPickerRef"
+      :columns="[personalList]"
+      keyName="label"
+      @confirm="(e: any) => pickerConfim(e, 'typeidLabel')"
+    />
+    <!-- 选择承接对象类型 -->
+    <uv-picker
+      ref="userListPickerRef"
+      :columns="[objectScopeList5]"
+      keyName="label"
+      @confirm="(e: any) => pickerConfim(e, 'userListLabel')"
+    />
+    <!-- 选择关联服务企业 -->
+    <uv-picker
+      ref="relatedServicePickerRef"
+      :columns="[allParentDeptList]"
+      keyName="name"
+      @confirm="(e: any) => pickerConfim(e, 'relatedServiceLabel')"
+    />
+    <!-- 选择关联执行包 -->
+    <uv-picker
+      ref="relationScoreIdPickerRef"
+      :columns="[relationScoreList]"
+      keyName="scorePackageName"
+      @confirm="(e: any) => pickerConfim(e, 'relationScoreIdLable')"
+    />
+  </view>
+</template>
+
+<script setup lang="ts">
+import dayjs from 'dayjs'
+import { reactive, ref, toRaw } from 'vue'
+import { onLoad } from '@dcloudio/uni-app'
+import {
+  getTypeidPersonalApi,
+  getObjectScopeListApi,
+  getWmscorepackageSnApi,
+  getPackageScopeListApi,
+  getListAncestor,
+  getRelationScoreListApi,
+  addWmScorePackageApi
+} from '@/service/modules/assignPoints'
+
+import TableData from './components/TableData.vue'
+import { pFlist } from './components/treeList'
+
+const currentType = ref()
+const startDate = dayjs().format('YYYY-MM-DD')
+onLoad((e: any) => {
+  currentType.value = e?.type
+
+  getDict()
+})
+
+const personalList = ref<any[]>([])
+// 全职人员
+const objectScopeList5 = ref<any[]>([])
+// 分类
+const packageScopeList = ref<any[]>([])
+// 关联服务企业
+const allParentDeptList = ref<any[]>([])
+const getDict = () => {
+  getTypeidPersonalApi().then((res: any) => {
+    const arr: any[] = []
+    res.data.forEach((item: any) => {
+      const addnew = {
+        value: item.value,
+        label: item.label
+      }
+      arr.push(addnew)
+    })
+    personalList.value = arr.filter((item) => item.value === '3')
+  })
+  getObjectScopeListApi('5').then((res: any) => {
+    objectScopeList5.value = res.data?.map((item: any) => {
+      return {
+        value: item.id,
+        label: item.realname + ' ' + item.username
+      }
+    })
+  })
+  getPackageScopeListApi().then((res: any) => {
+    packageScopeList.value = res.data
+    if (currentType.value === '1') {
+      form.packageUserScope = res.data[0].value
+      form.packageUserScopeLable = res.data[0].label
+    }
+  })
+  // 获取执行包编号
+  if (currentType.value === '1') {
+    getWmscorepackageSnApi().then((res: any) => (form.packageSn = res.data))
+  }
+  // 获取关联服务企业
+  getListAncestor().then((res: any) => (allParentDeptList.value = res.data))
+}
+
+const formDisabled = ref(false)
+const typeidPickerRef = ref()
+const userListPickerRef = ref()
+const relatedServicePickerRef = ref()
+const relationScoreIdPickerRef = ref()
+
+const showSelect = (type: string) => {
+  if (formDisabled.value) return
+  switch (type) {
+    case 'typeidLabel':
+      typeidPickerRef.value.open()
+      break
+    case 'userListLabel':
+      if (form.typeid !== '3') return
+      userListPickerRef.value.open()
+      break
+    case 'relatedServiceLabel':
+      relatedServicePickerRef.value.open()
+      break
+    case 'relationScoreIdLable':
+      if (!relationScoreList.value.length) return
+      relationScoreIdPickerRef.value.open()
+      break
+
+    default:
+      break
+  }
+}
+// 控制是否可以选择接单对象范围
+const packageUserScopeDisable = ref(false)
+// 控制承接对象显示隐藏
+const userListShow = ref(true)
+const pickerConfim = (e: any, type: string) => {
+  if (type === 'typeidLabel') {
+    const value = e.value[0]
+    form.typeid = value.value
+    form.typeidLabel = value.label
+    // 选择全职
+    if (value?.value === '3') {
+      packageUserScopeDisable.value = true
+      form.packageUserScope = packageScopeList.value[0].value
+      form.packageUserScopeLable = packageScopeList.value[0].label
+      userListShow.value = true
+    } else {
+      userListShow.value = false
+      form.userListLabel = ''
+      form.userList = []
+    }
+  }
+  if (type === 'userListLabel') {
+    const value = e.value[0]
+    form.userList = [value.value]
+    form.userListLabel = value.label
+  }
+  if (type === 'relatedServiceLabel') {
+    const value = e.value[0]
+    form.relatedService = value.deptId + ''
+    form.relatedServiceLabel = value.name
+    form.relationScoreId = ''
+    form.relationScoreIdLable = ''
+    getRelationScoreListFn(value.deptId)
+  }
+  if (type === 'relationScoreIdLable') {
+    const value = e.value[0]
+    form.relationScoreId = value.id
+    form.relationScoreIdLable = value.scorePackageName
+    if (value.id === '-1') {
+      form.kfpjf = ''
+    } else {
+      form.drugtable = value?.drugtable
+      form.drugtableLabel = value?.drugtableName[0] || '测试qaq'
+      initRelationScoreIdFn(value.id)
+    }
+  }
+}
+
+const tableRef = ref()
+
+const relationScoreList = ref<any[]>([])
+const getRelationScoreListFn = async (id: number) => {
+  const obj = { relatedService: id }
+  const res = await getRelationScoreListApi(obj)
+  relationScoreList.value = res.data
+}
+const initRelationScoreIdFn = async (id: number) => {
+  const obj = { id: id }
+  const res = await getRelationScoreListApi(obj)
+  if (res.code === 0) {
+    form.kfpjf = res.data[0].kfpjf
+    const pkgTaskTypeQtyList = res.data[0].pkgTaskTypeQtyList
+    tableRef.value.setData(pkgTaskTypeQtyList, res.data[0].kfpjf)
+    form.startTime = res.data[0]?.startTime
+    form.endTimeValue = res.data[0]?.endTime
+    form.drugtable = res.data[0]?.drugtable
+    form.drugtableLabel = res.data[0]?.drugtableName[0] || '测试qaq'
+  }
+}
+const cancelFn = () => {
+  uni.navigateBack()
+}
+
+const confirmFn = (type: number) => {
+  const tableData = tableRef.value.getData()
+
+  let pkgTaskTypeQtyList = tableData.map((item: any) => {
+    return {
+      taskTypeName: item.taskTypeName,
+      price: item.score,
+      taskTypeId: item.taskTypeId,
+      qty: item.qty ? Number(item.qty) : 0
+    }
+  })
+  let treeArr = tableData.map((item: any) => {
+    return {
+      taskTypeName: item.taskTypeName,
+      taskTypeId: item.orgTaskTypeId
+    }
+  })
+  let flag = pkgTaskTypeQtyList.every((item: any) => item.qty == 0)
+  if (flag) {
+    return uni.showToast({
+      title: '请选择具体任务',
+      icon: 'none',
+      duration: 800
+    })
+  }
+
+  let arr = [...pFlist]
+  tableData.forEach((item: any) => {
+    const curr = arr.find((iten) => iten.taskTypeId === item.parent_id)
+    if (curr) {
+      curr.children.push({
+        taskTypeId: item.orgTaskTypeId,
+        taskTypeName: item.taskTypeName
+      })
+    }
+  })
+  let taskTypeList = []
+  taskTypeList = arr.concat(treeArr).filter((item) => {
+    if (!item.children || item.children.length > 0) {
+      return item
+    }
+  })
+
+  // data.forEach((item: any) => {
+  //   taskTypeList = taskTypeList.concat(...item.children)
+  // })
+  formRef.value
+    .validate()
+    .then(async () => {
+      if (form.typeid == '3') {
+        if (!form.userListLabel) {
+          return uni.showToast({
+            title: '接单对象不能为空',
+            icon: 'none',
+            duration: 800
+          })
+        }
+      }
+      if (Number(form.score) > Number(form.kfpjf) && form.relationScoreId != '-1') {
+        return uni.showToast({
+          title: '可分配积分不足',
+          icon: 'none'
+        })
+      }
+      if (Number(form.score) === 0) {
+        return uni.showToast({
+          title: '服务总值必须大于0',
+          icon: 'none'
+        })
+      }
+      if (!taskTypeList?.length) {
+        return uni.showToast({
+          title: '有效服务类型不能为空',
+          icon: 'none'
+        })
+      }
+      form.taskTypeList = taskTypeList
+
+      submitInfo(type, pkgTaskTypeQtyList)
+    })
+    .catch((err: any) => {
+      console.log('err', err)
+    })
+}
+const submitInfo = async (type: number, pkgTaskTypeQtyList: any) => {
+  const obj: any = toRaw(form)
+  obj.packageType1 = '1'
+  obj.packageType2 = '1'
+  obj.userNum = '1'
+  obj.pkgTaskTypeQtyList = pkgTaskTypeQtyList
+  const res = await addWmScorePackageApi(obj)
+  if (res.code === 0) {
+    uni.showToast({
+      title: '添加成功',
+      icon: 'none'
+    })
+    if (type === 0) {
+      setTimeout(() => {
+        uni.navigateBack()
+      }, 1000)
+    } else {
+      form.kfpjf = (form.kfpjf as number) - (form.score as number)
+      form.scorePackageName = ''
+      getWmscorepackageSnApi().then((res: any) => (form.packageSn = res.data))
+    }
+  } else {
+    uni.showToast({
+      title: res?.msg,
+      icon: 'none'
+    })
+  }
+}
+const labelStyle = {
+  fontWeight: 400,
+  fontSize: '30rpx',
+  color: '#000'
+}
+const formRef = ref()
+const form = reactive({
+  scorePackageName: '',
+  typeid: '',
+  typeidLabel: '',
+  userList: [] as any[],
+  userListLabel: '',
+  relatedService: '',
+  relatedServiceLabel: '',
+  relationScoreId: '',
+  relationScoreIdLable: '',
+  drugtable: [] as any[],
+  drugtableLabel: '',
+  kfpjf: '' as string | number,
+  score: '' as string | number,
+  packageUserScope: '',
+  packageUserScopeLable: '',
+  startTime: '',
+  endTimeValue: '',
+  packageSn: '',
+  description: '',
+  taskTypeList: [] as any[]
+})
+const rules = reactive({
+  scorePackageName: {
+    type: 'string',
+    required: true,
+    message: '请输入执行包名称',
+    trigger: ['blur', 'change']
+  },
+  typeidLabel: {
+    type: 'string',
+    required: true,
+    message: '请选择执行包名称',
+    trigger: ['blur', 'change']
+  },
+  relatedServiceLabel: {
+    type: 'string',
+    required: true,
+    message: '请选择关联服务企业',
+    trigger: ['blur', 'change']
+  },
+  relationScoreIdLable: {
+    type: 'string',
+    required: true,
+    message: '请选择关联执行包',
+    trigger: ['blur', 'change']
+  },
+  packageUserScopeLable: {
+    type: 'string',
+    required: true,
+    message: '请选择接单对象范围',
+    trigger: ['blur', 'change']
+  },
+  endTimeValue: {
+    type: 'string',
+    required: true,
+    message: '请选择接单对象范围',
+    trigger: ['blur', 'change']
+  }
+})
+</script>
+
+<style lang="scss" scoped>
+.add {
+  background: #f2f2f2;
+  min-height: 100vh;
+  box-sizing: border-box;
+  padding: 24rpx;
+  .form {
+    background: #fff;
+    padding: 30rpx;
+    border-radius: 12rpx;
+  }
+}
+:deep(.uv-form-item__body__left) {
+  padding-left: 18rpx;
+}
+
+.btn {
+  margin-top: 20rpx;
+  box-sizing: border-box;
+  width: 700rpx;
+  height: 160rpx;
+  background-color: #fff;
+  border-radius: 12rpx;
+  display: flex;
+  padding: 30rpx 46rpx 54rpx;
+  justify-content: space-between;
+  box-sizing: border-box;
+
+  view {
+    font-weight: 400;
+    box-sizing: border-box;
+    font-size: 32rpx;
+    line-height: 45rpx;
+    border-radius: 8rpx;
+    height: 72rpx;
+    width: 290rpx;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+  }
+  .cancel {
+    border: 2rpx solid #c7c7c7;
+    color: #111;
+  }
+  .confirm {
+    background-color: #6eb657;
+    color: #ffffff;
+  }
+}
+</style>

+ 131 - 0
src/pages-sub-service-mangement/generateReport/index.vue

@@ -0,0 +1,131 @@
+<template>
+  <view class="generate-report">
+    <view class="form">
+      <uv-form
+        labelPosition="left"
+        :model="form"
+        ref="formRef"
+        labelWidth="120"
+        :labelStyle="labelStyle"
+      >
+        <uv-form-item label="执行包名称" prop="score_package_name" borderBottom required>
+          <uv-input v-model="form.score_package_name" border="none" placeholder="请输入" readonly />
+        </uv-form-item>
+        <uv-form-item label="报告ID" prop="report_id" borderBottom required>
+          <uv-input v-model="form.report_id" border="none" placeholder="请输入" readonly />
+        </uv-form-item>
+        <uv-form-item label="完成积分值" prop="score" borderBottom required>
+          <uv-input v-model="form.score" border="none" placeholder="请输入" readonly />
+        </uv-form-item>
+        <uv-form-item label="合计服务数" prop="score_count" borderBottom required>
+          <uv-input v-model="form.score_count" border="none" placeholder="请输入" readonly />
+        </uv-form-item>
+        <uv-form-item label="结算企业" prop="description" borderBottom required>
+          <uv-input v-model="form.description" border="none" placeholder="请输入" readonly />
+        </uv-form-item>
+      </uv-form>
+    </view>
+    <view class="btn">
+      <view @click="generateApprovalFn">生成报告并审批</view>
+    </view>
+  </view>
+</template>
+
+<script setup lang="ts">
+import { onLoad } from '@dcloudio/uni-app'
+import { ref, reactive } from 'vue'
+
+import { selectReportApi, saveAndUpdateWmReportApi } from '@/service/modules/taskManagement'
+
+const currentId = ref()
+
+onLoad((e: any) => {
+  currentId.value = e?.scorePackageId
+  selectReportFn()
+})
+const labelStyle = {
+  fontWeight: 400,
+  fontSize: '30rpx',
+  color: '#000'
+}
+const form = ref({
+  score_package_name: '',
+  report_id: '',
+  score: '',
+  score_count: '',
+  description: ''
+})
+
+const selectReportFn = async () => {
+  const obj = {
+    scorePackageId: currentId.value
+  }
+
+  const res = await selectReportApi(obj)
+  if (res.data == 0) {
+    uni.showToast({
+      icon: 'none',
+      title: '没有可生成报告的服务'
+    })
+    setTimeout(() => {
+      uni.navigateBack()
+    }, 1000)
+  } else {
+    form.value = res.data
+  }
+}
+
+const generateApprovalFn = async () => {
+  const obj = {
+    scorePackageId: currentId.value,
+    taskStatus: 3
+  }
+  const res = await saveAndUpdateWmReportApi(obj)
+  if (res.code === 0) {
+    uni.showToast({
+      title: '提交成功',
+      icon: 'none'
+    })
+    setTimeout(() => {
+      uni.navigateBack()
+    }, 1000)
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.generate-report {
+  min-height: 100vh;
+  background-color: #f2f2f2;
+  padding: 24rpx;
+  .form {
+    background: #fff;
+    padding: 30rpx;
+    border-radius: 12rpx;
+  }
+}
+:deep(.uv-form-item__body__left) {
+  padding-left: 18rpx;
+}
+
+.btn {
+  width: 700rpx;
+  background-color: #fff;
+  height: 160rpx;
+  box-sizing: border-box;
+  border-radius: 12rpx;
+  position: fixed;
+  bottom: 40rpx;
+  left: 24rpx;
+  padding: 34rpx 46rpx 54rpx;
+  view {
+    background-color: #6eb657;
+    border-radius: 8rpx;
+    text-align: center;
+    line-height: 72rpx;
+    font-weight: 400;
+    color: #fff;
+    font-size: 32rpx;
+  }
+}
+</style>

+ 404 - 0
src/pages-sub-service-mangement/quickAudit/index.vue

@@ -0,0 +1,404 @@
+<template>
+  <view class="task-audit">
+    <view class="search">
+      <view class="top-search">
+        <view class="search-input">
+          <uv-input
+            v-model="searchParams.planName"
+            :customStyle="customStyle"
+            clearable
+            shape="circle"
+            placeholder="请输入"
+            prefixIcon="search"
+            prefixIconStyle="font-size: 22px;color: #6eb657"
+          ></uv-input>
+        </view>
+        <view class="search-button" @click="searchFn">搜索</view>
+        <uv-icon name="plus-circle" color="#6eb657" size="24" />
+      </view>
+    </view>
+    <view class="checkbox">
+      <checkbox-group @change="checkboxAllChange">
+        <label>
+          <checkbox :checked="checkedAll" style="transform: scale(0.8)" color="#6eb657" />全选
+        </label>
+      </checkbox-group>
+    </view>
+    <view class="list" v-if="hasInfo">
+      <view class="list-content" v-for="item in listArr" :key="item.id">
+        <checkbox-group @change="checkboxChange(item)">
+          <checkbox :checked="item.checked" style="transform: scale(0.8)" color="#6eb657" />
+        </checkbox-group>
+        <view class="item" @click="onDetail(item)">
+          <view class="top">
+            <view class="top-l">
+              <image src="@/static/images/icon/review.png" class="image" />
+              <text>{{ item.lookintoDate }}</text>
+            </view>
+            <view class="top-r">
+              <text></text>
+              <view class="status">{{ item?.checkState?.displayInfo }}</view>
+            </view>
+          </view>
+          <view class="content">
+            <view class="title">
+              <view class="task-name">{{ item.taskTypeName || 'abcd' }}</view>
+              <view class="score">+{{ item.score }}积分</view>
+            </view>
+            <view class="num"> 任务编号:{{ item.taskNumber }} </view>
+          </view>
+        </view>
+      </view>
+      <view class="btn">
+        <view class="cancel" @click="reviewFn('4')">拒绝</view>
+        <view class="confirm" @click="reviewFn('3')">通过</view>
+      </view>
+    </view>
+    <noData v-else />
+  </view>
+</template>
+
+<script setup lang="ts">
+import { reactive, ref } from 'vue'
+import { onShow, onLoad, onReachBottom } from '@dcloudio/uni-app'
+import {
+  getListApi,
+  getTaskListPageApi,
+  batchApprovalTaskApi,
+  reportBatchApprovalTaskApi
+} from '@/service/modules/taskAudit'
+import { useLoginStore } from '@/store/login'
+import noData from '@/components/noData/index.vue'
+import { useReview } from '@/store/review'
+
+const loginStore = useLoginStore()
+let userInfo: any = loginStore.currentUserInfo
+const roles: number[] = userInfo.roles
+
+const reviewStore = useReview()
+const currentId = ref()
+const taskStatus = ref()
+
+const checkedAll = ref(false)
+
+const checkboxAllChange = () => {
+  checkedAll.value = !checkedAll.value
+
+  listArr.value.forEach((item) => (item.checked = checkedAll.value))
+}
+
+const currentScoreId = ref()
+const currentPage = ref()
+
+onLoad((e) => {
+  currentId.value = e?.id
+  currentPage.value = e?.page
+  let text = ''
+  if (e?.page === '1') {
+    taskStatus.value = e?.taskStatus
+    searchParams.value.taskStatus = e?.taskStatus
+    searchParams.value.scorePackageId = e?.id
+    text = e?.taskStatus ? '任务审核' : '任务详情'
+  } else if (e?.page === '2') {
+    taskListPageParams.isApprovalPage = e?.type == 'approval' ? '1' : '0'
+    taskListPageParams.id = e?.id
+    text = e?.type == 'approval' ? '任务审核' : '任务详情'
+  }
+  uni.setNavigationBarTitle({
+    title: text
+  })
+})
+
+onShow(() => {
+  searchParams.value.current = 1
+  listArr.value = []
+  getList()
+})
+const customStyle = {
+  backgroundColor: '#f6f6f6'
+}
+
+class Params {
+  taskStatus = ''
+  scorePackageId = ''
+  planName = ''
+  total = -1
+  current = 1
+  size = 10
+}
+
+const searchParams = ref(new Params())
+
+const taskListPageParams = reactive({
+  isApprovalPage: '',
+  id: '',
+  current: 1,
+  size: 10
+})
+
+const checkboxChange = (item: any) => {
+  item.checked = !item.checked
+}
+
+const searchFn = () => {
+  listArr.value = []
+  searchParams.value.current = 1
+  getList()
+}
+
+const hasInfo = ref(true)
+const listArr = ref<any[]>([])
+
+const getList = async () => {
+  uni.showLoading()
+  let res
+  if (currentPage.value === '1') {
+    res = await getListApi(searchParams.value)
+  } else if (currentPage.value === '2') {
+    res = await getTaskListPageApi(taskListPageParams)
+  }
+  res.data.records.forEach((item: any) => {
+    item.checked = false
+  })
+  listArr.value = listArr.value.concat(res.data.records)
+  searchParams.value.total = res.data.total
+  hasInfo.value = !!listArr.value.length
+  uni.hideLoading()
+}
+
+const onDetail = (row: any) => {
+  const info = JSON.stringify(row)
+  reviewStore.setCurrentInfo(info)
+  if (currentPage.value === '1') {
+    const show = !!searchParams.value.taskStatus
+    uni.navigateTo({
+      url: `/pages-sub-service-mangement/taskAuditDetail/index?id=${row.id}&type=1&show=${show}`
+    })
+  } else if (currentPage.value === '2') {
+    const show = taskListPageParams.isApprovalPage === '1'
+    uni.navigateTo({
+      url: `/pages-sub-service-mangement/taskAuditDetail/index?id=${row.id}&type=2&reportId=${currentId.value}&show=${show}`
+    })
+  }
+}
+
+onReachBottom(() => {
+  if (listArr.value.length === searchParams.value.total) return
+  if (currentPage.value === '1') {
+    searchParams.value.current++
+  } else if (currentPage.value === '2') {
+    taskListPageParams.current++
+  }
+
+  getList()
+})
+
+const reviewFn = async (status: string) => {
+  const arr = listArr.value.filter((item) => item.checked)
+  if (!arr.length) {
+    return uni.showToast({
+      title: '请先选择数据',
+      icon: 'none'
+    })
+  }
+  const taskIdToNodeIdMap: any = {}
+  const idArr = arr.map((item) => item.id)
+  const ids = idArr.join(',')
+
+  arr.forEach((item) => {
+    if (currentPage.value === '1') {
+      taskIdToNodeIdMap[item.id] = item.checkState.curNodeId
+    } else if (currentPage.value === '2') {
+      taskIdToNodeIdMap[item.id] = item.checkState.nextNodeId
+      if (roles.includes(42)) {
+        taskIdToNodeIdMap[item.id] = 8
+      }
+      // 40 商务组
+      if (roles.includes(40)) {
+        taskIdToNodeIdMap[item.id] = 9
+      }
+    }
+  })
+  let res
+  if (currentPage.value === '1') {
+    let obj = {
+      id: ids,
+      taskIdToNodeIdMap: taskIdToNodeIdMap,
+      taskStatus: status
+    }
+    res = await batchApprovalTaskApi(obj)
+  } else if (currentPage.value === '2') {
+    let obj = {
+      reportId: currentId.value,
+      id: ids,
+      taskIds: ids,
+      taskIdToNodeIdMap: taskIdToNodeIdMap,
+      approvalOpinion: status == '3' ? '1' : '2'
+    }
+    res = await reportBatchApprovalTaskApi(obj)
+  }
+  if (res.data) {
+    uni.showToast({
+      title: '审核成功',
+      icon: 'none'
+    })
+  }
+  setTimeout(() => {
+    listArr.value = []
+    searchParams.value.current = 1
+    getList()
+  }, 1000)
+}
+</script>
+
+<style lang="scss" scoped>
+.task-audit {
+  padding: 24rpx 30rpx;
+
+  .search {
+    position: fixed;
+    width: 750rpx;
+    padding: 0 30rpx;
+    top: 0;
+    height: 60rpx;
+    background-color: #fff;
+    z-index: 99;
+    .top-search {
+      display: flex;
+      align-items: center;
+
+      .search-input {
+        width: 540rpx;
+        height: 70rpx;
+      }
+      .search-button {
+        color: #6eb657;
+        font-size: 30rpx;
+        margin: 0 10px;
+        font-weight: 400;
+      }
+    }
+  }
+  .checkbox {
+    margin-top: 80rpx;
+  }
+
+  .list {
+    margin-bottom: 120rpx;
+    padding-bottom: 60rpx;
+    .list-content {
+      display: flex;
+      align-items: center;
+      margin-top: 20rpx;
+    }
+    .item {
+      flex: 1;
+      box-shadow: 0px 4rpx 4rpx 0px rgba(0, 0, 0, 0.05);
+      margin-bottom: 20rpx;
+      border-radius: 16rpx;
+      .top {
+        padding: 0 30rpx;
+        box-sizing: border-box;
+        height: 100rpx;
+        background-color: #6eb657;
+        border-top-left-radius: 16rpx;
+        border-top-right-radius: 16rpx;
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        .top-l {
+          display: flex;
+          align-items: center;
+
+          .image {
+            width: 28rpx;
+            height: 28rpx;
+          }
+          text {
+            font-size: 26rpx;
+            color: #fff;
+            line-height: 36rpx;
+            margin-left: 20rpx;
+          }
+        }
+        .top-r {
+          display: flex;
+          align-items: center;
+          text {
+            display: block;
+            width: 10rpx;
+            height: 10rpx;
+            background-color: #fff;
+            border-radius: 50%;
+            margin-right: 10rpx;
+          }
+          .status {
+            color: #fff;
+            font-size: 28rpx;
+            line-height: 40rpx;
+          }
+        }
+      }
+      .content {
+        background-color: #fff;
+        padding: 30rpx;
+        box-sizing: border-box;
+        .title {
+          display: flex;
+          justify-content: space-between;
+          margin-bottom: 20rpx;
+          align-items: center;
+          .task-name {
+            font-size: 32rpx;
+            line-height: 45rpx;
+            color: #313131;
+          }
+          .score {
+            font-size: 28rpx;
+            color: #72b25b;
+          }
+        }
+        .num {
+          font-weight: 400;
+          font-size: 22rpx;
+          line-height: 32rpx;
+          color: #999999;
+        }
+      }
+    }
+  }
+}
+
+.btn {
+  display: flex;
+  padding: 20rpx 30rpx;
+  box-sizing: border-box;
+  justify-content: space-between;
+  position: fixed;
+  background-color: #fff;
+  bottom: 0;
+  width: 700rpx;
+  height: 120rpx;
+
+  view {
+    font-weight: 400;
+    box-sizing: border-box;
+    font-size: 32rpx;
+    line-height: 45rpx;
+    border-radius: 8rpx;
+    height: 72rpx;
+    width: 290rpx;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+  }
+  .cancel {
+    border: 2rpx solid #c7c7c7;
+    color: #111;
+  }
+  .confirm {
+    background-color: #6eb657;
+    color: #ffffff;
+  }
+}
+</style>

+ 155 - 0
src/pages-sub-service-mangement/quickAuditCard/components/cardList.vue

@@ -0,0 +1,155 @@
+<template>
+  <view class="card-list">
+    <view class="base-info">
+      <view class="title"> 任务类型: {{ getName(item.taskType) }} {{ props.index + 1 }}</view>
+      <view class="info">
+        <view>任务积分:{{ item.score }}</view>
+        <view>代表姓名:{{ item.taskUserName }}</view>
+      </view>
+      <view class="title">任务详情: </view>
+    </view>
+    <view class="task-detail">
+      <!-- 正常任务 -->
+      <view class="field-box" v-if="item.config?.length">
+        <template v-for="iten in item.config" :key="iten.id">
+          <!-- 文本展示类型 -->
+          <textCom v-if="textArr.includes(iten.taskFiledType)" :item="iten" :detailInfo="item" />
+          <!-- 下拉选择 -->
+          <selectCom
+            v-if="iten.taskFiledType == 'domain' || iten.taskFiledType == 'select'"
+            :item="iten"
+            :hideLine="true"
+            :detailInfo="item"
+            :dictList="item.dict"
+          />
+          <!-- 图片类型 -->
+          <template v-if="iten.taskFiledType == 'img' || iten.taskFiledType == 'sign'">
+            <imgCom :item="iten" :detailInfo="item" />
+          </template>
+          <!-- 长文本 -->
+          <template v-if="iten.taskFiledType == 'longtext'">
+            <longtextCom :item="iten" :detailInfo="item" />
+          </template>
+          <!-- 树形选择 -->
+        </template>
+      </view>
+      <!-- 转发类任务  -->
+      <view v-if="shareIdArr.includes(item.taskType)">
+        <shareCom :detailInfo="item" :ercodeUrl="ercodeUrl" />
+      </view>
+      <!-- 拜访类任务 -->
+      <view v-if="visitIdArr.includes(item.taskType)">
+        <visitCom :signInfoDetail="item.wmUserSignList" />
+      </view>
+    </view>
+    <view class="btn">
+      <view class="cancel" @click="reviewFn(0)">拒绝</view>
+      <view class="confirm" @click="reviewFn(1)">通过</view>
+    </view>
+  </view>
+</template>
+
+<script setup lang="ts">
+import { ref } from 'vue'
+import textCom from '@/pages/task/task-detail/components/textCom.vue'
+import selectCom from '@/pages/task/task-detail/components/selectCom.vue'
+import imgCom from '@/pages/task/task-detail/components/imgCom.vue'
+import longtextCom from '@/pages/task/task-detail/components/longtextCom.vue'
+import visitCom from '@/pages/task/task-detail/components/visitCom.vue'
+import shareCom from '@/pages/task/task-detail/components/shareCom.vue'
+
+const props = defineProps(['item', 'index', 'taskList'])
+const emit = defineEmits(['reviewFn'])
+
+// 文本展示类型
+const textArr = [
+  'area',
+  'text',
+  'inputautoselect',
+  'map',
+  'datetime',
+  'datatimerange',
+  'number',
+  'money',
+  'tree'
+]
+
+// 转发分享类任务类型id
+const shareIdArr = ['8', '9', '10', '11']
+// 二维码
+const ercodeUrl = ref()
+
+// 拜访类任务类型id
+const visitIdArr = ['5', '6', '33']
+
+function getName(taskType: any) {
+  let curr = props.taskList?.find((item: any) => item.id == taskType)
+  if (curr) return curr.taskTypeName
+}
+
+const reviewFn = (type: number) => {
+  emit('reviewFn', type, props.index)
+}
+</script>
+
+<style lang="scss" scoped>
+.card-list {
+  margin-bottom: 30rpx;
+  background: #fff;
+
+  .base-info {
+    view {
+      line-height: 50rpx;
+    }
+    background-color: #fff;
+    padding: 20rpx;
+    padding-bottom: 0;
+    .title {
+      font-size: 32rpx;
+      color: #000;
+      font-weight: 800;
+      margin: 18rpx;
+    }
+  }
+
+  .task-detail {
+    box-sizing: border-box;
+    .poster-img {
+      padding: 20rpx;
+      width: 710rpx;
+    }
+    .line {
+      width: 100%;
+      height: 20rpx;
+      background: #f4f4f4;
+    }
+  }
+}
+.btn {
+  margin-top: 20rpx;
+  padding: 0 20rpx;
+  display: flex;
+  justify-content: space-between;
+
+  view {
+    font-weight: 400;
+    box-sizing: border-box;
+    font-size: 32rpx;
+    line-height: 45rpx;
+    border-radius: 8rpx;
+    height: 72rpx;
+    width: 290rpx;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+  }
+  .cancel {
+    border: 2rpx solid #c7c7c7;
+    color: #111;
+  }
+  .confirm {
+    background-color: #6eb657;
+    color: #ffffff;
+  }
+}
+</style>

+ 146 - 0
src/pages-sub-service-mangement/quickAuditCard/index.vue

@@ -0,0 +1,146 @@
+<template>
+  <view class="quick-audit-card">
+    <view v-for="(item, index) in list" :key="index" class="card-list" v-show="item.show">
+      <CardList :item="item" :index="index" :taskList="taskListArr" @reviewFn="reviewFn" />
+      <uv-divider text="分割线" textColor="#6eb657" lineColor="#6eb657"></uv-divider>
+    </view>
+  </view>
+</template>
+
+<script setup lang="ts">
+import { onShow, onLoad, onReachBottom } from '@dcloudio/uni-app'
+import { reactive, ref } from 'vue'
+import {
+  getListApi,
+  getPackageTaskTypeApi,
+  batchApprovalTask,
+  wmreportBatchApprovalTask,
+  wmreportFetchListApi
+} from '@/service/modules/quickAuditCard'
+import { useLoginStore } from '@/store/login'
+import CardList from './components/cardList.vue'
+
+const loginStore = useLoginStore()
+let userInfo: any = loginStore.currentUserInfo
+const roles: number[] = userInfo?.roles || []
+
+const type = ref('')
+const id = ref('')
+onLoad((e) => {
+  type.value = e?.type
+  id.value = e?.id
+  getTaskListArr()
+  getList()
+})
+
+const taskListArr = ref<any[]>([])
+const getTaskListArr = async () => {
+  const res = await getPackageTaskTypeApi()
+  taskListArr.value = res.data
+}
+
+let list = ref<any[]>([])
+const getList = async () => {
+  let res
+  if (type.value === '1') {
+    res = await getListApi({
+      packageId: id.value
+    })
+  } else if (type.value === '2') {
+    res = await wmreportFetchListApi({
+      id: id.value
+    })
+  }
+  if (res.code === 0) {
+    list.value = res.data
+  }
+  // 针对图片处理
+  list.value.forEach((item) => {
+    if (item.config && item.config.length != 0) {
+      item.config.forEach((iten: any) => {
+        iten.taskFiledType = iten.taskFiledType.trim()
+        if (iten.taskFiledType == 'img') {
+          getImgList(item.wmTaskContent[iten.taskFiledKey], iten)
+        }
+      })
+    }
+    item.show = true
+  })
+}
+const getImgList = (urlStr: any, item: any) => {
+  if (item.taskFiledType != 'img') return ''
+  if (!urlStr) return ''
+  let uArr = urlStr.split(',')
+  if (!uArr) return ''
+  let imgList: any[] = []
+  let previewList: any[] = []
+  uArr.forEach((uItem: any) => {
+    let type = '无 '
+    if (uItem.includes(';1')) {
+      type = '拍照'
+      uItem = uItem.replace(';1', '')
+    }
+    if (uItem.includes(';2')) {
+      type = '相册'
+      uItem = uItem.replace(';2', '')
+    }
+    imgList.push({
+      type,
+      url: import.meta.env.VITE_APP_URL + uItem
+    })
+    previewList.push(import.meta.env.VITE_APP_URL + uItem)
+  })
+  item.imgList = imgList
+  item.previewList = previewList
+  return ''
+}
+// type  0 拒绝 1 通过
+const reviewFn = async (result: number, index: number) => {
+  const item = list.value[index]
+  let res
+  if (type.value === '1') {
+    const obj = {
+      id: item.id,
+      taskStatus: result == 0 ? 4 : 3,
+      taskIdToNodeIdMap: {
+        [item.id]: item.taskInfo.checkState.curNodeId
+      }
+    }
+    res = await batchApprovalTask(obj)
+  } else if (type.value === '2') {
+    const approvalOpinion = result == 1 ? 1 : 2
+    let nodeId = item.taskInfo.checkState.nextNodeId
+    if (roles.includes(42)) {
+      nodeId = 8
+    }
+    // 40 商务组
+    if (roles.includes(40)) {
+      nodeId = 9
+    }
+    let obj = {
+      reportId: id.value,
+      taskIds: id,
+      taskIdToNodeIdMap: {
+        [item.id]: nodeId
+      },
+      approvalOpinion: approvalOpinion
+    }
+    res = await wmreportBatchApprovalTask(obj)
+  }
+
+  if (res.code == 0) {
+    list.value[index].show = false
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.quick-audit-card {
+  background-color: #f8f8f8;
+  .card-list {
+    margin-bottom: 20rpx;
+    padding-bottom: 20rpx;
+    background-color: #fff;
+  }
+}
+</style>

+ 381 - 0
src/pages-sub-service-mangement/serviceDelivery/index.vue

@@ -0,0 +1,381 @@
+<template>
+  <view class="objectives-list">
+    <view class="search">
+      <view class="top-search">
+        <view class="search-input">
+          <uv-input
+            v-model="searchParams.scorePackageName"
+            :customStyle="customStyle"
+            clearable
+            shape="circle"
+            placeholder="请输入"
+            prefixIcon="search"
+            prefixIconStyle="font-size: 22px;color: #6eb657"
+          ></uv-input>
+        </view>
+        <view class="search-button" @click="searchFn">搜索</view>
+        <uv-icon name="plus-circle" color="#6eb657" size="24" @click="addFn" />
+      </view>
+      <view class="search-content">
+        <view
+          class="search-list"
+          @click="searchClick('acceptSug')"
+          :class="searchParams.acceptSug ? 'active' : ''"
+        >
+          <text>承接对象</text>
+          <uv-icon
+            name="arrow-down-fill"
+            :color="searchParams.acceptSug ? '#6eb657' : '#111111'"
+            size="14"
+          />
+        </view>
+        <view
+          class="search-list"
+          @click="searchClick('period')"
+          :class="searchParams.allocationDate ? 'active' : ''"
+        >
+          <text>创建日期</text>
+          <uv-icon
+            name="arrow-down-fill"
+            :color="searchParams.allocationDate ? '#6eb657' : '#111111'"
+            size="14"
+          />
+        </view>
+      </view>
+    </view>
+
+    <view class="list" v-if="hasInfo">
+      <view class="item" v-for="item in listArr" :key="item.id">
+        <view class="header">
+          <view class="title">{{ item.scorePackageName }}</view>
+          <view class="status">
+            <text class="circle"></text>
+            <text>{{ getStatusName(item.packageFinishStatus) }}</text>
+          </view>
+        </view>
+        <view class="content">
+          <view class="txt">承接对象:{{ getCsoName(Number(item.acceptSug)) }}</view>
+          <view class="txt">分配日期:{{ item.allocationDate }}</view>
+          <view class="progress">
+            <uv-line-progress
+              class="pro-two"
+              round
+              :showText="false"
+              :percentage="item.finishRate"
+              activeColor="#95dc7e"
+              inactiveColor="#f8f8f0"
+            ></uv-line-progress>
+            <text>{{ item.finishRate }}%</text>
+          </view>
+          <view class="txt">{{ item.ysh }}/{{ item.score }}</view>
+          <view class="btns">
+            <view class="btn" @click.stop.prevent.self="toDetail(2, item)">
+              <image src="@/static/images/icon/detail.png" class="image" />
+              <text>查看</text>
+            </view>
+            <view class="btn" @click.stop.prevent.self="toDetail(3, item)">
+              <image src="@/static/images/icon/edit.png" class="image" />
+              <text>编辑</text>
+            </view>
+            <view class="btn" @click.stop.prevent.self="stopBtn(item)">
+              <image src="@/static/images/icon/close.png" class="image" />
+              <text>终止</text>
+            </view>
+          </view>
+        </view>
+      </view>
+    </view>
+    <noData v-else />
+    <!-- 选择承接对象 -->
+    <uv-picker
+      :cancelText="searchParams.acceptSug ? '清空' : '取消'"
+      ref="pickerRef"
+      :columns="csoList"
+      keyName="gsmc"
+      @confirm="pickerConfim"
+      @cancel="pickerCancel"
+    ></uv-picker>
+    <!-- 月份范围 -->
+    <KDatePicker
+      v-model="show"
+      type="day"
+      :confirmText="searchParams.allocationDate.length ? '清除' : '确定'"
+      is-range
+      @change="getDate"
+      formatter="YYYY-MM-DD"
+    />
+  </view>
+</template>
+
+<script setup lang="ts">
+import { ref } from 'vue'
+import { onShow, onReachBottom } from '@dcloudio/uni-app'
+import { getListCsoApi } from '@/service/modules/objectivesList'
+import { getListApi } from '@/service/modules/serviceDelivery'
+import { getDictByNameApi } from '@/service/modules/getDict'
+import KDatePicker from '@/components/dateSelect/k-date-picker/KDatePicker.vue'
+import noData from '@/components/noData/index.vue'
+
+const customStyle = {
+  backgroundColor: '#f6f6f6'
+}
+
+onShow(() => {
+  listArr.value = []
+  getDict()
+  getList()
+})
+
+class Params {
+  acceptSug = ''
+  scorePackageName = ''
+  total = -1
+  current = 1
+  allocationDate = ''
+  endLabelDate = ''
+  size = 10
+}
+
+const searchParams = ref(new Params())
+
+const hasInfo = ref(true)
+const listArr = ref<any[]>([])
+const getList = async () => {
+  uni.showLoading()
+  const res = await getListApi(searchParams.value)
+  if (res.code === 0) {
+    searchParams.value.total = res.data.total
+    listArr.value = listArr.value.concat(res.data.records)
+    hasInfo.value = !!listArr.value.length
+  }
+  uni.hideLoading()
+}
+
+const csoList = ref<any[]>([])
+const packageFinishStatusList = ref<any[]>([])
+const getDict = async () => {
+  getDictByNameApi('package_finish_status').then(
+    (res: any) => (packageFinishStatusList.value = res.data)
+  )
+  getListCsoApi().then((res: any) => (csoList.value = [res.data]))
+}
+const getCsoName = (acceptSug: number) => {
+  const curr = csoList.value[0]?.find((item: any) => item.id === acceptSug)
+  return curr?.gsmc
+}
+const getStatusName = (planState: string) => {
+  const curr = packageFinishStatusList.value?.find((item: any) => item.value === planState)
+  return curr?.label
+}
+
+const searchFn = () => {
+  listArr.value = []
+  searchParams.value.current = 1
+  getList()
+}
+
+const pickerRef = ref()
+const show = ref(false)
+
+const searchClick = (type: string) => {
+  if (type === 'acceptSug') {
+    pickerRef.value.open()
+  } else {
+    show.value = true
+  }
+}
+
+const pickerConfim = (e: any) => {
+  searchParams.value.acceptSug = e.value[0].id
+  searchFn()
+}
+
+const pickerCancel = () => {
+  if (searchParams.value.acceptSug) {
+    searchParams.value.acceptSug = ''
+    searchFn()
+  }
+}
+
+const getDate = (e: any[]) => {
+  if (searchParams.value.allocationDate && searchParams.value.endLabelDate) {
+    searchParams.value.allocationDate = ''
+    searchParams.value.endLabelDate = ''
+  } else {
+    searchParams.value.allocationDate = e[0]
+    searchParams.value.endLabelDate = e[1]
+  }
+
+  show.value = false
+  searchFn()
+}
+
+onReachBottom(() => {
+  if (listArr.value.length === searchParams.value.total) return
+  searchParams.value.current++
+  getList()
+})
+const addFn = () => {
+  uni.navigateTo({
+    url: '/pages-sub-service-mangement/serviceDeliveryAdd/index?&type=1'
+  })
+}
+
+const toDetail = (type: number, row: any) => {
+  if (type === 3) {
+    if (['1', '2'].includes(row.packageFinishStatus)) {
+      return uni.showToast({
+        title: '当前执行包无法编辑',
+        icon: 'none'
+      })
+    }
+  }
+  uni.navigateTo({
+    url: `/pages-sub-service-mangement/serviceDeliveryAdd/index?&type=${type}&id=${row.id}`
+  })
+}
+//
+const stopBtn = (row: any) => {
+  uni.navigateTo({
+    url: `/pages-sub-service-mangement/stopServiceDelivery/index?type=${1}&id=${row.id}`
+  })
+}
+</script>
+
+<style lang="scss" scoped>
+.objectives-list {
+  padding: 24rpx 0;
+  .search {
+    position: fixed;
+    width: 750rpx;
+    padding: 0 30rpx;
+    top: 0;
+    height: 150rpx;
+    background-color: #fff;
+    z-index: 99;
+    .top-search {
+      display: flex;
+      align-items: center;
+
+      .search-input {
+        width: 540rpx;
+        height: 70rpx;
+      }
+      .search-button {
+        color: #6eb657;
+        font-size: 30rpx;
+        margin: 0 10px;
+        font-weight: 400;
+      }
+    }
+    .search-content {
+      margin-top: 24rpx;
+      padding-bottom: 10rpx;
+      display: flex;
+      .search-list {
+        display: flex;
+        align-content: center;
+        margin-right: 64rpx;
+        height: 40rpx;
+        text {
+          font-weight: 500;
+          line-height: 40rpx;
+          font-size: 28rpx;
+          color: #111111;
+          margin-right: 8rpx;
+        }
+      }
+      .active text {
+        color: #6eb657;
+      }
+    }
+  }
+
+  .list {
+    margin-top: 150rpx;
+    padding: 0 30rpx;
+    .item {
+      margin-bottom: 20rpx;
+      width: 100%;
+      border-radius: 16rpx;
+      box-shadow: 0px 2rpx 8rpx 0px rgba(0, 0, 0, 0.2);
+      .header {
+        background-color: #f8f8f0;
+        padding: 26rpx 20rpx;
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        border-top-left-radius: 16rpx;
+        border-top-right-radius: 16rpx;
+        .title {
+          font-size: 32rpx;
+          line-height: 45rpx;
+          width: 70%;
+          font-weight: 500;
+          color: #333;
+          word-wrap: break-word;
+        }
+        .status {
+          .circle {
+            display: block;
+            border-radius: 50%;
+            background-color: #72b25b;
+            margin-right: 10rpx;
+            width: 15rpx;
+            height: 15rpx;
+          }
+          display: flex;
+          align-items: center;
+          color: #72b25b;
+        }
+      }
+      .content {
+        padding: 20rpx;
+        .txt {
+          font-weight: 400;
+          color: #999;
+          font-size: 22rpx;
+          line-height: 30rpx;
+          margin-bottom: 16rpx;
+        }
+        .progress {
+          display: flex;
+          align-items: center;
+          margin-bottom: 8rpx;
+          .pro-two {
+            width: 80%;
+          }
+          text {
+            margin-left: 10px;
+            color: #010101;
+            font-size: 26rpx;
+            line-height: 36rpx;
+          }
+        }
+        .btns {
+          margin-top: 30rpx;
+          display: flex;
+
+          .btn {
+            display: flex;
+            align-items: center;
+            height: 34rpx;
+            margin-right: 36rpx;
+
+            .image {
+              width: 28rpx;
+              height: 28rpx;
+              margin-right: 12rpx;
+            }
+            text {
+              color: #6eb657;
+              font-size: 24rpx;
+              line-height: 34rpx;
+            }
+          }
+        }
+      }
+    }
+  }
+}
+</style>

+ 125 - 0
src/pages-sub-service-mangement/serviceDeliveryAdd/components/TableData.vue

@@ -0,0 +1,125 @@
+<template>
+  <view class="table">
+    <uni-table border stripe emptyText="暂无更多数据">
+      <!-- 表头行 -->
+      <uni-tr>
+        <uni-th align="center" width="50">序号</uni-th>
+        <uni-th align="center">上级服务类型</uni-th>
+        <uni-th align="center" width="50">占比(%)</uni-th>
+        <uni-th align="center">任务类型</uni-th>
+        <uni-th align="center" width="50">积分值</uni-th>
+        <uni-th align="center" width="50">任务个数</uni-th>
+        <uni-th align="center" width="80">任务积分值</uni-th>
+      </uni-tr>
+      <!-- 表格数据行 -->
+      <uni-tr v-for="(item, index) in tableData" :key="item?.taskTypeId" index>
+        <uni-td>{{ index + 1 }}</uni-td>
+        <uni-td>{{ showInfo(item, index) }}</uni-td>
+        <uni-td>
+          <text
+            :class="{
+              error: item.score != 0 && (item.percentage < 25 || item.percentage > 50)
+            }"
+            >{{ showPercentage(item, index) }}</text
+          >
+        </uni-td>
+        <uni-td>{{ item.taskTypeName }}</uni-td>
+        <uni-td>{{ item.score }}</uni-td>
+        <uni-td>
+          <input type="number" @blur="(e) => change(e, index, item)" v-model="item.qty" />
+        </uni-td>
+        <uni-td>{{ item.subtotal }}</uni-td>
+      </uni-tr>
+      <!-- 结尾 -->
+      <uni-tr>
+        <uni-td>总计</uni-td>
+        <uni-td>---</uni-td>
+        <uni-td>---</uni-td>
+        <uni-td>---</uni-td>
+        <uni-td>---</uni-td>
+        <uni-td>{{ totalQty }}</uni-td>
+        <uni-td>{{ totalsubtotal }}</uni-td>
+      </uni-tr>
+    </uni-table>
+  </view>
+</template>
+
+<script setup lang="ts">
+import { ref } from 'vue'
+
+const tableData = ref<any[]>([])
+
+const totalQty = ref(0)
+const totalsubtotal = ref(0)
+
+const change = (detail: any, index: number) => {
+  tableData.value[index].subtotal = tableData.value[index].qty * tableData.value[index].score
+  totalQty.value = tableData.value.reduce((sum, row) => Number(sum) + Number(row.qty), 0)
+  totalsubtotal.value = tableData.value.reduce((sum, row) => Number(sum) + Number(row.subtotal), 0)
+}
+
+const setData = (data: any[], planDetails: any, planScore: number) => {
+  totalQty.value = planDetails.qty
+  totalsubtotal.value = planDetails.total
+  tableData.value = data
+  let arr = tableData.value.map((item) => item.baseId)
+  arr = [...new Set(arr)]
+  for (let currBaseId of arr) {
+    const allSubtotal = tableData.value.reduce((accumulator, currentValue) => {
+      if (currentValue.baseId === currBaseId) {
+        return accumulator + currentValue.subtotal
+      }
+      return accumulator
+    }, 0)
+
+    const percentage = calculatePercentage(allSubtotal, planScore)
+
+    tableData.value.forEach((item) => {
+      if (item.baseId === currBaseId) {
+        item.percentage = percentage
+      }
+    })
+  }
+}
+const getData = () => {
+  return tableData.value
+}
+
+const calculatePercentage = (part: any, total: any) => {
+  if (total === 0) return 0 // 避免除以0错误
+  return Number(((part / total) * 100).toFixed(2))
+}
+
+const showInfo = (item: any, index: number) => {
+  if (index === 0) {
+    return item.baseId
+  }
+  if (tableData.value[index - 1].baseId === item.baseId) {
+    return ''
+  } else {
+    return item.baseId
+  }
+}
+const showPercentage = (item: any, index: number) => {
+  if (index === 0) {
+    return item.percentage
+  }
+  if (tableData.value[index - 1].baseId === item.baseId) {
+    return ''
+  } else {
+    return item.percentage
+  }
+}
+
+defineExpose({ setData, getData })
+</script>
+
+<style lang="scss" scoped>
+.table {
+  margin-top: 20rpx;
+  width: 640rpx;
+  min-height: 300rpx;
+  background-color: #fff;
+  border-radius: 12rpx;
+}
+</style>

+ 134 - 0
src/pages-sub-service-mangement/serviceDeliveryAdd/components/taskTree.vue

@@ -0,0 +1,134 @@
+<template>
+  <view class="tree">
+    <view class="tree-content" v-for="(item, index) in treeListData" :key="index">
+      <view class="title">
+        <uv-icon
+          :name="item.show ? 'arrow-down-fill' : 'play-right-fill'"
+          color="#c0c4cc"
+          size="14"
+          class="icon"
+          @click="changeShow(index)"
+        ></uv-icon>
+        <view class="checkbox">
+          <checkbox-group @change="fChange(index)">
+            <label>
+              <checkbox
+                activeColor="#6eb657"
+                activeBackgroundColor="#6eb657"
+                :checked="item.checked"
+                :disabled="item.disabled"
+                style="transform: scale(0.7)"
+              />
+              {{ item.taskTypeName }}
+            </label>
+          </checkbox-group>
+        </view>
+      </view>
+      <view class="children" v-show="item.show">
+        <checkbox-group
+          v-for="(iten, indey) in item.children"
+          :key="iten.taskTypeId"
+          @change="cChange(index, indey)"
+        >
+          <label>
+            <checkbox
+              activeColor="#6eb657"
+              activeBackgroundColor="#6eb657"
+              :disabled="iten.disabled"
+              :checked="iten.checked"
+              style="transform: scale(0.7)"
+            />
+            {{ iten.taskTypeName }}
+          </label>
+        </checkbox-group>
+      </view>
+    </view>
+    <view class="border"></view>
+  </view>
+</template>
+
+<script setup lang="ts">
+import { ref } from 'vue'
+import { treeList } from './treeList'
+
+const treeListData = ref(treeList)
+const changeShow = (index: number) => {
+  treeListData.value[index].show = !treeListData.value[index].show
+}
+
+const fChange = (index: number) => {
+  treeListData.value[index].checked = !treeListData.value[index].checked
+  treeListData.value[index].children.forEach(
+    (item: any) => (item.checked = treeListData.value[index].checked)
+  )
+}
+const cChange = (index: number, indey: number) => {
+  treeListData.value[index].children[indey].checked =
+    !treeListData.value[index].children[indey].checked
+  const arr = treeListData.value[index].children.filter((item: any) => item.checked)
+  treeListData.value[index].checked = arr.length
+}
+
+const mapData = () => {
+  const arr = treeListData.value.filter((item) => item.checked)
+  arr.forEach((item) => {
+    item.children = item.children.filter((item: any) => item.checked)
+  })
+  return arr
+}
+
+const initData = (arr: string[]) => {
+  const treeListCopy = JSON.parse(JSON.stringify(treeList))
+  // treeListCopy.forEach((item: any) => {
+  //   item.disabled = true
+  //   item.checked = arr.includes(item.taskTypeId)
+  //   item.children.forEach((iten: any) => {
+  //     iten.disabled = true
+  //     iten.checked = arr.includes(item.taskTypeId)
+  //   })
+  // })
+  treeListData.value = treeListCopy
+}
+
+const editData = (arr: string[]) => {
+  const treeListCopy = JSON.parse(JSON.stringify(treeList))
+  treeListCopy.forEach((item: any) => {
+    item.checked = arr.includes(item.taskTypeId)
+    item.children.forEach((iten: any) => {
+      iten.checked = arr.includes(item.taskTypeId)
+    })
+  })
+  treeListData.value = treeListCopy
+}
+
+defineExpose({ mapData, initData, editData })
+</script>
+
+<style lang="scss" scoped>
+.tree-content {
+  margin-top: 24rpx;
+  .title {
+    display: flex;
+    align-items: center;
+    height: 48rpx;
+    margin-bottom: 12rpx;
+  }
+  .children {
+    padding-left: 50rpx;
+  }
+  .checkbox {
+    margin-left: 10rpx;
+    display: flex;
+    align-items: center;
+    height: 48rpx;
+    transition: all 1s ease-in;
+  }
+}
+.border {
+  width: 100%;
+  height: 1px;
+  background-color: #d6d7d9;
+  margin-top: 20rpx;
+  transform: scaleY(0.5);
+}
+</style>

+ 112 - 0
src/pages-sub-service-mangement/serviceDeliveryAdd/components/treeList.ts

@@ -0,0 +1,112 @@
+export const treeList: any[] = [
+  {
+    taskTypeId: 'p-1',
+    taskTypeName: '学术会议服务',
+    show: false,
+    disabled: true,
+    checked: true,
+    children: [
+      { taskTypeId: '1', taskTypeName: 'POV科室会', disabled: true, checked: true },
+      { taskTypeId: '5', taskTypeName: '沙龙会', disabled: true, checked: true },
+      { taskTypeId: '2', taskTypeName: '区县学术会议', disabled: true, checked: true },
+      { taskTypeId: '3', taskTypeName: '市级学术会议', disabled: true, checked: true },
+      { taskTypeId: '4', taskTypeName: '省级学术会议', disabled: true, checked: true },
+      { taskTypeId: '64', taskTypeName: '线上学术会议', disabled: true, checked: true },
+      { taskTypeId: '19', taskTypeName: '健康教育课堂', disabled: true, checked: true }
+    ]
+  },
+  {
+    taskTypeId: 'p-2',
+    taskTypeName: '学术拜访服务',
+    show: false,
+    disabled: true,
+    checked: true,
+    children: [
+      { taskTypeId: '53', taskTypeName: '基础拜访', disabled: true, checked: true },
+      { taskTypeId: '51', taskTypeName: '专业拜访', disabled: true, checked: true },
+      { taskTypeId: '52', taskTypeName: '专项拜访', disabled: true, checked: true }
+    ]
+  },
+  {
+    taskTypeId: 'p-4',
+    taskTypeName: '产品推广',
+    show: false,
+    disabled: true,
+    checked: true,
+    children: [{ taskTypeId: '8', taskTypeName: '产品相册分享', disabled: true, checked: true }]
+  },
+  {
+    taskTypeId: 'p-5',
+    taskTypeName: '学术信息交流',
+    show: false,
+    disabled: true,
+    checked: true,
+    children: [{ taskTypeId: '9', taskTypeName: '学术信息交流', disabled: true, checked: true }]
+  },
+  {
+    taskTypeId: 'p-3',
+    taskTypeName: '商务协作',
+    show: false,
+    disabled: true,
+    checked: true,
+    children: [
+      { taskTypeId: '14', taskTypeName: '数据收集', disabled: true, checked: true },
+      { taskTypeId: '17', taskTypeName: '医学警戒信息收集', disabled: true, checked: true },
+      { taskTypeId: '12', taskTypeName: '产品展示', disabled: true, checked: true },
+      { taskTypeId: '13', taskTypeName: '业务宣传服务', disabled: true, checked: true }
+    ]
+  }
+]
+
+export const pFlist = [
+  {
+    taskTypeName: '学术会议服务',
+    taskTypeId: 'p-1',
+    children: [] as any[]
+  },
+  {
+    taskTypeName: '学术拜访服务',
+    taskTypeId: 'p-2',
+    children: [] as any[]
+  },
+  {
+    taskTypeName: '市场信息服务',
+    taskTypeId: 'p-1',
+    children: [] as any[]
+  },
+  {
+    taskTypeName: '学术会议服务',
+    taskTypeId: 'p-3',
+    children: [] as any[]
+  },
+  {
+    taskTypeName: '产品推广',
+    taskTypeId: 'p-4',
+    children: [] as any[]
+  },
+  {
+    taskTypeName: '学术信息交流',
+    taskTypeId: 'p-5',
+    children: [] as any[]
+  },
+  {
+    taskTypeName: '医药研发服务',
+    taskTypeId: 'p-6',
+    children: [] as any[]
+  },
+  {
+    taskTypeName: '专项服务',
+    taskTypeId: 'p-17',
+    children: [] as any[]
+  },
+  {
+    taskTypeName: '商业公司客户管理',
+    taskTypeId: 'p-18',
+    children: [] as any[]
+  },
+  {
+    taskTypeName: '代理商客户管理',
+    taskTypeId: 'p-19',
+    children: [] as any[]
+  }
+]

+ 667 - 0
src/pages-sub-service-mangement/serviceDeliveryAdd/index.vue

@@ -0,0 +1,667 @@
+<template>
+  <view class="service-delivery-add">
+    <view class="message">
+      <uv-text
+        type="error"
+        text="本系统中的年度服务目标、【年度服务预算】、年度服务计划等,无论是否经由一方或双方同意或者确认,均不构成双方之间的协议;服务量、服务费用价格与金额等应以另行签署的合同为准。"
+      ></uv-text>
+    </view>
+    <view class="form">
+      <uv-form
+        labelPosition="left"
+        :model="form"
+        :rules="rules"
+        ref="formRef"
+        labelWidth="120"
+        :labelStyle="labelStyle"
+      >
+        <uv-form-item label="执行包名称" prop="scorePackageName" borderBottom required>
+          <uv-input
+            v-model="form.scorePackageName"
+            border="none"
+            placeholder="请输入"
+            :readonly="formDisabled"
+          />
+        </uv-form-item>
+        <uv-form-item
+          label="所属月份"
+          prop="belongDate"
+          borderBottom
+          @click="showSelect('belongDate')"
+          required
+        >
+          <uv-input
+            prefixIcon="calendar"
+            prefixIconStyle="font-size: 22px;color: #909399"
+            v-model="form.belongDate"
+            border="none"
+            placeholder="请选择"
+            readonly
+          />
+        </uv-form-item>
+        <uv-form-item
+          label="关联服务企业"
+          prop="relatedServiceLabel"
+          borderBottom
+          @click="showSelect('relatedServiceLabel')"
+          required
+        >
+          <uv-input
+            v-model="form.relatedServiceLabel"
+            border="none"
+            placeholder="请选择"
+            readonly
+          />
+          <template v-slot:right>
+            <uv-icon name="arrow-right"></uv-icon>
+          </template>
+        </uv-form-item>
+        <uv-form-item
+          label="关联执行包名称"
+          prop="relationScoreIdLable"
+          borderBottom
+          @click="showSelect('relationScoreIdLable')"
+          required
+        >
+          <uv-input
+            v-model="form.relationScoreIdLable"
+            border="none"
+            placeholder="请选择"
+            readonly
+          />
+          <template v-slot:right>
+            <uv-icon name="arrow-right"></uv-icon>
+          </template>
+        </uv-form-item>
+        <uv-form-item
+          label="服务目标"
+          prop="planIdLabel"
+          borderBottom
+          @click="showSelect('planIdLabel')"
+          required
+        >
+          <uv-input v-model="form.planIdLabel" border="none" placeholder="请选择" readonly />
+          <template v-slot:right>
+            <uv-icon name="arrow-right"></uv-icon>
+          </template>
+        </uv-form-item>
+        <uv-form-item label="承接对象" prop="acceptSugLabel" borderBottom required>
+          <uv-input v-model="form.acceptSugLabel" border="none" placeholder="请选择" readonly />
+        </uv-form-item>
+        <uv-form-item label="生效日期" prop="startTime" borderBottom required>
+          <uv-input v-model="form.startTime" border="none" placeholder="请选择" readonly />
+        </uv-form-item>
+        <uv-form-item label="截止日期" prop="endTimeValue" borderBottom required>
+          <uv-input v-model="form.endTimeValue" border="none" placeholder="请选择" readonly />
+        </uv-form-item>
+
+        <uv-form-item label="可分配积分值" prop="kfpjf" borderBottom>
+          <uv-input v-model="form.kfpjf" type="number" readonly border="none" />
+        </uv-form-item>
+        <uv-form-item label="执行包总值" prop="score" borderBottom required>
+          <uv-input v-model="form.score" type="number" readonly border="none" />
+        </uv-form-item>
+        <uv-form-item label="推广产品" prop="drugtableLabel" borderBottom>
+          <uv-input v-model="form.drugtableLabel" border="none" placeholder="请选择" readonly />
+        </uv-form-item>
+        <!-- 服务区域 -->
+        <uv-form-item
+          v-if="IS_DLS"
+          label="服务区域"
+          prop="planIdLabel"
+          borderBottom
+          @click="showSelect('provAbbr')"
+          required
+        >
+          <uv-input v-model="form.provAbbr" border="none" placeholder="请选择" readonly />
+          <template v-slot:right>
+            <uv-icon name="arrow-right"></uv-icon>
+          </template>
+        </uv-form-item>
+
+        <uv-form-item label="有效任务类型如下:" labelWidth="140" labelPosition="top" placeholder>
+          <template v-if="!IS_DLS">
+            <taskTree ref="taskTreeRef" />
+          </template>
+          <template v-else>
+            <TableData ref="tableRef" />
+          </template>
+        </uv-form-item>
+        <uv-form-item label="描述" prop="description" borderBottom labelWidth="40">
+          <uv-textarea
+            v-model="form.description"
+            placeholder="请输入内容"
+            height="48"
+          ></uv-textarea>
+        </uv-form-item>
+      </uv-form>
+
+      <!-- 选择服务企业 -->
+      <uv-picker
+        ref="csoPickerRef"
+        :columns="[csoList]"
+        keyName="name"
+        @confirm="(e: any) => pickerConfim(e, 'relatedServiceLabel')"
+      ></uv-picker>
+      <!-- 选择关联执行包 -->
+      <uv-picker
+        ref="relationPickerRef"
+        :columns="[gljfbOptionsList]"
+        keyName="relationScoreName"
+        @confirm="(e: any) => pickerConfim(e, 'relationScoreIdLable')"
+      ></uv-picker>
+      <!-- 选择服务目标 -->
+      <uv-picker
+        ref="planPickerRef"
+        :columns="[planList]"
+        keyName="planName"
+        @confirm="(e: any) => pickerConfim(e, 'planIdLabel')"
+      ></uv-picker>
+      <!-- 选择区域 -->
+      <uv-picker
+        ref="provAbbrRef"
+        :columns="[provAbbrArr]"
+        @confirm="(e: any) => pickerConfim(e, 'provAbbrArr')"
+      ></uv-picker>
+    </view>
+    <view class="btn" v-if="currentType != 2">
+      <view class="cancel" @click="cancelFn">取消</view>
+      <view class="confirm" @click="confirmFn">确定</view>
+    </view>
+  </view>
+</template>
+
+<script setup lang="ts">
+import dayjs from 'dayjs'
+import KDatePicker from '@/components/dateSelect/k-date-picker/KDatePicker.vue'
+import { ref, reactive } from 'vue'
+import { onLoad } from '@dcloudio/uni-app'
+import { useLoginStore } from '@/store/login'
+import {
+  getListAncestorApi,
+  getPlanListApi,
+  selectKfpjfApi,
+  wmscorepackageSaveApi,
+  getSelectWmScorePackageApi,
+  getSelectRelationScoreIdApi,
+  wmscorepackageUpdateByIdsApi
+} from '@/service/modules/serviceDelivery'
+import taskTree from './components/taskTree.vue'
+import TableData from './components/TableData.vue'
+import { pFlist } from './components/treeList'
+import { toRaw } from 'vue'
+
+const loginStore = useLoginStore()
+
+let userInfo: any = loginStore.currentUserInfo
+const roles = userInfo.roles
+const formDisabled = ref(false)
+const editDisabled = ref(false)
+const currentType = ref()
+const currentId = ref()
+
+const IS_DLS = ref(false)
+onLoad(async (e: any) => {
+  if (roles.includes(4)) {
+    IS_DLS.value = true
+  }
+
+  const date = dayjs().format('YYYY-MM')
+  form.belongDate = date
+
+  // 获取字典
+  getDict()
+  currentType.value = e?.type
+  currentId.value = e?.id
+  if (e?.type === '2') {
+    formDisabled.value = true
+    initInfo()
+  } else if (e?.type == '3') {
+    editDisabled.value = true
+    initInfo()
+  }
+})
+
+const initInfo = async () => {
+  const obj = {
+    scoreId: currentId.value
+  }
+  const res = await getSelectWmScorePackageApi(obj)
+  const detail = res.data
+  form.scorePackageName = detail.scorePackageName
+  form.belongDate = detail.belongDate
+  form.relatedService = detail.relatedService
+  form.relatedServiceLabel = detail.relatedServiceName
+  form.relationScoreId = detail.relationScoreId
+  form.relationScoreIdLable = detail.relationScoreName || '无'
+  form.planIdLabel = detail.plan.planName
+  form.planId = detail.plan.planId
+  form.startTime = detail.startTime
+  form.endTimeValue = detail.endTime
+  form.acceptSug = detail.acceptSug
+  form.acceptSugLabel = detail.acceptSugName
+  form.drugtable = detail.drugtable
+  form.drugtableLabel = detail?.drugtableName[0]
+  form.entTaskLimit = detail.entTaskLimit
+  form.description = detail.description
+  form.score = detail.score
+
+  if (IS_DLS.value) {
+    if (currentType.value === '2') {
+      tableRef.value.setData(detail.taskTypeSet)
+    } else if (currentType.value === '3') {
+      tableRef.value.setData(detail.taskTypeSet)
+    }
+  } else {
+    if (currentType.value === '2') {
+      taskTreeRef.value.initData(detail.taskTypeSet)
+    } else if (currentType.value === '3') {
+      taskTreeRef.value.editData(detail.taskTypeSet)
+    }
+  }
+}
+
+const labelStyle = {
+  fontWeight: 400,
+  fontSize: '30rpx',
+  color: '#000'
+}
+
+const csoList = ref<any[]>([])
+const planList = ref<any[]>([])
+const provAbbrArr = ref<any[]>([])
+
+const planPickerRef = ref()
+const csoPickerRef = ref()
+const relationPickerRef = ref()
+const provAbbrRef = ref()
+const planIdLabelFlag = ref(false)
+const showSelect = (type: string) => {
+  if (formDisabled.value) return
+  switch (type) {
+    case 'relatedServiceLabel':
+      if (roles.includes(3)) return
+      if (editDisabled.value) return
+      csoPickerRef.value.open()
+      break
+    case 'relationScoreIdLable':
+      if (roles.includes(3)) return
+      if (!gljfbOptionsList.value.length) return
+      relationPickerRef.value.open()
+      break
+    case 'planIdLabel':
+      if (roles.includes(3) || planIdLabelFlag.value) {
+        planPickerRef.value.open()
+      }
+      break
+    case 'provAbbr':
+      if (!form.planIdLabel) return
+      if (provAbbrArr.value.length) {
+        provAbbrRef.value.open()
+      }
+      break
+    default:
+      break
+  }
+}
+
+const tableRef = ref()
+const pickerConfim = (e: any, type: string) => {
+  if (type === 'relatedServiceLabel') {
+    const value = e.value[0]
+    form.relationScoreId = ''
+    form.relationScoreIdLable = ''
+    form.relatedService = value.deptId
+    form.relatedServiceLabel = value.name
+    initRelationScore(value.deptId)
+  }
+  if (type === 'relationScoreIdLable') {
+    const value = e.value[0]
+    form.relationScoreId = value.id
+    form.relationScoreIdLable = value.relationScoreName
+    initScoreById(value.id)
+    planIdLabelFlag.value = true
+    getPlanList(value.id)
+  }
+  if (type === 'planIdLabel') {
+    const value = e.value[0]
+    form.planId = value.planId
+    form.planIdLabel = value.planName
+    const curr = selectKfpjfList.value.find((item) => item.deptId == value.consigneeId)
+    provAbbrArr.value = curr?.provAbbr?.split(',')
+
+    form.acceptSug = curr?.id
+    form.acceptSugLabel = curr?.gsmc
+    form.drugtableLabel = value.skuInfo.skuName
+    form.drugtable = [value.skuInfo.skuId]
+    form.startTime = value.planIssue
+    form.endTimeValue = value.planExpiry
+    form.score = value.planScore
+    if (IS_DLS.value) {
+      if (!value.planItems) {
+        return uni.showModal({
+          title: '提示',
+          showCancel: false,
+          content: `服务目标【${value.planName}】不存在可用的拆解详情,请核实!`,
+          success: function (res) {
+            if (res.confirm) {
+              console.log('用户点击确定')
+            } else if (res.cancel) {
+              console.log('用户点击取消')
+            }
+          }
+        })
+      }
+      tableRef.value.setData(value.planItems, value.planDetails, value.planScore)
+      form.score = value?.planDetails?.total + ''
+    }
+  }
+  if (type == 'provAbbrArr') {
+    const value = e.value[0]
+    console.log('value', value)
+
+    form.provAbbr = value
+  }
+}
+
+const gljfbOptionsList = ref<any[]>([])
+const initRelationScore = async (id: number) => {
+  const obj = {
+    relatedService: id
+  }
+  const res = await getSelectRelationScoreIdApi(obj)
+  gljfbOptionsList.value = res.data
+}
+
+const initScoreById = (id: string) => {
+  selectKfpjf(id)
+}
+
+const getDict = () => {
+  let obj = {
+    onlySelf: false
+  }
+  if (roles.includes(3)) {
+    obj.onlySelf = true
+  }
+  // 获取关联服务企业
+  getListAncestorApi(obj).then((res: any) => {
+    // 当发包对象为药企管理员
+    if (roles.includes(3)) {
+      form.relatedServiceLabel = res.data[0].name
+      form.relatedService = res.data[0].deptId
+      form.relationScoreIdLable = '无'
+      form.relationScoreId = '-1'
+      selectKfpjf('-1')
+      getPlanList(-1)
+    }
+    csoList.value = res.data
+  })
+}
+
+const getPlanList = (pkgId: string | number) => {
+  getPlanListApi({
+    planType: 'QRT',
+    pkgId: pkgId
+  }).then((res: any) => {
+    res.data.forEach((item: any) => {
+      item.planName = item.planName + `(${item.planIssue} ~ ${item.planExpiry})`
+    })
+    planList.value = res.data
+  })
+}
+
+const selectKfpjfList = ref<any[]>([])
+const selectKfpjf = async (id: string) => {
+  const res = await selectKfpjfApi({ id })
+  const arr = res.data[0].acceptSug.map((item: any) => {
+    return {
+      gsmc: item.gsmc,
+      deptId: item.deptId,
+      provAbbr: item.provAbbr,
+      id: item.id
+    }
+  })
+  selectKfpjfList.value = arr
+  if (!roles.includes(3)) {
+    const treeValue = res.data[1].wmScoreTaskTypeList
+    taskTreeRef.value.initData(treeValue)
+    form.kfpjf = res.data[1].kfpjf
+  }
+}
+const cancelFn = () => {
+  uni.navigateBack()
+}
+
+const taskTreeRef = ref()
+const confirmFn = () => {
+  let wmScoreTaskTypeList: any[]
+  let pkgTaskTypeQtyList: any[]
+  if (!IS_DLS.value) {
+    const data = taskTreeRef.value.mapData()
+    wmScoreTaskTypeList = [...data]
+    data.forEach((item: any) => {
+      wmScoreTaskTypeList = wmScoreTaskTypeList.concat(...item.children)
+    })
+  } else {
+    const tableData = tableRef.value.getData()
+    pkgTaskTypeQtyList = tableData.map((item: any) => {
+      return {
+        taskTypeName: item.taskTypeName,
+        price: item.score,
+        taskTypeId: item.taskTypeId,
+        qty: item.qty
+      }
+    })
+
+    let treeArr = tableData.map((item: any) => {
+      return {
+        taskTypeName: item.taskTypeName,
+        taskTypeId: item.orgTaskTypeId
+      }
+    })
+    let arr = [...pFlist]
+    tableData.forEach((item: any) => {
+      const curr = arr.find((iten) => iten.taskTypeId === item.parent_id)
+      if (curr) {
+        curr.children.push({
+          taskTypeId: item.orgTaskTypeId,
+          taskTypeName: item.taskTypeName
+        })
+      }
+    })
+    wmScoreTaskTypeList = arr.concat(treeArr).filter((item) => {
+      if (!item.children || item.children.length > 0) {
+        return item
+      }
+    })
+  }
+
+  formRef.value
+    .validate()
+    .then(async () => {
+      if (Number(form.score) > Number(form.kfpjf) && form.relationScoreId != '-1') {
+        uni.showToast({
+          title: '可分配积分不足',
+          icon: 'none'
+        })
+        return false
+      }
+      if (IS_DLS.value && !form.provAbbr) {
+        return uni.showToast({
+          title: '请选择区域',
+          icon: 'none'
+        })
+      }
+
+      form.wmScoreTaskTypeList = wmScoreTaskTypeList
+      form.pkgTaskTypeQtyList = pkgTaskTypeQtyList
+      form.agentTypeId = form.relationScoreId === '-1' ? '1' : '2'
+      form.relationScoreId = form.relationScoreId === '-1' ? '' : form.relationScoreId
+      form.kfpjf = form.kfpjf === '' ? '0' : form.kfpjf
+
+      let res
+      let text
+      if (currentType.value === '1') {
+        res = await wmscorepackageSaveApi(form)
+        text = '添加成功'
+      } else {
+        const obj: any = toRaw(form)
+        obj.id = currentId
+        res = await wmscorepackageUpdateByIdsApi(form)
+        text = '编辑成功'
+      }
+      if (res.code === 0) {
+        uni.showToast({
+          title: text,
+          icon: 'none'
+        })
+        setTimeout(() => {
+          uni.navigateBack()
+        }, 1000)
+      }
+    })
+    .catch((err: any) => {
+      console.log('err', err)
+    })
+}
+
+const formRef = ref()
+const form = reactive({
+  scorePackageName: '',
+  belongDate: '',
+  relatedService: '',
+  relatedServiceLabel: '',
+  agentTypeId: '',
+  relationScoreId: '',
+  relationScoreIdLable: '',
+  kfpjf: '',
+  score: '',
+  planId: '',
+  planIdLabel: '',
+  acceptSug: '',
+  acceptSugLabel: '',
+  drugtable: [] as any[],
+  drugtableLabel: '',
+  entTaskLimit: '',
+  startTime: '',
+  endTimeValue: '',
+  provAbbr: '',
+  wmScoreTaskTypeList: [] as any[],
+  pkgTaskTypeQtyList: [] as any[],
+  description: ''
+})
+
+const rules = reactive({
+  scorePackageName: {
+    type: 'string',
+    required: true,
+    message: '请输入执行包名称',
+    trigger: ['blur', 'change']
+  },
+  belongDate: {
+    type: 'string',
+    required: true,
+    message: '请选择所属月份',
+    trigger: ['blur', 'change']
+  },
+  relatedServiceLabel: {
+    type: 'string',
+    required: true,
+    message: '请选择管理服务企业',
+    trigger: ['blur', 'change']
+  },
+  relationScoreIdLable: {
+    type: 'string',
+    required: true,
+    message: '管理服务包名称',
+    trigger: ['blur', 'change']
+  },
+  planIdLabel: {
+    type: 'string',
+    required: true,
+    message: '请输入执行包名称',
+    trigger: ['blur', 'change']
+  },
+  endTimeValue: {
+    type: 'string',
+    required: true,
+    message: '请选择截止日期',
+    trigger: ['blur', 'change']
+  },
+  acceptSugLabel: {
+    type: 'string',
+    required: true,
+    message: '请选择承接对象',
+    trigger: ['blur', 'change']
+  },
+  provAbbr: {
+    type: 'string',
+    required: IS_DLS.value,
+    message: '请选择服务区域',
+    trigger: ['blur', 'change']
+  }
+})
+</script>
+
+<style lang="scss" scoped>
+.service-delivery-add {
+  background: #f2f2f2;
+  min-height: 100vh;
+  box-sizing: border-box;
+  padding: 24rpx;
+
+  .message {
+    background: #fff;
+    padding: 30rpx;
+    border-radius: 12rpx;
+    width: 100%;
+    box-sizing: border-box;
+  }
+
+  .form {
+    margin-top: 20rpx;
+    background: #fff;
+    padding: 30rpx;
+    border-radius: 12rpx;
+  }
+}
+
+:deep(.uv-form-item__body__left) {
+  padding-left: 18rpx;
+}
+
+.btn {
+  margin-top: 20rpx;
+  box-sizing: border-box;
+  width: 700rpx;
+  height: 160rpx;
+  background-color: #fff;
+  border-radius: 12rpx;
+  display: flex;
+  padding: 30rpx 46rpx 54rpx;
+  justify-content: space-between;
+  box-sizing: border-box;
+
+  view {
+    font-weight: 400;
+    box-sizing: border-box;
+    font-size: 32rpx;
+    line-height: 45rpx;
+    border-radius: 8rpx;
+    height: 72rpx;
+    width: 290rpx;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+  }
+  .cancel {
+    border: 2rpx solid #c7c7c7;
+    color: #111;
+  }
+  .confirm {
+    background-color: #6eb657;
+    color: #ffffff;
+  }
+}
+</style>

+ 652 - 0
src/pages-sub-service-mangement/serviceReviewed/index.vue

@@ -0,0 +1,652 @@
+<template>
+  <view class="service-reviewed">
+    <view class="reviewed-header">
+      <view class="search-content">
+        <view
+          class="search-list"
+          :class="{ current: searchParams.year }"
+          @click="searchClick('year')"
+        >
+          <text>执行包年度</text>
+          <uv-icon
+            name="arrow-down-fill"
+            :color="searchParams.year ? '#6eb657' : '#000'"
+            size="12"
+          ></uv-icon>
+        </view>
+        <view
+          class="search-list"
+          :class="{ current: searchParams.quarter }"
+          @click="searchClick('quarter')"
+        >
+          <text>执行包季度</text>
+          <uv-icon
+            name="arrow-down-fill"
+            :color="searchParams.quarter ? '#6eb657' : '#000'"
+            size="12"
+          ></uv-icon>
+        </view>
+        <view
+          class="search-list"
+          :class="{ current: searchParams.createTime }"
+          @click="searchClick('createTime')"
+        >
+          <text>服务提交时间</text>
+          <uv-icon
+            name="arrow-down-fill"
+            :color="searchParams.createTime ? '#6eb657' : '#000'"
+            size="12"
+          ></uv-icon>
+        </view>
+        <view
+          class="search-list"
+          :class="{ current: searchParams.taskTypeId }"
+          @click="searchClick('taskTypeId')"
+        >
+          <text>服务类型</text>
+          <uv-icon
+            name="arrow-down-fill"
+            :color="searchParams.taskTypeId ? '#6eb657' : '#000'"
+            size="12"
+          ></uv-icon>
+        </view>
+        <view
+          class="search-list"
+          :class="{ current: searchParams.vendorId }"
+          @click="searchClick('vendorId')"
+        >
+          <text>服务供应商</text>
+          <uv-icon
+            name="arrow-down-fill"
+            :color="searchParams.vendorId ? '#6eb657' : '#000'"
+            size="12"
+          ></uv-icon>
+        </view>
+        <view
+          class="search-list"
+          :class="{ current: searchParams.salesId }"
+          @click="searchClick('salesId')"
+        >
+          <text>代表姓名</text>
+          <uv-icon
+            name="arrow-down-fill"
+            :color="searchParams.salesId ? '#6eb657' : '#000'"
+            size="12"
+          ></uv-icon>
+        </view>
+        <view
+          class="search-list"
+          :class="{ current: searchParams.mahName }"
+          @click="searchClick('mahName')"
+        >
+          <text>产品所属生产企业</text>
+          <uv-icon
+            name="arrow-down-fill"
+            :color="searchParams.mahName ? '#6eb657' : '#000'"
+            size="12"
+          ></uv-icon>
+        </view>
+        <view
+          class="search-list"
+          :class="{ current: searchParams.skuId }"
+          @click="searchClick('skuId')"
+        >
+          <text>关联产品名称</text>
+          <uv-icon
+            name="arrow-down-fill"
+            :color="searchParams.skuId ? '#6eb657' : '#000'"
+            size="12"
+          ></uv-icon>
+        </view>
+        <view
+          class="search-list"
+          :class="{ current: searchParams.provAbbr }"
+          @click="searchClick('provAbbr')"
+        >
+          <text>执行包所属省份</text>
+          <uv-icon
+            name="arrow-down-fill"
+            :color="searchParams.provAbbr ? '#6eb657' : '#000'"
+            size="12"
+          ></uv-icon>
+        </view>
+        <view
+          class="search-list"
+          :class="{ current: searchParams.pkgIds }"
+          @click="searchClick('pkgIds')"
+        >
+          <text>上游服务部名称</text>
+          <uv-icon
+            name="arrow-down-fill"
+            :color="searchParams.pkgIds ? '#6eb657' : '#000'"
+            size="12"
+          ></uv-icon>
+        </view>
+      </view>
+      <view class="clear" @click="clearSearch">
+        <uv-icon name="close-circle" color="#000" size="24"></uv-icon>
+      </view>
+    </view>
+    <view class="list" v-if="hasInfo" :class="{ hidden: showRef }">
+      <view class="item" v-for="item in dataList" :key="item.id" @click="onDetail(item)">
+        <view class="top">
+          <view class="top-l">
+            <image src="@/static/images/icon/review.png" class="image" />
+            <text>{{ item.createTime }}</text>
+          </view>
+          <view class="top-r">
+            <text></text>
+            <view class="status">{{
+              item.taskStatus === '2'
+                ? '待服务商审核'
+                : item.taskStatus === '3'
+                  ? '审核通过'
+                  : item.taskStatus === '4'
+                    ? '审核拒绝'
+                    : ''
+            }}</view>
+          </view>
+        </view>
+        <view class="content">
+          <view class="title">
+            <view class="task-name">{{ getTaskName(item) }}</view>
+            <view class="score">+{{ item.taskScore }}积分</view>
+          </view>
+          <view class="item-detail">
+            <view class="num"> 任务编号:{{ item.taskNumber }} </view>
+            <view class="detail" @click.stop.self="getDetail(item)">
+              <uv-icon size="16" name="eye" color="#999"></uv-icon>
+              <text>审核详情</text>
+            </view>
+          </view>
+        </view>
+      </view>
+    </view>
+    <noData v-else />
+    <!-- 展示历史审核信息 -->
+    <uv-popup ref="popupRef" round="15" closeable @change="popupChange">
+      <view class="history">
+        <view class="header">
+          <view class="title">审核详情</view>
+        </view>
+        <view class="his-list">
+          <view class="his-item" v-for="(item, index) in hisList" :key="index">
+            <view class="his-text">
+              <text class="label">审核人:</text>
+              <text>{{ item.checker }}</text>
+            </view>
+            <view class="his-text">
+              <text class="label">审核时间:</text>
+              <text>{{ item.checkTime }}</text>
+            </view>
+            <view class="his-text">
+              <text class="label">审核状态:</text>
+              <text>{{ item.checkResult }}</text>
+            </view>
+            <view class="his-text">
+              <text class="label">审核原因:</text>
+              <text>{{ item.checkMessage }}</text>
+            </view>
+          </view>
+        </view>
+      </view>
+    </uv-popup>
+    <!-- 选择器内容 -->
+    <uv-datetime-picker
+      ref="datetimeRef"
+      :mode="datetimePickerMode"
+      @confirm="confirm"
+    ></uv-datetime-picker>
+    <!-- 内容选择器 -->
+    <uv-action-sheet ref="actionSheetRef" :actions="list" @select="confirm"> </uv-action-sheet>
+
+    <!--  -->
+    <uv-picker
+      ref="pickerRef"
+      :columns="[pickerColumns]"
+      :keyName="pickerLabel"
+      @confirm="confirm"
+    ></uv-picker>
+  </view>
+</template>
+
+<script setup lang="ts">
+import {
+  getTaskV2PageCheckedApi,
+  getTaskTypeAvailApi,
+  getDeptv2Avail,
+  getTaskV2CheckHisApi,
+  getUserV2Avail,
+  getDrug2Avail,
+  getPkgV2Api
+} from '@/service/modules/serviceReviewed'
+
+import abbreviationsProvinces from '@/utils/abbreviationsProvinces'
+import { getDictByNameApi } from '@/service/modules/getDict'
+import dayjs from 'dayjs'
+import { ref, reactive, onMounted } from 'vue'
+import { onReachBottom } from '@dcloudio/uni-app'
+import noData from '@/components/noData/index.vue'
+const params = reactive({
+  currentPage: 1,
+  pageSize: 20,
+  total: 0
+})
+
+const hasInfo = ref(true)
+const dataList = ref<any[]>([])
+
+const dict = reactive({
+  taskTypeAvailArr: [],
+  deptListArr: [],
+  userListArr: [],
+  mahNameArr: [],
+  drugListArr: [],
+  currDrugList: [],
+  relPkgNameArr: [] as any[]
+})
+
+const showRef = ref(false)
+const popupChange = (e) => {
+  showRef.value = e.show
+}
+
+const getDictFn = () => {
+  getTaskTypeAvailApi().then((res) => (dict.taskTypeAvailArr = res.data))
+  getDeptv2Avail().then((res) => (dict.deptListArr = res.data))
+  getUserV2Avail().then((res) => (dict.userListArr = res.data))
+  getDictByNameApi('mah_name').then((res: any) => (dict.mahNameArr = res.data))
+  getDrug2Avail().then((res: any) => (dict.drugListArr = res.data))
+  getPkgV2Api().then((res) => {
+    let arr: any[] = []
+    let data = res.data
+    for (let key in data) {
+      let obj = {
+        label: key,
+        value: data[key]
+      }
+      arr.push(obj)
+    }
+    dict.relPkgNameArr = arr
+  })
+}
+const getDatalist = async () => {
+  const obj = Object.assign({
+    current: params.currentPage,
+    size: params.pageSize,
+    taskStatus: 3,
+    ...searchParams.value
+  })
+  uni.showLoading({
+    title: '正在获取数据'
+  })
+  const res = await getTaskV2PageCheckedApi(obj)
+  if (res.code === 0) {
+    params.total = res.data.total
+    dataList.value = dataList.value.concat(res.data.records)
+    hasInfo.value = !!dataList.value.length
+    uni.hideLoading()
+  }
+  uni.hideLoading()
+}
+
+const onDetail = (row: any) => {
+  console.log('rwo', row)
+
+  uni.navigateTo({
+    url: `/pages-sub-service-mangement/taskAuditDetail/index?id=${row.taskId}&type=1&show=false`
+  })
+}
+const getTaskName = (row: any) => {
+  const taskTypeId = row.taskTypeId
+  const curr: any = dict.taskTypeAvailArr.find((iten: any) => iten.id === taskTypeId)
+  return curr ? curr.name : ''
+}
+const hisList = ref<any[]>([])
+const popupRef = ref()
+
+const getDetail = async (item: any) => {
+  hisList.value = []
+  const res = await getTaskV2CheckHisApi({ taskId: item.taskId })
+  if (res.code === 0) {
+    hisList.value = res.data
+    popupRef.value.open()
+  }
+}
+
+class SearchParams {
+  year = ''
+  quarter = ''
+  createTime = ''
+  taskTypeId = ''
+  vendorId = ''
+  salesId = ''
+  mahName = ''
+  skuId = ''
+  provAbbr = ''
+  pkgIds = ''
+}
+
+const searchParams = ref(new SearchParams())
+
+const clearSearch = () => {
+  searchParams.value = new SearchParams()
+  const lastYear = dayjs().format('YYYY')
+  searchParams.value.year = lastYear
+  init()
+}
+
+const currType = ref('')
+const datetimeRef = ref()
+const datetimePickerMode = ref('')
+
+const list = ref<any[]>([])
+
+let quarterList = [
+  { name: '第一季度', value: '1' },
+  { name: '第二季度', value: '2' },
+  { name: '第三季度', value: '3' },
+  { name: '第四季度', value: '4' }
+]
+
+const actionSheetRef = ref()
+
+const pickerRef = ref()
+const pickerColumns = ref<any[]>([])
+const pickerLabel = ref('')
+const searchClick = (type: string) => {
+  currType.value = type
+  switch (type) {
+    case 'year':
+      datetimePickerMode.value = 'year'
+      datetimeRef.value.open()
+      break
+    case 'quarter':
+      list.value = quarterList
+      actionSheetRef.value.open()
+      break
+    case 'createTime':
+      datetimePickerMode.value = 'date'
+      datetimeRef.value.open()
+      break
+    case 'taskTypeId':
+      pickerColumns.value = dict.taskTypeAvailArr
+      pickerLabel.value = 'name'
+      pickerRef.value.open()
+      break
+    case 'vendorId':
+      pickerColumns.value = dict.deptListArr
+      pickerLabel.value = 'name'
+      pickerRef.value.open()
+      break
+    case 'salesId':
+      pickerColumns.value = dict.userListArr
+      pickerLabel.value = 'realName'
+      pickerRef.value.open()
+      break
+    case 'mahName':
+      pickerColumns.value = dict.mahNameArr
+      pickerLabel.value = 'label'
+      pickerRef.value.open()
+      break
+
+    case 'skuId':
+      // 选择关联产品 需要先选择生产企业
+      const name = searchParams.value.mahName
+      if (!name) {
+        return uni.showToast({
+          title: '请先选择生产企业',
+          icon: 'none'
+        })
+      }
+      const currList = dict.drugListArr[name]
+      dict.currDrugList = currList
+      pickerColumns.value = dict.currDrugList
+      pickerLabel.value = 'drugName'
+      pickerRef.value.open()
+      break
+    case 'provAbbr':
+      pickerColumns.value = abbreviationsProvinces
+      pickerRef.value.open()
+      break
+    case 'pkgIds':
+      pickerColumns.value = dict.relPkgNameArr
+      pickerLabel.value = 'label'
+      pickerRef.value.open()
+      break
+
+    default:
+      break
+  }
+}
+const confirm = (e: any) => {
+  switch (currType.value) {
+    case 'year':
+      searchParams.value.year = dayjs(e.value).format('YYYY')
+      break
+    case 'quarter':
+      searchParams.value.quarter = e.value
+      break
+    case 'createTime':
+      searchParams.value.createTime = dayjs(e.value).format('YYYY-MM-DD')
+      break
+    case 'taskTypeId':
+      searchParams.value.taskTypeId = e?.value[0]?.id
+      break
+    case 'vendorId':
+      searchParams.value.vendorId = e?.value[0]?.entId
+      break
+    case 'salesId':
+      searchParams.value.salesId = e?.value[0]?.userId
+      break
+    case 'mahName':
+      searchParams.value.mahName = e?.value[0]?.value
+      break
+    case 'skuId':
+      searchParams.value.skuId = e?.value[0]?.id
+      break
+    case 'provAbbr':
+      searchParams.value.provAbbr = e?.value[0]
+      break
+    case 'pkgIds':
+      searchParams.value.pkgIds = e?.value[0]
+      break
+    default:
+      break
+  }
+  init()
+}
+
+const init = () => {
+  params.currentPage = 1
+  params.total = 0
+  dataList.value = []
+  getDatalist()
+}
+
+onReachBottom(() => {
+  if (dataList.value.length === params.total) return
+  params.currentPage++
+  getDatalist()
+})
+
+onMounted(async () => {
+  const lastYear = dayjs().format('YYYY')
+  searchParams.value.year = lastYear
+  await getDictFn()
+  getDatalist()
+})
+</script>
+
+<style lang="scss" scoped>
+.service-reviewed {
+  padding: 0 30rpx;
+  .reviewed-header {
+    width: 690rpx;
+    height: 80rpx;
+    margin-bottom: 30rpx;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    background-color: #fff;
+    position: fixed;
+    top: 0;
+    z-index: 999;
+
+    .search-content {
+      width: 630rpx;
+      overflow-x: auto;
+      display: flex;
+      flex-wrap: nowrap;
+
+      .search-list {
+        flex: none;
+        flex-shrink: 0;
+        display: flex;
+        align-items: center;
+        padding-right: 20rpx;
+        line-height: 80rpx;
+        text {
+          margin-right: 6rpx;
+          font-weight: 600;
+        }
+      }
+      .current {
+        color: #6eb657;
+      }
+    }
+    .clear {
+      display: flex;
+      justify-content: right;
+    }
+  }
+  .list {
+    margin-top: 100rpx;
+    .item {
+      box-shadow: 0px 4rpx 4rpx 0px rgba(0, 0, 0, 0.05);
+      margin-bottom: 20rpx;
+      border-radius: 16rpx;
+      .top {
+        padding: 0 30rpx;
+        box-sizing: border-box;
+        height: 100rpx;
+        background-color: #6eb657;
+        border-top-left-radius: 16rpx;
+        border-top-right-radius: 16rpx;
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        .top-l {
+          display: flex;
+          align-items: center;
+
+          .image {
+            width: 28rpx;
+            height: 28rpx;
+          }
+          text {
+            font-size: 26rpx;
+            color: #fff;
+            line-height: 36rpx;
+            margin-left: 20rpx;
+          }
+        }
+        .top-r {
+          display: flex;
+          align-items: center;
+          text {
+            display: block;
+            width: 10rpx;
+            height: 10rpx;
+            background-color: #fff;
+            border-radius: 50%;
+            margin-right: 10rpx;
+          }
+          .status {
+            color: #fff;
+            font-size: 28rpx;
+            line-height: 40rpx;
+          }
+        }
+      }
+      .content {
+        background-color: #fff;
+        padding: 30rpx;
+        box-sizing: border-box;
+        .title {
+          display: flex;
+          justify-content: space-between;
+          margin-bottom: 20rpx;
+          align-items: center;
+          .task-name {
+            font-size: 32rpx;
+            line-height: 45rpx;
+            color: #313131;
+          }
+          .score {
+            font-size: 28rpx;
+            color: #72b25b;
+          }
+        }
+        .item-detail {
+          display: flex;
+          justify-content: space-between;
+          .num {
+            font-weight: 400;
+            font-size: 20rpx;
+            line-height: 32rpx;
+            color: #999999;
+          }
+          .detail {
+            display: flex;
+            align-items: center;
+            font-size: 20rpx;
+            color: #999;
+            text {
+              margin-left: 6rpx;
+            }
+          }
+        }
+      }
+    }
+  }
+}
+
+.hidden {
+  height: 90vh;
+  overflow-y: hidden;
+}
+
+.history {
+  width: 630rpx;
+  margin: 0 auto;
+  padding: 0 30rpx;
+
+  .header {
+    text-align: center;
+    line-height: 105rpx;
+    font-size: 36rpx;
+    font-weight: 600;
+  }
+  .his-list {
+    height: 70vh;
+    overflow-y: auto;
+
+    .his-item {
+      padding: 15rpx 0;
+      border-bottom: 1px solid #eee;
+      .his-text {
+        line-height: 36rpx;
+        font-size: 22rpx;
+        text {
+          color: #333;
+        }
+        .label {
+          color: #000;
+          font-weight: 6000;
+        }
+      }
+    }
+  }
+}
+</style>

Some files were not shown because too many files changed in this diff