Pārlūkot izejas kodu

feat: 优化-2024/12/16 23:08:22

shuisheng 1 gadu atpakaļ
vecāks
revīzija
bad5473888
100 mainītis faili ar 513 papildinājumiem un 32182 dzēšanām
  1. 0 16
      .commitlintrc.js
  2. 0 59
      .cz-config.js
  3. 0 6
      .eslintignore
  4. 0 203
      .eslintrc.js
  5. 3 1
      .gitignore
  6. 0 4
      .husky/commit-msg
  7. 0 4
      .husky/pre-commit
  8. 0 11
      .lintstagedrc.js
  9. 2 0
      .npmrc
  10. 0 26
      .versionrc.js
  11. 8 14
      .vscode/settings.json
  12. 0 1
      DISCLAIMER.md
  13. 0 21
      LICENSE
  14. 0 308
      README.md
  15. 0 27
      babel.config.js
  16. BIN
      build/icons/1024x1024.png
  17. BIN
      build/icons/128x128.png
  18. BIN
      build/icons/16x16.png
  19. BIN
      build/icons/24x24.png
  20. BIN
      build/icons/256x256.png
  21. BIN
      build/icons/32x32.png
  22. BIN
      build/icons/48x48.png
  23. BIN
      build/icons/512x512.png
  24. BIN
      build/icons/64x64.png
  25. BIN
      build/icons/icon.icns
  26. BIN
      build/icons/icon.ico
  27. BIN
      build/source/billd.png
  28. 1 1
      deploy/handleGiteeJenkins.mjs
  29. 118 0
      deploy/handleSyncPublic.mjs
  30. 2 2
      deploy/static-build.sh
  31. 0 70
      doc/备忘.md
  32. 18 0
      doc/思路.md
  33. 0 42
      doc/流程.drawio
  34. 25 0
      doc/流程.md
  35. 5 0
      doc/设计资源.md
  36. 197 0
      eslint.config.js
  37. 23 0
      index.html
  38. 29 126
      package.json
  39. 1 15500
      pnpm-lock.yaml
  40. 6 9
      postcss.config.js
  41. 8 5
      prettier.config.js
  42. 0 9212
      public/TXLivePusher-2.1.1.min.js
  43. BIN
      public/favicon.ico
  44. 0 36
      public/index.html
  45. 0 31
      public/worker.js
  46. 0 43
      script/TerminalPrintPlugin.ts
  47. 0 485
      script/config/webpack.common.ts
  48. 0 168
      script/config/webpack.dev.ts
  49. 0 240
      script/config/webpack.prod.ts
  50. 0 19
      script/constant.ts
  51. 0 13
      script/utils/chalkTip.ts
  52. 0 5
      script/utils/path.ts
  53. 2 2
      src/components/Avatar/index.vue
  54. 2 2
      src/components/FloatTip/index.vue
  55. 1 1
      src/components/LongList/index.vue
  56. 0 6
      src/components/NaiveMessage/index.vue
  57. 0 6
      src/components/NaiveModal/index.vue
  58. 1 1
      src/components/PayCourse/index.vue
  59. 3 3
      src/components/QrPay/index.vue
  60. 2 2
      src/components/RenderMarkdown/index.vue
  61. 1 1
      src/components/SystemModal/index.vue
  62. 13 13
      src/components/VideoControls/index.vue
  63. 10 8
      src/constant.ts
  64. 0 121
      src/hooks/tipModal/index.vue
  65. 0 63
      src/hooks/use-common.ts
  66. 0 35
      src/hooks/use-google-ad.ts
  67. 0 10
      src/hooks/use-i18n.ts
  68. 0 129
      src/hooks/use-login.ts
  69. 0 457
      src/hooks/use-play.ts
  70. 0 606
      src/hooks/use-pull.ts
  71. 0 307
      src/hooks/use-push.ts
  72. 0 203
      src/hooks/use-rtcParams.ts
  73. 0 44
      src/hooks/use-tip.ts
  74. 0 81
      src/hooks/use-upload-tencentcloud.ts
  75. 0 161
      src/hooks/use-upload.ts
  76. 0 967
      src/hooks/use-websocket.ts
  77. 0 118
      src/hooks/webrtc/forwardAll.ts
  78. 0 124
      src/hooks/webrtc/forwardBilibili.ts
  79. 0 118
      src/hooks/webrtc/forwardHuya.ts
  80. 0 153
      src/hooks/webrtc/forwardThirdPartyLiveStreaming.ts
  81. 0 148
      src/hooks/webrtc/live.ts
  82. 0 165
      src/hooks/webrtc/meetingOne.ts
  83. 0 163
      src/hooks/webrtc/meetingPk.ts
  84. 0 163
      src/hooks/webrtc/meetingTwo.ts
  85. 0 140
      src/hooks/webrtc/rtmpToRtc.ts
  86. 0 123
      src/hooks/webrtc/srs.ts
  87. 0 92
      src/hooks/webrtc/tencentcloudCss.ts
  88. 4 4
      src/layout/mobile/head/index.vue
  89. 26 22
      src/layout/pc/head/index.vue
  90. 1 1
      src/layout/pc/sidebar/index.vue
  91. 1 1
      src/router/index.ts
  92. 0 129
      src/store/app/index.ts
  93. 0 30
      src/store/cache/index.ts
  94. 0 6
      src/store/index.ts
  95. 0 34
      src/store/network/index.ts
  96. 0 81
      src/store/user/index.ts
  97. 0 183
      src/types/ILiveRoom.ts
  98. 0 166
      src/types/IUser.ts
  99. 0 15
      src/types/shims-vue.d.ts
  100. 0 66
      src/types/srs.ts

+ 0 - 16
.commitlintrc.js

@@ -1,16 +0,0 @@
-const typeEnum = require('./.cz-config');
-console.log(
-  '\x1B[0;37;44m INFO \x1B[0m',
-  '\x1B[0;;34m ' +
-    `读取了: ${__filename.slice(__dirname.length + 1)}` +
-    ' \x1B[0m'
-);
-
-module.exports = {
-  extends: ['@commitlint/config-conventional'],
-  // https://github.com/conventional-changelog/commitlint/blob/master/docs/reference-rules.md
-  rules: {
-    'type-enum': [2, 'always', typeEnum.types.map((i) => i.value)],
-    'scope-empty': [0, 'never'],
-  },
-};

+ 0 - 59
.cz-config.js

@@ -1,59 +0,0 @@
-console.log(
-  '\x1B[0;37;44m INFO \x1B[0m',
-  '\x1B[0;;34m ' +
-    `读取了: ${__filename.slice(__dirname.length + 1)}` +
-    ' \x1B[0m'
-);
-
-// https://github.com/leoforfree/cz-customizable
-module.exports = {
-  types: [
-    {
-      value: 'feat',
-      name: '✨  feat:      新功能',
-    },
-    {
-      value: 'fix',
-      name: '🐛  fix:       修补bug',
-    },
-    {
-      value: 'docs',
-      name: '📝  docs:      文档新增/变更',
-    },
-    {
-      value: 'ci',
-      name: '👷  ci:        CI Build',
-    },
-    {
-      value: 'build',
-      name: '🚀  build:     版本打包/Tag',
-    },
-    {
-      value: 'chore',
-      name: '📦️  chore:     构建工具调整',
-    },
-    {
-      value: 'perf',
-      name: '⚡️  perf:      性能提升',
-    },
-    {
-      value: 'refactor',
-      name: '🔨  refactor:  代码重构',
-    },
-    {
-      value: 'revert',
-      name: '⏪  revert:    代码回滚',
-    },
-    {
-      value: 'style',
-      name: '🎨  style:     样式或UI修改',
-    },
-    {
-      value: 'test',
-      name: '🧪  test:      Add missing tests or correcting existing tests',
-    },
-  ],
-  scopes: [],
-  skipEmptyScopes: true,
-  // allowCustomScopes: true,
-};

+ 0 - 6
.eslintignore

@@ -1,6 +0,0 @@
-node_modules
-pnpm-lock.yaml
-dist
-components.d.ts
-.eslintcache
-.DS_Store

+ 0 - 203
.eslintrc.js

@@ -1,203 +0,0 @@
-console.log(
-  '\x1B[0;37;44m INFO \x1B[0m',
-  '\x1B[0;;34m ' +
-    `读取了: ${__filename.slice(__dirname.length + 1)}` +
-    ' \x1B[0m'
-);
-
-module.exports = {
-  root: true,
-  settings: {
-    'import/parsers': {
-      '@typescript-eslint/parser': ['.ts', '.tsx'],
-    },
-    'import/resolver': {
-      typescript: {
-        alwaysTryTypes: true, // always try to resolve types under `<root>@types` directory even it doesn't contain any source code, like `@types/unist`
-        project: './tsconfig.json',
-      },
-    },
-  },
-  env: {
-    browser: true,
-    node: true,
-  },
-
-  extends: [
-    // 'airbnb-base', // airbnb的eslint规范,它会对import和require进行排序,挺好的。如果不用它的话,需要在env添加node:true
-    'eslint:recommended',
-    'plugin:import/recommended',
-    'plugin:vue/vue3-essential', // plugin:vue/vue3-essential或plugin:vue/vue3-strongly-recommended或plugin:vue/vue3-recommended'
-    '@vue/eslint-config-typescript', // 启用这个规则后,vscode保存文件时格式化很慢
-    // '@vue/eslint-config-typescript/recommended', // 启用这个规则后,vscode保存文件时格式化很慢
-    '@vue/eslint-config-prettier',
-  ],
-  parser: 'vue-eslint-parser',
-  parserOptions: {
-    parser: '@typescript-eslint/parser',
-    ecmaVersion: 'latest',
-    ecmaFeatures: {
-      jsx: true,
-    },
-    tsconfigRootDir: __dirname, // https://typescript-eslint.io/docs/linting/typed-linting
-    project: ['./tsconfig.json'], // https://typescript-eslint.io/docs/linting/typed-linting
-  },
-  plugins: ['import'],
-  // overrides: [],
-  // rules会覆盖extends里面的规则(https://eslint.org/docs/latest/user-guide/migrating-to-6.0.0#-overrides-in-an-extended-config-file-can-now-be-overridden-by-a-parent-config-file)
-  // rules里面的规则不会对overrides里面的文件生效
-  rules: {
-    /**
-     * 0 => off
-     * 1 => warn
-     * 2 => error
-     */
-    'no-shadow': 0, // 禁止变量声明与外层作用域的变量同名
-    'class-methods-use-this': 0, // 类方法如果不使用this的话会报错
-    'no-console': 0, // 此规则不允许调用console对象的方法。
-    'spaced-comment': ['error', 'always', { exceptions: ['-', '+'] }], // 该规则强制注释中 // 或 /* 后空格的一致性
-    'no-var': 2, // 要求let或const代替var
-    camelcase: [
-      'error',
-      { properties: 'never' }, // properties默认always,即检查属性名;可以设置为never,即不检查属性名
-    ], // 强制执行驼峰命名约定
-    'no-underscore-dangle': 2, // 此规则不允许在标识符中使用悬空下划线。
-    'no-param-reassign': 2, // 禁止对 function 的参数进行重新赋值
-    'no-nested-ternary': 2, // 禁止嵌套三元
-    'no-plusplus': 2, // 禁用一元操作符 ++ 和 --
-    'no-unused-vars': 0, // 禁止出现未使用过的变量
-    'vars-on-top': 2, // 要求所有的 var 声明出现在它们所在的作用域顶部
-    'prefer-const': 2, // 要求使用 const 声明那些声明后不再被修改的变量
-    'prefer-template': 2, // 要求使用模板字符串代替字符串连接
-    'new-cap': 2, // 要求构造函数名称以大写字母开头
-    'no-restricted-syntax': [
-      // 禁用一些语法
-      'error',
-      // 'ForInStatement',
-      // 'ForOfStatement',
-      {
-        selector: 'ForInStatement',
-        /**
-         * 用 map() / every() / filter() / find() / findIndex() / reduce() / some() / ... 遍历数组,
-         * 和使用 Object.keys() / Object.values() / Object.entries() 迭代你的对象生成数组。
-         * 拥有返回值得纯函数比这个更容易解释
-         */
-        message:
-          'for in会迭代遍历原型链(__proto__),建议使用map/every/filter等遍历数组,使用Object.{keys,values,entries}等遍历对象',
-      },
-      {
-        selector: 'ForOfStatement',
-        message:
-          '建议使用map/every/filter等遍历数组,使用Object.{keys,values,entries}等遍历对象',
-      },
-    ], // https://github.com/BingKui/javascript-zh#%E8%BF%AD%E4%BB%A3%E5%99%A8%E5%92%8C%E5%8F%91%E7%94%9F%E5%99%A8
-    'no-iterator': 2, // 禁止使用__iterator__迭代器
-    'require-await': 2, // 禁止使用不带 await 表达式的 async 函数
-    'no-empty': 2, // 禁止空块语句
-    'guard-for-in': 2, // 要求for-in循环包含if语句
-    'global-require': 2, // 此规则要求所有调用require()都在模块的顶层,此规则在 ESLint v7.0.0中已弃用。请使用 中的相应规则eslint-plugin-node:https://github.com/mysticatea/eslint-plugin-node
-    'no-unused-expressions': [
-      2,
-      {
-        allowShortCircuit: true, // 允许短路
-        allowTernary: true, // 允许三元
-      },
-    ], // 禁止未使用的表达式,即let a = true && console.log(1)允许,但是true && console.log(1)不行
-    'object-shorthand': ['error', 'always'], // (默认)希望尽可能使用速记。var foo = {x:x};替换为var foo = {x};
-    'no-useless-escape': 2, // 禁止不必要的转义字符
-
-    // eslint-plugin-import插件
-    // https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/order.md
-    'import/order': [
-      'error',
-      {
-        groups: [
-          'builtin', // 如:import fs from 'fs';
-          'external', // 如:import _ from 'lodash';
-          'internal', // 如:import foo from 'src/foo';
-          'parent', // 如:import foo from '../foo';
-          'sibling', // 如:import bar from './bar';
-          // ['sibling', 'parent'],
-          // ['parent', 'sibling'],
-          'index', // 如:import main from './';
-          'object', // 如:import log = console.log;
-          'type', // 如:import type { Foo } from 'foo';
-        ],
-        pathGroups: [
-          {
-            pattern: '@/**',
-            group: 'internal',
-          },
-        ],
-        'newlines-between': 'always', // 强制或禁止导入组之间的新行
-        // 根据导入路径以字母顺序排列每个组中的顺序
-        alphabetize: {
-          order: 'asc', // 使用asc按升序排序,使用desc按降序排序(默认值:ignore)。
-          caseInsensitive: true, // 使用true忽略大小写,而false考虑大小写(默认值:false)。
-          orderImportKind: 'asc', // 使用asc以升序对各种导入类型进行排序,例如以type或typeof为前缀的导入,具有相同的导入路径。使用desc按降序排序(默认值:忽略)
-        },
-      },
-    ],
-    'import/newline-after-import': 2, // 强制在最后一个顶级导入语句或 require 调用之后有一个或多个空行
-    'import/no-extraneous-dependencies': 2, // 禁止导入未在package.json中声明的外部模块。
-
-    /**
-     * a.js
-     * export const version = '1.0.0';
-     * export const bar = { name: 'bar', version };
-     * export default bar;
-     * b.js
-     * import bar from './a';
-     * console.log(bar.version); // 检测到你使用的version有具名导出,import/no-named-as-default-member就会提示`import {version} from './a'`
-     */
-    'import/no-named-as-default-member': 1, // https://github.com/import-js/eslint-plugin-import/blob/v2.26.0/docs/rules/no-named-as-default-member.md
-
-    /**
-     * import/named
-     * 在import { version } from 'vuex';的时候会验证vuex有没有具名导出version,
-     * 但是在vue3的时候,import { defineComponent } from 'vue';会报错defineComponent not found in 'vue'
-     * 因此vue3项目关闭该规则
-     */
-    // 'import/named': 0,
-    // 'import/prefer-default-export': 0, // 当模块只有一个导出时,更喜欢使用默认导出而不是命名导出。
-    // 'import/extensions': 0, // 确保在导入路径中一致使用文件扩展名。在js/ts等文件里引其他文件都不能带后缀(比如.css和.jpg),因此关掉
-    // 'import/no-unresolved': 0, // 不能解析带别名的路径的模块,但实际上是不影响代码运行的。找不到解决办法,暂时关掉。
-
-    /**
-     * a.js
-     * export const bar = 'bar';
-     * export const foo = 'foo';
-     * export default foo;
-     * b.js
-     * import bar from './a'; // import/no-named-as-default规则会报错,因为import/no-named-as-default规则误以为你将具名导出的bar作为了默认导出来使用,但是实际上可能我就是想用默认导出的foo
-     * // import barr from './a'; // 改个名字import/no-named-as-default规则就不会报错了。
-     * // 不幸的是,React + Redux 是最常见的场景。但是,还有很多其他情况,HOC 会迫使开发人员关闭此规则。https://github.com/import-js/eslint-plugin-import/issues/544#issuecomment-245082471
-     */
-    'import/no-named-as-default': 0, // https://github.com/import-js/eslint-plugin-import/blob/v2.26.0/docs/rules/no-named-as-default.md
-
-    // @typescript-eslint插件
-    '@typescript-eslint/no-unused-vars': 2,
-
-    '@typescript-eslint/restrict-template-expressions': [
-      'error',
-      {
-        allowBoolean: true,
-        allowNumber: true,
-      },
-    ], // 强制模板文字表达式为string类型。即const a = {};console.log(`${a}`);会报错
-    '@typescript-eslint/no-floating-promises': 0, // 要求适当处理类似 Promise 的语句。即将await或者return Promise,或者对promise进行.then或者.catch
-    '@typescript-eslint/no-explicit-any': 0, // 不允许定义any类型。即let a: any;会报错
-    '@typescript-eslint/no-non-null-assertion': 0, // 禁止使用非空断言(后缀运算符!)。即const el = document.querySelector('.app');console.log(el!.tagName);会报错
-    '@typescript-eslint/ban-ts-comment': 0, // 禁止使用@ts-<directive>注释
-    '@typescript-eslint/no-unsafe-assignment': 0, // 不允许将具有类型的值分配any给变量和属性。即const a: any = {};const b = a;会报错
-    '@typescript-eslint/no-unsafe-argument': 0, // 不允许用any类型的值调用一个函数。即let a: any;Object.keys(a);会报错
-    '@typescript-eslint/no-unsafe-member-access': 0, // 不允许对类型为any的值进行成员访问。即const a: any = [];console.log(a[0]);会报错
-    '@typescript-eslint/no-unsafe-return': 0, // 不允许从一个函数中返回一个类型为any的值
-    '@typescript-eslint/no-unsafe-call': 0, // 不允许调用any类型的值
-    '@typescript-eslint/no-var-requires': 0, // 即不允许var foo = require('foo');。但是允许import foo = require('foo');
-    '@typescript-eslint/restrict-plus-operands': 0, // 要求加法的两个操作数是相同的类型并且是bigint, number, 或string。即const a = '1';console.log(a + 1);会报错
-
-    // vueeslint插件
-    'vue/multi-word-component-names': 0,
-  },
-};

+ 3 - 1
.gitignore

@@ -1,6 +1,8 @@
 node_modules
 dist
 components.d.ts
-.eslintcache
+auto-imports.d.ts
 .DS_Store
+.eslintcache
 deploy/index.js
+deploy/index.cjs

+ 0 - 4
.husky/commit-msg

@@ -1,4 +0,0 @@
-#!/bin/sh
-. "$(dirname "$0")/_/husky.sh"
-
-npx --no-install commitlint --edit $1

+ 0 - 4
.husky/pre-commit

@@ -1,4 +0,0 @@
-#!/bin/sh
-. "$(dirname "$0")/_/husky.sh"
-
-pnpm exec lint-staged

+ 0 - 11
.lintstagedrc.js

@@ -1,11 +0,0 @@
-console.log(
-  '\x1B[0;37;44m INFO \x1B[0m',
-  '\x1B[0;;34m ' +
-    `读取了: ${__filename.slice(__dirname.length + 1)}` +
-    ' \x1B[0m'
-);
-
-module.exports = {
-  // 只对这几种格式的代码进行prettier美化
-  '*.{js,jsx,ts,tsx,vue}': ['prettier --write'],
-};

+ 2 - 0
.npmrc

@@ -1,4 +1,6 @@
 # 将所有依赖提升到最外层
 shamefully-hoist=true
+# 设置@billd*包使用的镜像
+@billd:registry=https://registry.hsslive.cn/
 # 设置淘宝镜像
 registry=https://registry.npmmirror.com/

+ 0 - 26
.versionrc.js

@@ -1,26 +0,0 @@
-console.log(
-  '\x1B[0;37;44m INFO \x1B[0m',
-  '\x1B[0;;34m ' +
-    `读取了: ${__filename.slice(__dirname.length + 1)}` +
-    ' \x1B[0m'
-);
-
-module.exports = {
-  types: [
-    { type: 'feat', section: '✨ 新特性', hidden: false },
-    { type: 'fix', section: '🐛 Bug修复', hidden: false },
-    { type: 'docs', section: '📝 文档更改', hidden: false },
-    { type: 'style', section: '🎨 样式更改', hidden: false },
-    { type: 'refactor', section: '🔨 代码重构', hidden: false },
-    {
-      type: 'perf',
-      section: '⚡️ 优化性能',
-      hidden: false,
-    },
-    { type: 'test', section: '🧪 测试', hidden: false },
-    { type: 'build', section: '🚀 构建', hidden: false },
-    { type: 'ci', section: '👷 CI', hidden: false },
-    { type: 'chore', section: '🏗 其他', hidden: false },
-    { type: 'revert', section: '⏪ 回退', hidden: false },
-  ],
-};

+ 8 - 14
.vscode/settings.json

@@ -4,37 +4,32 @@
 
   // 在保存时格式化
   "editor.formatOnSave": true,
-  "editor.formatOnSaveMode": "file",
-
-  "eslint.codeActionsOnSave.mode": "problems",
-  "eslint.debug": false,
 
   // 保存时进行一些操作
   "editor.codeActionsOnSave": {
     "source.fixAll.eslint": "explicit",
     "source.organizeImports": "explicit"
-    // 在保存时运行eslint
-    //  "source.fixAll.eslint": true,
-    //  "source.organizeImports": true // 保存时整理 import ,去掉没用的导包,会删掉declare global {import utils from 'billd-utils';},因此先不用
   },
 
-  // "eslint.autoFixOnSave": true, // 废弃,使用editor.codeActionsOnSave替代
+  // "eslint.autoFixOnSave": true, // 废弃,使用editor.codeActionsOnSave替代
 
-  // Path Autocomplete,这个插件能够支持路径补全,默认vsc默认的路径提示可能不会提示一些css或者jpg等资源,用这个插件可以完善vscode的路径提示
+  // Path Autocomplete,这个插件能够支持路径补全,默认vsc默认的路径提示可能不会提示一些css或者jpg等资源,用这个插件可以完善vscode的路径提示
+  // 主要作用是你输入@、components、layouts的时候,会有路径提示
   "path-autocomplete.pathMappings": {
     "@": "${folder}/src",
-    "script": ["${folder}/src/script"]
+    "components": "${folder}/src/components",
+    "layouts": "${folder}/src/layouts"
   },
 
-  // 别名路径跳转,这个插件可以完善vscode的跳转
+  // 别名路径跳转这个插件可以完善vscode的跳转
   "alias-skip.allowedsuffix": [
     "css",
     "less",
     "sass",
     "scss",
+    "png",
     "jpg",
     "jpeg",
-    "png",
     "webp",
     "gif",
     "svg",
@@ -44,6 +39,5 @@
     "tsx",
     "vue"
   ],
-  // "typescript.tsdk": "node_modules/typescript/lib",
-  "vue.codeActions.savingTimeLimit": 2000
+  "typescript.tsdk": "node_modules/typescript/lib"
 }

+ 0 - 1
DISCLAIMER.md

@@ -1 +0,0 @@
-# 免责声明

+ 0 - 21
LICENSE

@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2023-PRESENT shuisheng<https://github.com/galaxy-s10>
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.

+ 0 - 308
README.md

@@ -1,308 +0,0 @@
-<p align="center">
-  <a href="https://live.hsslive.cn" target="_blank">
-    <img
-      width="200"
-      src="https://resource.hsslive.cn/billd-live/image/240160ddbc14367f7e0126c1f5b09b69.svg"
-      alt="Billd-Live logo"
-    />
-  </a>
-</p>
-
-<h1 align="center">
-  Billd-Live
-</h1>
-
-<p align="center">
-  基于Vue3 + WebRTC + Node + SRS + FFmpeg搭建的直播间
-</p>
-
-<div align="center">
-
-![stars](https://img.shields.io/github/stars/galaxy-s10/billd-live)
-![forks](https://img.shields.io/github/forks/galaxy-s10/billd-live)
-
-![version](https://img.shields.io/github/package-json/v/galaxy-s10/billd-live)
-![License](https://img.shields.io/github/license/galaxy-s10/billd-live)
-![language](https://img.shields.io/github/languages/top/galaxy-s10/billd-live)
-
-</div>
-
-## 简介
-
-billd 直播间,目前实现了类似 [bilibili 的 Web 在线直播](https://live.bilibili.com)功能,即你(房主)可以发布直播,别人进入你的直播间后能看到你的直播内容;而你也可以作为观众,进入别人的直播间看别人的直播内容。
-
-## 生态
-
-| 名称         | 仓库                                                                             | star & fork                                                                                                                                                                                                                                                                                                                         | 线上地址                                                             |
-| ------------ | -------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- |
-| 直播间前台   | [billd-live](https://github.com/galaxy-s10/billd-live)                           | [![github](https://img.shields.io/github/stars/galaxy-s10/billd-live?label=star&logo=GitHub)](https://github.com/galaxy-s10/billd-live) [![github](https://img.shields.io/github/forks/galaxy-s10/billd-live?label=fork&logo=GitHub)](https://github.com/galaxy-s10/billd-live)                                                     | [https://live.hsslive.cn](https://live.hsslive.cn)                   |
-| 直播间后端   | [billd-live-server](https://github.com/galaxy-s10/billd-live-server)             | [![github](https://img.shields.io/github/stars/galaxy-s10/billd-live-server?label=star&logo=GitHub)](https://github.com/galaxy-s10/billd-live-server) [![github](https://img.shields.io/github/forks/galaxy-s10/billd-live-server?label=fork&logo=GitHub)](https://github.com/galaxy-s10/billd-live-server)                         | [https://live-api.hsslive.cn](https://live-api.hsslive.cn)           |
-| 直播间后台   | [billd-live-admin](https://github.com/galaxy-s10/billd-live-admin)               | [![github](https://img.shields.io/github/stars/galaxy-s10/billd-live-admin?label=star&logo=GitHub)](https://github.com/galaxy-s10/billd-live-admin) [![github](https://img.shields.io/github/forks/galaxy-s10/billd-live-admin?label=fork&logo=GitHub)](https://github.com/galaxy-s10/billd-live-admin)                             | [https://live-admin.hsslive.cn](https://live-admin.hsslive.cn)       |
-| 直播间移动端 | [billd-live-flutter](https://github.com/galaxy-s10/billd-live-flutter)           | [![github](https://img.shields.io/github/stars/galaxy-s10/billd-live-flutter?label=star&logo=GitHub)](https://github.com/galaxy-s10/billd-live-flutter) [![github](https://img.shields.io/github/forks/galaxy-s10/billd-live-flutter?label=fork&logo=GitHub)](https://github.com/galaxy-s10/billd-live-flutter)                     | [https://live.hsslive.cn/download](https://live.hsslive.cn/download) |
-| 直播间移动端 | [billd-live-react-native](https://github.com/galaxy-s10/billd-live-react-native) | [![github](https://img.shields.io/github/stars/galaxy-s10/billd-live-react-native?label=star&logo=GitHub)](https://github.com/galaxy-s10/billd-live-react-native) [![github](https://img.shields.io/github/forks/galaxy-s10/billd-live-react-native?label=fork&logo=GitHub)](https://github.com/galaxy-s10/billd-live-react-native) | [https://live.hsslive.cn/download](https://live.hsslive.cn/download) |
-| 直播间客户端 | [billd-live-electron](https://github.com/galaxy-s10/billd-live-electron)         | [![github](https://img.shields.io/github/stars/galaxy-s10/billd-live-electron?label=star&logo=GitHub)](https://github.com/galaxy-s10/billd-live-flutter) [![github](https://img.shields.io/github/forks/galaxy-s10/billd-live-electron?label=fork&logo=GitHub)](https://github.com/galaxy-s10/billd-live-electron)                  | [https://live.hsslive.cn/download](https://live.hsslive.cn/download) |
-| 直播间移动端 | [billd-live-kotlin](https://github.com/galaxy-s10/billd-live-kotlin)             | [![github](https://img.shields.io/github/stars/galaxy-s10/billd-live-kotlin?label=star&logo=GitHub)](https://github.com/galaxy-s10/billd-live-kotlin) [![github](https://img.shields.io/github/forks/galaxy-s10/billd-live-kotlin?label=fork&logo=GitHub)](https://github.com/galaxy-s10/billd-live-kotlin)                         | [https://live.hsslive.cn/download](https://live.hsslive.cn/download) |
-
-## 功能
-
-- [x] 原生 webrtc 推拉流
-- [x] srs webrtc 推流,支持 `http-flv`、`hls`、`webrtc`、`rtmp`拉流
-- [x] msr 推流,ffmpeg 转码,支持 `http-flv`、`hls`、`webrtc`、`rtmp`拉流
-- [x] 一对一打 PK
-- [x] 一对多打 PK
-- [x] 多对多打 PK
-- [x] 多平台转推(b 站、虎牙直播)
-- [x] 前端混流
-- [x] 推流鉴权
-- [x] 拉流鉴权
-- [x] [OBS](https://github.com/obsproject/obs-studio)、[FFmpeg](https://ffmpeg.org)推流
-- [x] 用户模块(qq 登录)
-- [x] 支付模块(支付宝当面付)
-- [x] 订单模块
-- [x] 商品模块
-- [x] 礼物模块
-- [x] 直播后台
-- [x] 响应式页面
-- [x] 适配多语言(i18n)
-- [x] 移动端App(Flutter)
-- [ ] 客户端App(Electron)
-- [x] 接入bilibili直播
-- [x] 接入腾讯云(云直播)
-- [ ] 接入腾讯云(实时音视频 TRTC)
-- [x] 私有化部署
-
-## 技术栈
-
-- 前端相关:[Vue3](https://vuejs.org) 以及相关技术栈、`Typescript`、`WebRTC`、`WebCodecs`、`Web Workder`、`Web Audio`、`Canvas`
-- 后端相关:[Nodejs](https://nodejs.org) 以及相关技术栈、`Koa2`、`Sequelize`、`Mysql`、`Redis`、`Socket.io`
-- 流媒体服务器相关:[SRS](https://ossrs.net)、 [FFmpeg](https://ffmpeg.org)、[Coturn](https://github.com/coturn/coturn)
-- Docker 相关:[Docker](https://www.docker.com)
-
-## 私有化部署
-
-[https://live.hsslive.cn/privatizationDeployment](https://live.hsslive.cn/privatizationDeployment)
-
-## 接口文档
-
-Apifox:[https://apifox.com/apidoc/shared-c7556b54-17b2-494e-a039-572d83f103ed](https://apifox.com/apidoc/shared-c7556b54-17b2-494e-a039-572d83f103ed)
-
-## 客户端下载
-
-官网下载:[https://live.hsslive.cn/download/live](https://live.hsslive.cn/download/live)
-
-## 预览
-
-线上地址:[https://live.hsslive.cn](https://live.hsslive.cn)
-
-### 电脑端(web)
-
-- 首页
-
-<img
-  src="https://github.com/galaxy-s10/billd-live/assets/61055341/95849774-1df0-4a59-b726-8d3bc0795619" 
-  style="width:800px"
-/>
-
-- 进入直播间
-
-<img
-  src="https://github.com/galaxy-s10/billd-live/assets/61055341/91ac3f5f-b06d-46b3-84bc-ab6e0add4d5b" 
-  style="width:800px"
-/>
-
-- 发起直播
-
-<img
-  src="https://github.com/galaxy-s10/billd-live/assets/61055341/81e2f413-8470-42ab-bee7-699e2f8f0290" 
-  style="width:800px"
-/>
-
-- 排行榜
-
-<img
-  src="https://github.com/galaxy-s10/billd-live/assets/61055341/6d7d79b6-e8b9-42ff-9e25-d44c41948579" 
-  style="width:800px"
-/>
-
-### 移动端(web)
-
-- 首页
-
-<img
-  src="https://github.com/galaxy-s10/billd-live/assets/61055341/9b56e99a-f821-4c9c-b9c3-330c2f61d533" 
-  style="height:500px"
-/>
-
-- 进入直播间
-
-<img
-  src="https://github.com/galaxy-s10/billd-live/assets/61055341/db4145a9-517d-45a5-9c74-641892d55a3e" 
-  style="height:500px"
-/>
-
-### 安卓端(flutter)
-
--
-
-<img
-  src="https://resource.hsslive.cn/billd-live/image/38a0fae4c5104913ca0b7617ca58b518.webp" 
-  style="width:300px"
-/><img
-  src="https://resource.hsslive.cn/billd-live/image/8fa5423182476341ade6d74dba9eac0f.webp" 
-  style="width:300px"
-/><img
-  src="https://resource.hsslive.cn/billd-live/image/a6df703d48c3c3e5ec708ebf0b48f345.webp" 
-  style="width:300px"
-/>
-
-- 直播间详情、分区详情
-
-<img
-  src="https://resource.hsslive.cn/billd-live/image/420a663259487309a51cdc0d44b01246.webp" 
-  style="width:300px"
-/> <img
-  src="https://resource.hsslive.cn/billd-live/image/da8d31cda66f51b95cd8b34f4cbeb680.webp" 
-  style="width:300px"
-/>
-
--
-
-<img
-  src="https://resource.hsslive.cn/billd-live/image/3a777718d31f94e6d25071d29f5e5185.webp" 
-  style="width:300px"
-/> <img
-  src="https://resource.hsslive.cn/billd-live/image/e785bc308c2d24460baf36f65aa39c5e.webp" 
-  style="width:300px"
-/>
-
-- 直播中心
-
-<img
-  src="https://resource.hsslive.cn/billd-live/image/77b89ccf7a10be1663f7e9d5bc69565d.jpg" 
-  style="width:300px"
-/> <img
-  src="https://resource.hsslive.cn/billd-live/image/90f505de2580b69aed73ea5c5717e669.jpg" 
-  style="width:300px"
-/>
-
-## 本地启动
-
-> b 站教程:[从零搭建迷你版 b 站 web 直播间合集](https://space.bilibili.com/381307133/channel/collectiondetail?sid=1458070),看里面带 `从零搭建迷你b站直播间` 封面的视频。
->
-> billd-live 付费课:[https://www.hsslive.cn/article/151](https://www.hsslive.cn/article/151)
-
-### billd-live
-
-- 安装依赖(建议使用 node 版本:v18.19.0)
-
-```bash
-pnpm i
-```
-
-> 更新 billd 相关依赖:
-
-```bash
-pnpm i billd-utils@latest billd-scss@latest billd-deploy@latest billd-html-webpack-plugin@latest
-```
-
-- 运行
-
-```bash
-npm run start
-```
-
-- 打包
-
-```bash
-npm run build
-```
-
-### billd-live-server
-
-- 安装依赖(建议使用 node 版本:v18.19.0)
-
-```bash
-pnpm i
-```
-
-> 更新 billd 相关依赖:
-
-```bash
-pnpm i billd-utils@latest billd-scss@latest billd-html-webpack-plugin@latest
-```
-
-> 本地必须要有 docker、ffmpeg 环境!
->
-> 项目启动后,会在项目的 src/secret/目录下生成 secret.ts 文件,请填写里面的信息,MYSQL_CONFIG、REDIS_CONFIG、SRS_CONFIG 必填!
-
-```bash
-# 1.初始化docker容器
-pnpm run docker:dev
-
-# 2.初始化数据库(可选,只需要执行一次)
-pnpm run mysql:dev
-
-# 3.运行(4300端口)
-pnpm run dev
-```
-
-## 兼容性
-
-- [x] iphone 14
-- [x] 三星 s10
-- [x] ipad air 3
-
-## 常见问题
-
-[https://live.hsslive.cn/doc/faq](https://live.hsslive.cn/doc/faq)
-
-## 技术支持
-
-[https://live.hsslive.cn/support](https://live.hsslive.cn/support)
-
-## 环境配置
-
-### 本地开发环境
-
-> 配置:MacBook Pro 2023 Apple M3 Max,14 核 CPU,36G 内存
-
-- 操作系统:mac os 14.1
-- node 版本:v18.19.0
-- pnpm 版本:8.6.3
-- docker 版本:24.0.5, build ced0996
-- mysql 版本:基于 docker,镜像:mysql:8.0
-- redis 版本:基于 docker,镜像:redis:7.0
-- srs 版本:基于 docker,镜像:registry.cn-hangzhou.aliyuncs.com/ossrs/srs:5.0.170
-- ffmpeg 版本:5.1.2
-
-### 构建/托管服务器环境
-
-> 配置:4 核 CPU,4G 内存,8M 带宽(广州)
-
-- 操作系统:CentOS Linux release 8.2.2004
-- nginx 版本:1.22.1
-- node 版本:v16.19.1
-- pnpm 版本:8.6.3
-- docker 版本:23.0.1, build a5ee5b1
-- mysql 版本:基于 docker,镜像:mysql:8.0
-- redis 版本:基于 docker,镜像:redis:7.0
-
-### 流媒体服务器环境
-
-> ~~配置:2 核 CPU,2G 内存,带宽 30M(香港)~~,2G内存也能跑,但偶尔会占满内存导致服务器卡死。
->
-> 配置:2 核 CPU,4G 内存,带宽 30M(香港)
-
-- 操作系统:Alibaba Cloud Linux release 3 (Soaring Falcon)
-- node 版本:v16.20.0
-- pnpm 版本:8.6.3
-- pm2 版本:5.3.0
-- docker 版本:24.0.2, build cb74dfc
-- srs 版本:基于 docker,镜像:registry.cn-hangzhou.aliyuncs.com/ossrs/srs:5.0.170
-- ffmpeg 版本:6.0
-
-## 致敬开源
-
-billd-live自2023年3月开源以来,仅有作者(也就是我)一个人维护,深知做开源的难处。
-
-如果你做过开源项目,并且单个仓库拿到 **`128+star`**,我个人认为这是非常不容易的,因为这代表了你的开源被很多人关注或认同,如果此时你正在了解直播相关方面的内容,我录制的 [**billd-live付费课**](https://www.hsslive.cn/article/151) 或许会对你有一定帮助,它将对你进行**免费**,作为我认同你在开源方面做的贡献,以及我对你力所能及的回馈,希望你能不忘初心,砥砺前行~

+ 0 - 27
babel.config.js

@@ -1,27 +0,0 @@
-console.log(
-  '\x1B[0;37;44m INFO \x1B[0m',
-  '\x1B[0;;34m ' +
-    `读取了: ${__filename.slice(__dirname.length + 1)}` +
-    ' \x1B[0m'
-);
-
-module.exports = {
-  presets: [
-    [
-      '@babel/preset-env',
-      {
-        /**
-         * useBuiltIns:
-         * false: 默认值就是false,不用任何的polyfill相关的代码
-         * usage: 代码中需要哪些polyfill, 就引用相关的api
-         * entry: 手动在入口文件中导入 core-js/regenerator-runtime, 根据目标浏览器引入所有对应的polyfill
-         */
-        useBuiltIns: 'usage',
-        corejs: 3,
-        modules: 'auto', // modules设置成commonjs后,路由懒加载就没了。
-        // modules: 'commonjs', // https://github.com/vuejs/vue-cli/blob/HEAD/packages/@vue/babel-preset-app/index.js#L226
-      },
-    ],
-  ],
-  plugins: ['@babel/plugin-syntax-dynamic-import'],
-};

BIN
build/icons/1024x1024.png


BIN
build/icons/128x128.png


BIN
build/icons/16x16.png


BIN
build/icons/24x24.png


BIN
build/icons/256x256.png


BIN
build/icons/32x32.png


BIN
build/icons/48x48.png


BIN
build/icons/512x512.png


BIN
build/icons/64x64.png


BIN
build/icons/icon.icns


BIN
build/icons/icon.ico


BIN
build/source/billd.png


+ 1 - 1
deploy/handleGiteeJenkins.mjs

@@ -48,7 +48,7 @@ function putFile() {
       // 数组的最后一个一定是文件,因此不需要判断它是不是目录
       if (index !== arr.length - 1) {
         const flag = fs.existsSync(item);
-        // eslint-disable-next-line
+         
         !flag && fs.mkdirSync(item);
       }
     });

+ 118 - 0
deploy/handleSyncPublic.mjs

@@ -0,0 +1,118 @@
+// WARN 该文件只是方便我将当前项目同步到开源仓库,其他人不需要管这个文件~
+
+import { execSync } from 'node:child_process';
+import fs from 'node:fs';
+import path from 'node:path';
+
+import trash from 'trash';
+
+let allFile = [];
+const proDir = '/Users/huangshuisheng/Desktop/hss/billd-project/billd-live-pro';
+const freeDir = '/Users/huangshuisheng/Desktop/hss/galaxy-s10/billd-live';
+const ignoreRootDir = ['.DS_Store', '.git', 'node_modules', 'dist'];
+const ignoreIndexOf = [
+  path.resolve(proDir, 'src/hooks'),
+  path.resolve(proDir, 'src/store'),
+  path.resolve(proDir, 'src/types'),
+  path.resolve(proDir, 'src/utils'),
+  path.resolve(proDir, 'src/views'),
+];
+
+const dir = fs.readdirSync(proDir).filter((item) => {
+  if (ignoreRootDir.includes(item)) {
+    return false;
+  }
+  return true;
+});
+
+function findFile(inputDir) {
+  for (let i = 0; i < inputDir.length; i += 1) {
+    const file = inputDir[i];
+    const filePath = `${proDir}/${file}`;
+    const stat = fs.statSync(filePath);
+    const isDir = stat.isDirectory();
+    if (!isDir) {
+      allFile.push(filePath);
+    } else {
+      findFile(fs.readdirSync(filePath).map((key) => `${file}/${key}`));
+    }
+  }
+}
+
+function putFile() {
+  for (let i = 0; i < allFile.length; i += 1) {
+    const file = allFile[i];
+    const arr = [];
+    const githubFile = file.replace(proDir, '');
+    const githubFileArr = githubFile.split('/').filter((item) => item !== '');
+    githubFileArr.forEach((item) => {
+      if (arr.length) {
+        arr.push(path.resolve(arr[arr.length - 1], item));
+      } else {
+        arr.push(path.resolve(freeDir, item));
+      }
+    });
+    arr.forEach((item, index) => {
+      // 数组的最后一个一定是文件,因此不需要判断它是不是目录
+      if (index !== arr.length - 1) {
+        const flag = fs.existsSync(item);
+
+        !flag && fs.mkdirSync(item);
+      }
+    });
+    fs.copyFileSync(file, path.join(freeDir, './', file.replace(proDir, '')));
+  }
+}
+
+async function clearOld() {
+  const freeDirAllFile = fs.readdirSync(freeDir);
+  const queue = [];
+  freeDirAllFile.forEach((url) => {
+    const fullurl = `${freeDir}/${url}`;
+    if (!['node_modules', '.git'].includes(url)) {
+      queue.push(trash(fullurl));
+    }
+  });
+  await Promise.all(queue);
+}
+
+if (process.cwd().indexOf('galaxy-s10') !== -1) {
+  console.log('当前目录错误');
+} else {
+  clearOld().then(() => {
+    findFile(dir);
+    allFile = allFile.filter((x) => {
+      let flag = true;
+      ignoreIndexOf.forEach((y) => {
+        if (x.indexOf(y) === 0) {
+          flag = false;
+        }
+      });
+      return flag;
+    });
+    putFile();
+
+    const currentPkgStr = fs.readFileSync(
+      path.resolve(proDir, 'package.json'),
+      'utf-8'
+    );
+    const newPkg = JSON.parse(currentPkgStr);
+    delete newPkg['private'];
+    newPkg['name'] = 'billd-live';
+    newPkg['repository']['url'] = 'https://github.com/galaxy-s10/billd-live';
+    newPkg['bugs']['url'] = 'https://github.com/galaxy-s10/billd-live/issues';
+    newPkg['devDependencies'] = {};
+    newPkg['dependencies'] = {};
+    fs.writeFileSync(
+      path.resolve(freeDir, 'package.json'),
+      // @ts-ignore
+      JSON.stringify({ ...newPkg }, {}, 2)
+    );
+    execSync(`pnpm i`, { cwd: freeDir });
+    execSync(`git add .`, { cwd: freeDir });
+    execSync(`git commit -m 'feat: 优化-${new Date().toLocaleString()}'`, {
+      cwd: freeDir,
+    });
+    execSync(`git push`, { cwd: freeDir });
+  });
+}

+ 2 - 2
deploy/static-build.sh

@@ -4,9 +4,9 @@
 # Date: 2022-04-26 01:54:48
 # Description: https://github.com/galaxy-s10/sh/blob/master/build.sh
 # Email: 2274751790@qq.com
-# FilePath: /billd-live/deploy/static-build.sh
+# FilePath: /billd-desk/deploy/static-build.sh
 # Github: https://github.com/galaxy-s10
-# LastEditTime: 2024-03-14 14:15:20
+# LastEditTime: 2024-06-07 01:16:11
 # LastEditors: shuisheng
 ###
 

+ 0 - 70
doc/备忘.md

@@ -1,70 +0,0 @@
-## 不同开播
-
-- srs直播
-  > todo
-- webrtc直播
-  > 在ohterJoin的时候,主播给除自己以外的所有人发offer,其他所有人只获取主播的视频流
-  > 有主播和2个观众,结果就是画面是主播的画面,主播new了2个rtc,每个观众各自new了一个rtc
-- webrtc会议实现一
-  > 在roomLiving的时候,主播给除自己以外的所有人发offer,其他所有人都和主播视频通话,主播将自己和其他所有人的流混在一起
-  > 有主播和2个观众,结果就是画面是所有人的画面,主播new了2个rtc,每个观众各自new了一个rtc
-  > 优点:实现简单;缺点:主播断开后,所有观众都会跟着断开。
-- webrtc会议实现二
-  > 在roomLiving的时候,每个人都给除自己以外的所有人发offer,并和除自己以外的所有人进行视频通话,将收到的流进行展示
-  > 房间里有3个人,结果就是画面是所有人的画面,每个人都有2个rtc
-  > 优点:所有视频通话都是独立的,一个断开不会影响另一个;缺点:实现起来稍微麻烦一点,并且因为客户端存在n个rtc,因此对客户端带宽压力更大。
-- 打pk
-  > 主播和其他人先webrtc视频通话,再由任意一方转推srs。
-- 腾讯云云直播
-  > 在上述基础上再增加即可。
-
-## 测试
-
-播放错误,重连测试:
-
-```sh
-## 找到ffmpeg进程
-ps aux|grep ffmpeg
-
-## 断掉进程
-kill -9 xxxx
-
-## 重新推流
-ffmpeg -loglevel quiet -readrate 1 -stream_loop -1 -i /Users/huangshuisheng/Desktop/hss/galaxy-s10/billd-live-server/src/video/fddm_mhsw.mp4 -vcodec copy -acodec copy -f flv 'rtmp://localhost/livestream/roomId___2?token=47b650e1196e9c9d5b30f18cbd7a3cf1&random_id=B86Os2F5sf'
-```
-
-### 破音问题
-
-当前电脑正在播放音频,如果此时开始直播,添加了一个视频素材(有声音的),然后拖拽这个视频素材,就会出现类似破音问题。如果把电脑的外放音频都关闭了,再开始直播添加视频素材,拖拽就不会出现破音问题。
-
-### video标签属性
-
-```html
-<!-- x-webkit-airplay这个属性应该是使此视频支持ios的AirPlay功能 -->
-<!-- playsinline、 webkit-playsinline IOS微信浏览器支持小窗内播放 -->
-<!-- x5-video-player-type 启用H5播放器,是wechat安卓版特性 -->
-<!-- x5-video-player-fullscreen 全屏设置 -->
-<!-- x5-video-orientation 声明播放器支持的方向,可选值landscape横屏,portraint竖屏。默认值portraint。 -->
-<video
-  autoplay
-  webkit-playsinline="true"
-  playsinline
-  x-webkit-airplay="allow"
-  x5-video-player-type="h5"
-  x5-video-player-fullscreen="true"
-  x5-video-orientation="portraint"
-  muted
-></video>
-```
-
-### flv.js
-
-~~不通过 npm 安装 flv.js,因为安装了 flv.js 后,`import flvJs from 'flv.js'` 会导致 vscode 的 ts 错乱。因此直接下载 flv.min.js 使用。~~,应该是我的 vscode 用了 vscode 的 ts 版本(ts 的 5.x 版本),用回工作区(也就是项目里面安装的 ts 的 4.9 的版本)的 ts 版本就没事了?
-
-### video.js 报错
-
-Chrome 版本 114.0.5735.133(正式版本) (arm64),调试移动端的时候,此时的地址栏是:http://localhost:8000/h5/3?liveType=srsHlsPull,使用模拟的安卓设备,点击播放没问题(播放的 hls),但是换成模拟一个苹果设备(任意苹果设备都行,iphone6,7,8,X,12 Pro 等等),点击播放都会报错:`VIDEOJS: ERROR: (CODE:4 MEDIA_ERR_SRC_NOT_SUPPORTED) The media could not be loaded, either because the server or network failed or because the format is not supported.`
-
-Firefox 版本 114.0.2 (64 位),调试移动端时,此时的地址栏是:http://localhost:8000/h5/3?liveType=srsHlsPull,模拟安卓、苹果设备都能正常播放,但是小概率会报 blob 解码,但刷新就又好了
-
-Safari 版本:版本 16.5.1 (18615.2.9.11.7),开发===>响应式设计模式,模拟任何苹果设备,都能正常播放,并且行为和实际的苹果手机行为一致(苹果手机有的 bug,在电脑的 Safari 调试的时候也有。但电脑的 Firfox 和 Chrome 调试时没有,实际上电脑的 Firfox 和 Chrome 调试时应该也要出现这个 bug)

+ 18 - 0
doc/思路.md

@@ -0,0 +1,18 @@
+- 客户端打开后,判断缓存有无uid
+
+  - 有uid和token,验证uid和token,连接Websocket
+  - 没有uid和token,调接口获取uid
+
+- 打开客户端,ws连接,join的时候,带上desk_user_id,在redis里添加一个记录desk_user_uuid,设置他的过期时间为10秒
+- 设置心跳为5秒一次,每次心跳都更新desk_user_uuid的过期时间
+- 给desk_user_uuid添加过期订阅,过期的时候判断为远程连接断开
+- 发起远程连接的时候,发送billdDeskStartRemote,带上desk信息
+
+- 锁屏的时候
+
+  - websocket是否会断开
+    - 会断开。
+  - webrtc是否会断开
+    - 会断开。
+
+- 主动断开远程连接如何判定?

+ 0 - 42
doc/流程.drawio

@@ -1,42 +0,0 @@
-<mxfile host="65bd71144e">
-    <diagram id="dqmK7txivQjgTJvqpF2s" name="第 1 页">
-        <mxGraphModel dx="945" dy="483" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
-            <root>
-                <mxCell id="0"/>
-                <mxCell id="1" parent="0"/>
-                <mxCell id="5" value="推流" style="edgeStyle=none;html=1;entryX=0.442;entryY=0.017;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="2" target="3" edge="1">
-                    <mxGeometry relative="1" as="geometry"/>
-                </mxCell>
-                <mxCell id="2" value="安卓端" style="whiteSpace=wrap;html=1;" parent="1" vertex="1">
-                    <mxGeometry x="80" y="80" width="120" height="60" as="geometry"/>
-                </mxCell>
-                <mxCell id="3" value="流媒体服务器" style="whiteSpace=wrap;html=1;" parent="1" vertex="1">
-                    <mxGeometry x="200" y="300" width="120" height="60" as="geometry"/>
-                </mxCell>
-                <mxCell id="6" value="推流" style="edgeStyle=none;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="4" target="3" edge="1">
-                    <mxGeometry relative="1" as="geometry"/>
-                </mxCell>
-                <mxCell id="4" value="浏览器" style="whiteSpace=wrap;html=1;" parent="1" vertex="1">
-                    <mxGeometry x="280" y="80" width="120" height="60" as="geometry"/>
-                </mxCell>
-                <mxCell id="9" value="拉流" style="edgeStyle=none;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="3" target="7" edge="1">
-                    <mxGeometry relative="1" as="geometry">
-                        <mxPoint x="170" y="350" as="targetPoint"/>
-                    </mxGeometry>
-                </mxCell>
-                <mxCell id="7" value="安卓端" style="whiteSpace=wrap;html=1;" parent="1" vertex="1">
-                    <mxGeometry x="80" y="500" width="120" height="60" as="geometry"/>
-                </mxCell>
-                <mxCell id="8" value="浏览器" style="whiteSpace=wrap;html=1;" parent="1" vertex="1">
-                    <mxGeometry x="320" y="500" width="120" height="60" as="geometry"/>
-                </mxCell>
-                <mxCell id="13" value="拉流" style="edgeStyle=none;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="3" target="8" edge="1">
-                    <mxGeometry relative="1" as="geometry">
-                        <mxPoint x="220" y="339.9999999999998" as="sourcePoint"/>
-                        <mxPoint x="140" y="520.0000000000002" as="targetPoint"/>
-                    </mxGeometry>
-                </mxCell>
-            </root>
-        </mxGraphModel>
-    </diagram>
-</mxfile>

+ 25 - 0
doc/流程.md

@@ -0,0 +1,25 @@
+# 一对一远程
+
+没什么好说的
+
+# 多对一远程
+
+> 多个用户同时控制一个客户端
+> 被控端都有自己的房间(唯一)
+
+- 开始远程控制
+  - 控制端,用户点击连接,发送billdDeskStartRemote消息,开始远程控制。
+  - 被控端,监听billdDeskStartRemote消息,收到billdDeskStartRemote消息后,判断stream
+    - 没有stream,调原生接口获取stream
+    - 有stream,开始updateWebRtcRemoteDeskConfig,开始走webrtc流程(offer、answer等)
+- 操作问题,所有进入远程控制的用户都可以进行操作(或者可以加个限制或者切换,一种是控制模式,另一种是观看模式)。
+- 结束远程控制,用户结束远程控制。
+  - 一对多,断开一个不能影响其他连接
+  - 被控端判断有没有用户连接,只有当所有用户都断开连接的时候,才显示已断开远程连接。
+
+# 实际
+
+- a用户远程客户端
+- 客户端收到a用户的远程请求,获取stream,然后和a用户进行webrtc处理
+- b用户远程客户端
+- 客户端收到b用户的远程请求,获取stream,然后和a用户进行webrtc处理

+ 5 - 0
doc/设计资源.md

@@ -0,0 +1,5 @@
+# 图标
+
+## iconfont
+
+阿里云官网:https://www.iconfont.cn/collections/detail?cid=16472

+ 197 - 0
eslint.config.js

@@ -0,0 +1,197 @@
+import js from '@eslint/js';
+import pluginTypeScript from '@typescript-eslint/eslint-plugin';
+import * as parserTypeScript from '@typescript-eslint/parser';
+import configPrettier from 'eslint-config-prettier';
+import { defineFlatConfig } from 'eslint-define-config';
+import importPlugin from 'eslint-plugin-import';
+import pluginPrettier from 'eslint-plugin-prettier';
+import pluginVue from 'eslint-plugin-vue';
+import * as parserVue from 'vue-eslint-parser';
+
+console.log(
+  '\x1B[0;37;44m INFO \x1B[0m',
+  '\x1B[0;;34m ' + `读取了: eslint配置文件` + ' \x1B[0m'
+);
+
+export default defineFlatConfig([
+  {
+    ...js.configs.recommended,
+    ...importPlugin.flatConfigs.recommended,
+    ignores: [
+      'node_modules',
+      'pnpm-lock.yaml',
+      'dist',
+      'components.d.ts',
+      'auto-imports.d.ts',
+      'electron-dist/**/*',
+      'deploy/**/*',
+      '.DS_Store',
+      '.eslintcache',
+    ],
+    languageOptions: {
+      globals: {},
+    },
+    plugins: {
+      prettier: pluginPrettier,
+      import: importPlugin,
+    },
+    rules: {
+      ...configPrettier.rules,
+      ...pluginPrettier.configs?.recommended.rules,
+      /**
+       * 0 => off
+       * 1 => warn
+       * 2 => error
+       */
+      'no-unused-vars': 'off', // 禁止出现未使用过的变量
+      'no-shadow': 'off', // 禁止变量声明与外层作用域的变量同名
+      'class-methods-use-this': 'off', // 类方法如果不使用this的话会报错
+      'no-console': 'off', // 此规则不允许调用console对象的方法。
+      'spaced-comment': ['error', 'always', { exceptions: ['-', '+'] }], // 该规则强制注释中 // 或 /* 后空格的一致性
+      'no-var': 'error', // 要求let或const代替var
+      camelcase: [
+        'error',
+        { properties: 'never' }, // properties默认always,即检查属性名;可以设置为never,即不检查属性名
+      ], // 强制执行驼峰命名约定
+      'no-underscore-dangle': 'error', // 此规则不允许在标识符中使用悬空下划线。
+      'no-param-reassign': 'error', // 禁止对 function 的参数进行重新赋值
+      'no-nested-ternary': 'error', // 禁止嵌套三元
+      'no-plusplus': 'error', // 禁用一元操作符 ++ 和 --
+      'vars-on-top': 'error', // 要求所有的 var 声明出现在它们所在的作用域顶部
+      'prefer-const': 'error', // 要求使用 const 声明那些声明后不再被修改的变量
+      'prefer-template': 'error', // 要求使用模板字符串代替字符串连接
+      'new-cap': 'error', // 要求构造函数名称以大写字母开头
+      'no-restricted-syntax': [
+        // 禁用一些语法
+        'error',
+        // 'ForInStatement',
+        // 'ForOfStatement',
+        {
+          selector: 'ForInStatement',
+          /**
+           * 用 map() / every() / filter() / find() / findIndex() / reduce() / some() / ... 遍历数组,
+           * 和使用 Object.keys() / Object.values() / Object.entries() 迭代你的对象生成数组。
+           * 拥有返回值得纯函数比这个更容易解释
+           */
+          message:
+            'for in会迭代遍历原型链(__proto__),建议使用map/every/filter等遍历数组,使用Object.{keys,values,entries}等遍历对象',
+        },
+        {
+          selector: 'ForOfStatement',
+          message:
+            '建议使用map/every/filter等遍历数组,使用Object.{keys,values,entries}等遍历对象',
+        },
+      ], // https://github.com/BingKui/javascript-zh#%E8%BF%AD%E4%BB%A3%E5%99%A8%E5%92%8C%E5%8F%91%E7%94%9F%E5%99%A8
+      'no-iterator': 'error', // 禁止使用__iterator__迭代器
+      'require-await': 'error', // 禁止使用不带 await 表达式的 async 函数
+      'no-empty': 'error', // 禁止空块语句
+      'guard-for-in': 'error', // 要求for-in循环包含if语句
+      'global-require': 'error', // 此规则要求所有调用require()都在模块的顶层,此规则在 ESLint v7.0.0中已弃用。请使用 中的相应规则eslint-plugin-node:https://github.com/mysticatea/eslint-plugin-node
+      'no-unused-expressions': [
+        'error',
+        {
+          allowShortCircuit: true, // 允许短路
+          allowTernary: true, // 允许三元
+        },
+      ], // 禁止未使用的表达式,即let a = true && console.log(1)允许,但是true && console.log(1)不行
+      'object-shorthand': ['error', 'always'], // (默认)希望尽可能使用速记。var foo = {x:x};替换为var foo = {x};
+      'no-useless-escape': 'error', // 禁止不必要的转义字符
+
+      'import/order': [
+        'error',
+        {
+          groups: [
+            'builtin', // 如:import fs from 'fs';
+            'external', // 如:import _ from 'lodash';
+            'internal', // 如:import foo from 'src/foo';
+            'parent', // 如:import foo from '../foo';
+            'sibling', // 如:import bar from './bar';
+            // ['sibling', 'parent'],
+            // ['parent', 'sibling'],
+            'index', // 如:import main from './';
+            'object', // 如:import log = console.log;
+            'type', // 如:import type { Foo } from 'foo';
+          ],
+          pathGroups: [
+            {
+              pattern: '@/**',
+              group: 'internal',
+            },
+          ],
+          'newlines-between': 'always', // 强制或禁止导入组之间的新行
+          // 根据导入路径以字母顺序排列每个组中的顺序
+          alphabetize: {
+            order: 'asc', // 使用asc按升序排序,使用desc按降序排序(默认值:ignore)。
+            caseInsensitive: true, // 使用true忽略大小写,而false考虑大小写(默认值:false)。
+            orderImportKind: 'asc', // 使用asc以升序对各种导入类型进行排序,例如以type或typeof为前缀的导入,具有相同的导入路径。使用desc按降序排序(默认值:忽略)
+          },
+        },
+      ],
+      'import/newline-after-import': 'error', // 强制在最后一个顶级导入语句或 require 调用之后有一个或多个空行
+      'import/no-extraneous-dependencies': 'error', // 禁止导入未在package.json中声明的外部模块。
+    },
+  },
+  {
+    files: ['**/*.?([cm])ts', '**/*.?([cm])tsx'],
+    languageOptions: {
+      parser: parserTypeScript,
+      parserOptions: {
+        sourceType: 'module',
+      },
+    },
+    plugins: {
+      '@typescript-eslint': pluginTypeScript,
+    },
+    rules: {
+      ...pluginTypeScript.configs.strict.rules,
+
+      // @typescript-eslint插件
+      '@typescript-eslint/no-unused-vars': 'error',
+
+      // '@typescript-eslint/restrict-template-expressions': [
+      //   'error',
+      //   {
+      //     allowBoolean: true,
+      //     allowNumber: true,
+      //   },
+      // ], // 强制模板文字表达式为string类型。即const a = {};console.log(`${a}`);会报错
+      '@typescript-eslint/no-floating-promises': 'off', // 要求适当处理类似 Promise 的语句。即将await或者return Promise,或者对promise进行.then或者.catch
+      '@typescript-eslint/no-explicit-any': 'off', // 不允许定义any类型。即let a: any;会报错
+      '@typescript-eslint/no-non-null-assertion': 'off', // 禁止使用非空断言(后缀运算符!)。即const el = document.querySelector('.app');console.log(el!.tagName);会报错
+      '@typescript-eslint/ban-ts-comment': 'off', // 禁止使用@ts-<directive>注释
+      '@typescript-eslint/no-unsafe-assignment': 'off', // 不允许将具有类型的值分配any给变量和属性。即const a: any = {};const b = a;会报错
+      '@typescript-eslint/no-unsafe-argument': 'off', // 不允许用any类型的值调用一个函数。即let a: any;Object.keys(a);会报错
+      '@typescript-eslint/no-unsafe-member-access': 'off', // 不允许对类型为any的值进行成员访问。即const a: any = [];console.log(a[0]);会报错
+      '@typescript-eslint/no-unsafe-return': 'off', // 不允许从一个函数中返回一个类型为any的值
+      '@typescript-eslint/no-unsafe-call': 'off', // 不允许调用any类型的值
+      '@typescript-eslint/no-var-requires': 'off', // 即不允许var foo = require('foo');。但是允许import foo = require('foo');
+      '@typescript-eslint/restrict-plus-operands': 'off', // 要求加法的两个操作数是相同的类型并且是bigint, number, 或string。即const a = '1';console.log(a + 1);会报错
+      '@typescript-eslint/no-non-null-asserted-optional-chain': 'off',
+    },
+  },
+  {
+    files: ['**/*.vue'],
+    languageOptions: {
+      globals: {},
+      parser: parserVue,
+      parserOptions: {
+        ecmaFeatures: {
+          jsx: true,
+        },
+        extraFileExtensions: ['.vue'],
+        parser: '@typescript-eslint/parser',
+        sourceType: 'module',
+      },
+    },
+    plugins: {
+      vue: pluginVue,
+    },
+    processor: pluginVue.processors['.vue'],
+    rules: {
+      ...pluginVue.configs.base.rules,
+      ...pluginVue.configs['vue3-essential'].rules,
+      ...pluginVue.configs['vue3-recommended'].rules,
+      'vue/multi-word-component-names': 'off',
+    },
+  },
+]);

+ 23 - 0
index.html

@@ -0,0 +1,23 @@
+<!doctype html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <link
+      rel="icon"
+      href="/favicon.ico"
+    />
+
+    <meta
+      name="viewport"
+      content="width=device-width, initial-scale=1.0"
+    />
+    <title><%= title %></title>
+  </head>
+  <body>
+    <div id="app"></div>
+    <script
+      type="module"
+      src="/src/main.ts"
+    ></script>
+  </body>
+</html>

+ 29 - 126
package.json

@@ -1,142 +1,45 @@
 {
   "name": "billd-live",
-  "version": "0.0.1",
+  "version": "0.1.0",
+  "description": "基于Vue3 + WebRTC + Node + SRS搭建的直播间",
+  "keywords": [
+    "billd",
+    "bilibili",
+    "webrtc",
+    "rtmp",
+    "flv",
+    "hls"
+  ],
+  "homepage": "https://live.hsslive.cn",
+  "bugs": {
+    "url": "https://github.com/galaxy-s10/billd-live/issues"
+  },
   "repository": {
     "type": "git",
-    "url": "https://github.com/galaxy-s10/billd-live.git"
+    "url": "https://github.com/galaxy-s10/billd-live"
   },
+  "license": "MIT",
   "author": "shuisheng <2274751790@qq.com>",
+  "type": "module",
   "scripts": {
-    "build": "webpack --config ./script/config/webpack.common.ts --env production",
-    "build:beta": "webpack --config ./script/config/webpack.common.ts --env production",
-    "build:prod": "webpack --config ./script/config/webpack.common.ts --env production",
+    "build:beta": "vite build",
+    "build:prod": "vite build",
     "copy": "ts-node ./deploy/handleGiteeJenkins.mjs",
     "cz": "cz",
-    "deploy:beta": "node ./deploy/index.js --beta",
-    "deploy:prod": "node ./deploy/index.js --prod",
-    "lint": "eslint --config ./.eslintrc.js . --ext .js,.jsx,.ts,.tsx,.vue --cache",
-    "lint:fix": "eslint --config ./.eslintrc.js . --ext .js,.jsx,.ts,.tsx,.vue --cache --fix",
-    "oxclint": "pnpm dlx oxlint@latest",
-    "oxlint": "oxlint",
-    "prepare": "husky install",
-    "prettier": "prettier --write .",
+    "deploy:beta": "node ./deploy/index.cjs --beta",
+    "deploy:prod": "node ./deploy/index.cjs --prod",
+    "dev": "vite",
+    "lint": "eslint . --config ./eslint.config.js --cache",
+    "lint:fix": "eslint . --config ./eslint.config.js --cache --fix",
+    "preview": "vite preview",
     "release": "standard-version",
-    "start": "cross-env webpack serve --config ./script/config/webpack.common.ts --env development",
-    "start:beta": "cross-env VUE_APP_RELEASE_PROJECT_ENV=beta VUE_APP_RELEASE_PROJECT_NAME=billd-live webpack serve --config ./script/config/webpack.common.ts --env development",
-    "start:preview": "cross-env VUE_APP_RELEASE_PROJECT_ENV=preview VUE_APP_RELEASE_PROJECT_NAME=billd-live webpack serve --config ./script/config/webpack.common.ts --env development",
-    "start:prod": "cross-env VUE_APP_RELEASE_PROJECT_ENV=prod VUE_APP_RELEASE_PROJECT_NAME=billd-live webpack serve --config ./script/config/webpack.common.ts --env production",
-    "start:stats": "cross-env WEBPACK_ANALYZER_SWITCH=true webpack serve --config ./script/config/webpack.common.ts --env development",
-    "typecheck": "tsc -p ./tsconfig.json --noEmit"
+    "sync-repo": "ts-node ./deploy/handleSyncPublic.mjs"
   },
   "config": {
     "commitizen": {
       "path": "./node_modules/cz-conventional-changelog"
-    },
-    "cz-customizable": {
-      "config": "./.cz-config.js"
     }
   },
-  "dependencies": {
-    "@vicons/ionicons5": "^0.12.0",
-    "@vueuse/core": "^10.11.1",
-    "@webav/av-cliper": "^1.0.6",
-    "@webav/av-recorder": "^1.0.6",
-    "axios": "^1.2.1",
-    "billd-deploy": "^1.1.0",
-    "billd-html-webpack-plugin": "^1.0.6",
-    "billd-scss": "^0.0.8",
-    "billd-utils": "^0.0.25",
-    "cos-js-sdk-v5": "^1.8.6",
-    "fabric": "^5.3.0",
-    "flv.js": "^1.6.2",
-    "js-cookie": "^3.0.5",
-    "jszip": "^3.10.1",
-    "md-editor-v3": "^4.21.3",
-    "mp4box": "^0.5.2",
-    "mpegts.js": "^1.7.3",
-    "naive-ui": "^2.40.2",
-    "pinia": "^2.0.33",
-    "pinia-plugin-persistedstate": "^3.2.0",
-    "qiniu-js": "^3.4.2",
-    "qrcode": "^1.5.3",
-    "socket.io-client": "^4.8.0",
-    "socket.io-msgpack-parser": "^3.0.2",
-    "spark-md5": "^3.0.2",
-    "video.js": "^8.3.0",
-    "vue": "^3.5.13",
-    "vue-demi": "^0.13.11",
-    "vue-i18n": "9",
-    "vue-lazyload": "^3.0.0",
-    "vue-router": "^4.0.13",
-    "webrtc-adapter": "^8.2.2"
-  },
-  "devDependencies": {
-    "@babel/core": "^7.14.0",
-    "@babel/preset-env": "^7.14.2",
-    "@commitlint/cli": "^16.0.1",
-    "@commitlint/config-conventional": "^16.0.0",
-    "@rushstack/eslint-patch": "^1.1.0",
-    "@soda/friendly-errors-webpack-plugin": "^1.8.1",
-    "@swc/core": "^1.3.84",
-    "@types/fabric": "^5.3.3",
-    "@types/node": "^18.11.9",
-    "@types/video.js": "^7.3.52",
-    "@vue/compiler-sfc": "^3.3.4",
-    "@vue/eslint-config-prettier": "^8.0.0",
-    "@vue/eslint-config-typescript": "^11.0.3",
-    "@vue/preload-webpack-plugin": "^2.0.0",
-    "babel-loader": "^8.2.2",
-    "chalk": "^4",
-    "commitizen": "^4.2.4",
-    "compression-webpack-plugin": "^9.2.0",
-    "copy-webpack-plugin": "^8.1.0",
-    "core-js": "^3.17.2",
-    "cross-env": "^7.0.3",
-    "crypto-js": "^4.2.0",
-    "css-loader": "^6.7.1",
-    "css-minimizer-webpack-plugin": "^3.0.0",
-    "cz-conventional-changelog": "^3.3.0",
-    "cz-customizable": "^7.0.0",
-    "esbuild-loader": "^4.0.2",
-    "eslint": "^8.13.0",
-    "eslint-import-resolver-typescript": "^3.5.5",
-    "eslint-plugin-import": "^2.28.0",
-    "eslint-webpack-plugin": "^3.1.1",
-    "file-loader": "^6.2.0",
-    "fork-ts-checker-webpack-plugin": "^7.2.6",
-    "html-webpack-plugin": "^5.5.0",
-    "html-webpack-tags-plugin": "^3.0.1",
-    "husky": "^7.0.0",
-    "lint-staged": "^12.1.4",
-    "mini-css-extract-plugin": "^2.6.0",
-    "node-emoji": "^1.11.0",
-    "oxlint": "^0.13.0",
-    "portfinder": "^1.0.28",
-    "postcss": "^8.4.8",
-    "postcss-loader": "^6.2.1",
-    "postcss-preset-env": "^7.4.2",
-    "prettier": "^3.0.1",
-    "sass": "^1.45.2",
-    "sass-loader": "^12.4.0",
-    "standard-version": "^9.3.2",
-    "swc-loader": "^0.2.3",
-    "terser": "^5.7.0",
-    "terser-webpack-plugin": "^5.3.6",
-    "thread-loader": "^3.0.4",
-    "trash": "^8.1.1",
-    "ts-loader": "^9.2.7",
-    "ts-node": "^10.9.1",
-    "typescript": "^5.1.6",
-    "unplugin-vue-components": "^0.24.1",
-    "vconsole": "^3.15.0",
-    "vue-loader": "^17.2.2",
-    "vue-style-loader": "^4.1.3",
-    "webpack": "^5.68.0",
-    "webpack-bundle-analyzer": "^4.4.1",
-    "webpack-cli": "^4.9.2",
-    "webpack-dev-server": "^4.7.2",
-    "webpack-merge": "^5.7.3",
-    "webpackbar": "^5.0.2",
-    "windicss-webpack-plugin": "^1.7.7"
-  }
-}
+  "dependencies": {},
+  "devDependencies": {}
+}

+ 1 - 15500
pnpm-lock.yaml

@@ -6,15503 +6,4 @@ settings:
 
 importers:
 
-  .:
-    dependencies:
-      '@vicons/ionicons5':
-        specifier: ^0.12.0
-        version: 0.12.0
-      '@vueuse/core':
-        specifier: ^10.11.1
-        version: 10.11.1(vue@3.5.13(typescript@5.1.6))
-      '@webav/av-cliper':
-        specifier: ^1.0.6
-        version: 1.0.6
-      '@webav/av-recorder':
-        specifier: ^1.0.6
-        version: 1.0.6
-      axios:
-        specifier: ^1.2.1
-        version: 1.3.4
-      billd-deploy:
-        specifier: ^1.1.0
-        version: 1.1.0(@swc/core@1.3.84)(@types/node@18.15.3)(esbuild@0.15.18)(sass@1.59.3)(terser@5.16.6)(webpack-cli@4.10.0(webpack-bundle-analyzer@4.8.0)(webpack-dev-server@4.13.1)(webpack@5.76.2))
-      billd-html-webpack-plugin:
-        specifier: ^1.0.6
-        version: 1.0.6(@swc/core@1.3.84)(@types/node@18.15.3)(esbuild@0.15.18)(sass@1.59.3)(terser@5.16.6)(webpack-cli@4.10.0(webpack-bundle-analyzer@4.8.0)(webpack-dev-server@4.13.1)(webpack@5.76.2))
-      billd-scss:
-        specifier: ^0.0.8
-        version: 0.0.8
-      billd-utils:
-        specifier: ^0.0.25
-        version: 0.0.25(tslib@2.6.1)(typescript@5.1.6)
-      cos-js-sdk-v5:
-        specifier: ^1.8.6
-        version: 1.8.6
-      fabric:
-        specifier: ^5.3.0
-        version: 5.3.0
-      flv.js:
-        specifier: ^1.6.2
-        version: 1.6.2
-      js-cookie:
-        specifier: ^3.0.5
-        version: 3.0.5
-      jszip:
-        specifier: ^3.10.1
-        version: 3.10.1
-      md-editor-v3:
-        specifier: ^4.21.3
-        version: 4.21.3(@codemirror/view@6.34.2)(@lezer/common@1.2.3)(vue@3.5.13(typescript@5.1.6))
-      mp4box:
-        specifier: ^0.5.2
-        version: 0.5.2
-      mpegts.js:
-        specifier: ^1.7.3
-        version: 1.7.3
-      naive-ui:
-        specifier: ^2.40.2
-        version: 2.40.2(vue@3.5.13(typescript@5.1.6))
-      pinia:
-        specifier: ^2.0.33
-        version: 2.0.33(typescript@5.1.6)(vue@3.5.13(typescript@5.1.6))
-      pinia-plugin-persistedstate:
-        specifier: ^3.2.0
-        version: 3.2.0(pinia@2.0.33(typescript@5.1.6)(vue@3.5.13(typescript@5.1.6)))
-      qiniu-js:
-        specifier: ^3.4.2
-        version: 3.4.2
-      qrcode:
-        specifier: ^1.5.3
-        version: 1.5.3
-      socket.io-client:
-        specifier: ^4.8.0
-        version: 4.8.0
-      socket.io-msgpack-parser:
-        specifier: ^3.0.2
-        version: 3.0.2
-      spark-md5:
-        specifier: ^3.0.2
-        version: 3.0.2
-      video.js:
-        specifier: ^8.3.0
-        version: 8.3.0
-      vue:
-        specifier: ^3.5.13
-        version: 3.5.13(typescript@5.1.6)
-      vue-demi:
-        specifier: ^0.13.11
-        version: 0.13.11(vue@3.5.13(typescript@5.1.6))
-      vue-i18n:
-        specifier: '9'
-        version: 9.9.1(vue@3.5.13(typescript@5.1.6))
-      vue-lazyload:
-        specifier: ^3.0.0
-        version: 3.0.0
-      vue-router:
-        specifier: ^4.0.13
-        version: 4.1.6(vue@3.5.13(typescript@5.1.6))
-      webrtc-adapter:
-        specifier: ^8.2.2
-        version: 8.2.2
-    devDependencies:
-      '@babel/core':
-        specifier: ^7.14.0
-        version: 7.21.3
-      '@babel/preset-env':
-        specifier: ^7.14.2
-        version: 7.20.2(@babel/core@7.21.3)
-      '@commitlint/cli':
-        specifier: ^16.0.1
-        version: 16.3.0(@swc/core@1.3.84)
-      '@commitlint/config-conventional':
-        specifier: ^16.0.0
-        version: 16.2.4
-      '@rushstack/eslint-patch':
-        specifier: ^1.1.0
-        version: 1.2.0
-      '@soda/friendly-errors-webpack-plugin':
-        specifier: ^1.8.1
-        version: 1.8.1(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))
-      '@swc/core':
-        specifier: ^1.3.84
-        version: 1.3.84
-      '@types/fabric':
-        specifier: ^5.3.3
-        version: 5.3.3
-      '@types/node':
-        specifier: ^18.11.9
-        version: 18.15.3
-      '@types/video.js':
-        specifier: ^7.3.52
-        version: 7.3.52
-      '@vue/compiler-sfc':
-        specifier: ^3.3.4
-        version: 3.3.4
-      '@vue/eslint-config-prettier':
-        specifier: ^8.0.0
-        version: 8.0.0(@types/eslint@8.21.2)(eslint@8.36.0)(prettier@3.0.1)
-      '@vue/eslint-config-typescript':
-        specifier: ^11.0.3
-        version: 11.0.3(eslint-plugin-vue@9.16.1(eslint@8.36.0))(eslint@8.36.0)(typescript@5.1.6)
-      '@vue/preload-webpack-plugin':
-        specifier: ^2.0.0
-        version: 2.0.0(html-webpack-plugin@5.5.0(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)))(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))
-      babel-loader:
-        specifier: ^8.2.2
-        version: 8.3.0(@babel/core@7.21.3)(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))
-      chalk:
-        specifier: ^4
-        version: 4.1.2
-      commitizen:
-        specifier: ^4.2.4
-        version: 4.3.0(@swc/core@1.3.84)
-      compression-webpack-plugin:
-        specifier: ^9.2.0
-        version: 9.2.0(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))
-      copy-webpack-plugin:
-        specifier: ^8.1.0
-        version: 8.1.1(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))
-      core-js:
-        specifier: ^3.17.2
-        version: 3.29.1
-      cross-env:
-        specifier: ^7.0.3
-        version: 7.0.3
-      crypto-js:
-        specifier: ^4.2.0
-        version: 4.2.0
-      css-loader:
-        specifier: ^6.7.1
-        version: 6.7.3(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))
-      css-minimizer-webpack-plugin:
-        specifier: ^3.0.0
-        version: 3.4.1(esbuild@0.15.18)(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))
-      cz-conventional-changelog:
-        specifier: ^3.3.0
-        version: 3.3.0(@swc/core@1.3.84)
-      cz-customizable:
-        specifier: ^7.0.0
-        version: 7.0.0
-      esbuild-loader:
-        specifier: ^4.0.2
-        version: 4.0.2(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))
-      eslint:
-        specifier: ^8.13.0
-        version: 8.36.0
-      eslint-import-resolver-typescript:
-        specifier: ^3.5.5
-        version: 3.5.5(@typescript-eslint/parser@5.62.0(eslint@8.36.0)(typescript@5.1.6))(eslint-plugin-import@2.28.0)(eslint@8.36.0)
-      eslint-plugin-import:
-        specifier: ^2.28.0
-        version: 2.28.0(@typescript-eslint/parser@5.62.0(eslint@8.36.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.5.5)(eslint@8.36.0)
-      eslint-webpack-plugin:
-        specifier: ^3.1.1
-        version: 3.2.0(eslint@8.36.0)(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))
-      file-loader:
-        specifier: ^6.2.0
-        version: 6.2.0(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))
-      fork-ts-checker-webpack-plugin:
-        specifier: ^7.2.6
-        version: 7.3.0(typescript@5.1.6)(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))
-      html-webpack-plugin:
-        specifier: ^5.5.0
-        version: 5.5.0(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))
-      html-webpack-tags-plugin:
-        specifier: ^3.0.1
-        version: 3.0.2(html-webpack-plugin@5.5.0(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)))(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))
-      husky:
-        specifier: ^7.0.0
-        version: 7.0.4
-      lint-staged:
-        specifier: ^12.1.4
-        version: 12.5.0
-      mini-css-extract-plugin:
-        specifier: ^2.6.0
-        version: 2.7.5(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))
-      node-emoji:
-        specifier: ^1.11.0
-        version: 1.11.0
-      oxlint:
-        specifier: ^0.13.0
-        version: 0.13.0
-      portfinder:
-        specifier: ^1.0.28
-        version: 1.0.32
-      postcss:
-        specifier: ^8.4.8
-        version: 8.4.21
-      postcss-loader:
-        specifier: ^6.2.1
-        version: 6.2.1(postcss@8.4.21)(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))
-      postcss-preset-env:
-        specifier: ^7.4.2
-        version: 7.8.3(postcss@8.4.21)
-      prettier:
-        specifier: ^3.0.1
-        version: 3.0.1
-      sass:
-        specifier: ^1.45.2
-        version: 1.59.3
-      sass-loader:
-        specifier: ^12.4.0
-        version: 12.6.0(sass@1.59.3)(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))
-      standard-version:
-        specifier: ^9.3.2
-        version: 9.5.0
-      swc-loader:
-        specifier: ^0.2.3
-        version: 0.2.3(@swc/core@1.3.84)(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))
-      terser:
-        specifier: ^5.7.0
-        version: 5.16.6
-      terser-webpack-plugin:
-        specifier: ^5.3.6
-        version: 5.3.7(@swc/core@1.3.84)(esbuild@0.15.18)(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))
-      thread-loader:
-        specifier: ^3.0.4
-        version: 3.0.4(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))
-      trash:
-        specifier: ^8.1.1
-        version: 8.1.1
-      ts-loader:
-        specifier: ^9.2.7
-        version: 9.4.2(typescript@5.1.6)(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))
-      ts-node:
-        specifier: ^10.9.1
-        version: 10.9.1(@swc/core@1.3.84)(@types/node@18.15.3)(typescript@5.1.6)
-      typescript:
-        specifier: ^5.1.6
-        version: 5.1.6
-      unplugin-vue-components:
-        specifier: ^0.24.1
-        version: 0.24.1(@babel/parser@7.26.3)(rollup@2.79.1)(vue@3.5.13(typescript@5.1.6))
-      vconsole:
-        specifier: ^3.15.0
-        version: 3.15.0
-      vue-loader:
-        specifier: ^17.2.2
-        version: 17.2.2(@vue/compiler-sfc@3.3.4)(vue@3.5.13(typescript@5.1.6))(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))
-      vue-style-loader:
-        specifier: ^4.1.3
-        version: 4.1.3
-      webpack:
-        specifier: ^5.68.0
-        version: 5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)
-      webpack-bundle-analyzer:
-        specifier: ^4.4.1
-        version: 4.8.0
-      webpack-cli:
-        specifier: ^4.9.2
-        version: 4.10.0(webpack-bundle-analyzer@4.8.0)(webpack-dev-server@4.13.1)(webpack@5.76.2)
-      webpack-dev-server:
-        specifier: ^4.7.2
-        version: 4.13.1(webpack-cli@4.10.0)(webpack@5.76.2)
-      webpack-merge:
-        specifier: ^5.7.3
-        version: 5.8.0
-      webpackbar:
-        specifier: ^5.0.2
-        version: 5.0.2(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))
-      windicss-webpack-plugin:
-        specifier: ^1.7.7
-        version: 1.7.8
-
-packages:
-
-  '@ampproject/remapping@2.2.0':
-    resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==}
-    engines: {node: '>=6.0.0'}
-
-  '@antfu/utils@0.7.2':
-    resolution: {integrity: sha512-vy9fM3pIxZmX07dL+VX1aZe7ynZ+YyB0jY+jE6r3hOK6GNY2t6W8rzpFC4tgpbXUYABkFQwgJq2XYXlxbXAI0g==}
-
-  '@babel/code-frame@7.18.6':
-    resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/compat-data@7.21.0':
-    resolution: {integrity: sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/core@7.21.3':
-    resolution: {integrity: sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/generator@7.21.3':
-    resolution: {integrity: sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-annotate-as-pure@7.18.6':
-    resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-builder-binary-assignment-operator-visitor@7.18.9':
-    resolution: {integrity: sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-compilation-targets@7.20.7':
-    resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-
-  '@babel/helper-create-class-features-plugin@7.21.0':
-    resolution: {integrity: sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-
-  '@babel/helper-create-regexp-features-plugin@7.21.0':
-    resolution: {integrity: sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-
-  '@babel/helper-define-polyfill-provider@0.3.3':
-    resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==}
-    peerDependencies:
-      '@babel/core': ^7.4.0-0
-
-  '@babel/helper-environment-visitor@7.18.9':
-    resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-explode-assignable-expression@7.18.6':
-    resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-function-name@7.21.0':
-    resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-hoist-variables@7.18.6':
-    resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-member-expression-to-functions@7.21.0':
-    resolution: {integrity: sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-module-imports@7.18.6':
-    resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-module-transforms@7.21.2':
-    resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-optimise-call-expression@7.18.6':
-    resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-plugin-utils@7.20.2':
-    resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-remap-async-to-generator@7.18.9':
-    resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-
-  '@babel/helper-replace-supers@7.20.7':
-    resolution: {integrity: sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-simple-access@7.20.2':
-    resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-skip-transparent-expression-wrappers@7.20.0':
-    resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-split-export-declaration@7.18.6':
-    resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-string-parser@7.19.4':
-    resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-string-parser@7.25.9':
-    resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-validator-identifier@7.19.1':
-    resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-validator-identifier@7.25.9':
-    resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-validator-option@7.21.0':
-    resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helper-wrap-function@7.20.5':
-    resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/helpers@7.21.0':
-    resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/highlight@7.18.6':
-    resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/parser@7.21.3':
-    resolution: {integrity: sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==}
-    engines: {node: '>=6.0.0'}
-    hasBin: true
-
-  '@babel/parser@7.26.3':
-    resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==}
-    engines: {node: '>=6.0.0'}
-    hasBin: true
-
-  '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6':
-    resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-
-  '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.20.7':
-    resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.13.0
-
-  '@babel/plugin-proposal-async-generator-functions@7.20.7':
-    resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-proposal-class-properties@7.18.6':
-    resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-proposal-class-static-block@7.21.0':
-    resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.12.0
-
-  '@babel/plugin-proposal-dynamic-import@7.18.6':
-    resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-proposal-export-namespace-from@7.18.9':
-    resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-proposal-json-strings@7.18.6':
-    resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-proposal-logical-assignment-operators@7.20.7':
-    resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6':
-    resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-proposal-numeric-separator@7.18.6':
-    resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-proposal-object-rest-spread@7.20.7':
-    resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-proposal-optional-catch-binding@7.18.6':
-    resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-proposal-optional-chaining@7.21.0':
-    resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-proposal-private-methods@7.18.6':
-    resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-proposal-private-property-in-object@7.21.0':
-    resolution: {integrity: sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-proposal-unicode-property-regex@7.18.6':
-    resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==}
-    engines: {node: '>=4'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-async-generators@7.8.4':
-    resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-class-properties@7.12.13':
-    resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-class-static-block@7.14.5':
-    resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-dynamic-import@7.8.3':
-    resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-export-namespace-from@7.8.3':
-    resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-import-assertions@7.20.0':
-    resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-json-strings@7.8.3':
-    resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-logical-assignment-operators@7.10.4':
-    resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3':
-    resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-numeric-separator@7.10.4':
-    resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-object-rest-spread@7.8.3':
-    resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-optional-catch-binding@7.8.3':
-    resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-optional-chaining@7.8.3':
-    resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-private-property-in-object@7.14.5':
-    resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-syntax-top-level-await@7.14.5':
-    resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-arrow-functions@7.20.7':
-    resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-async-to-generator@7.20.7':
-    resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-block-scoped-functions@7.18.6':
-    resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-block-scoping@7.21.0':
-    resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-classes@7.21.0':
-    resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-computed-properties@7.20.7':
-    resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-destructuring@7.21.3':
-    resolution: {integrity: sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-dotall-regex@7.18.6':
-    resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-duplicate-keys@7.18.9':
-    resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-exponentiation-operator@7.18.6':
-    resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-for-of@7.21.0':
-    resolution: {integrity: sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-function-name@7.18.9':
-    resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-literals@7.18.9':
-    resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-member-expression-literals@7.18.6':
-    resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-modules-amd@7.20.11':
-    resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-modules-commonjs@7.21.2':
-    resolution: {integrity: sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-modules-systemjs@7.20.11':
-    resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-modules-umd@7.18.6':
-    resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-named-capturing-groups-regex@7.20.5':
-    resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-
-  '@babel/plugin-transform-new-target@7.18.6':
-    resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-object-super@7.18.6':
-    resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-parameters@7.21.3':
-    resolution: {integrity: sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-property-literals@7.18.6':
-    resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-regenerator@7.20.5':
-    resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-reserved-words@7.18.6':
-    resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-runtime@7.21.0':
-    resolution: {integrity: sha512-ReY6pxwSzEU0b3r2/T/VhqMKg/AkceBT19X0UptA3/tYi5Pe2eXgEUH+NNMC5nok6c6XQz5tyVTUpuezRfSMSg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-shorthand-properties@7.18.6':
-    resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-spread@7.20.7':
-    resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-sticky-regex@7.18.6':
-    resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-template-literals@7.18.9':
-    resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-typeof-symbol@7.18.9':
-    resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-unicode-escapes@7.18.10':
-    resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/plugin-transform-unicode-regex@7.18.6':
-    resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/preset-env@7.20.2':
-    resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/preset-modules@0.1.5':
-    resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  '@babel/regjsgen@0.8.0':
-    resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==}
-
-  '@babel/runtime-corejs2@7.23.9':
-    resolution: {integrity: sha512-lwwDy5QfMkO2rmSz9AvLj6j2kWt5a4ulMi1t21vWQEO0kNCFslHoszat8reU/uigIQSUDF31zraZG/qMkcqAlw==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/runtime-corejs3@7.21.0':
-    resolution: {integrity: sha512-TDD4UJzos3JJtM+tHX+w2Uc+KWj7GV+VKKFdMVd2Rx8sdA19hcc3P3AHFYd5LVOw+pYuSd5lICC3gm52B6Rwxw==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/runtime@7.21.0':
-    resolution: {integrity: sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/runtime@7.22.6':
-    resolution: {integrity: sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/template@7.20.7':
-    resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/traverse@7.21.3':
-    resolution: {integrity: sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/types@7.21.3':
-    resolution: {integrity: sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==}
-    engines: {node: '>=6.9.0'}
-
-  '@babel/types@7.26.3':
-    resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==}
-    engines: {node: '>=6.9.0'}
-
-  '@codemirror/autocomplete@6.18.2':
-    resolution: {integrity: sha512-wJGylKtMFR/Ds6Gh01+OovXE/pncPiKZNNBKuC39pKnH+XK5d9+WsNqcrdxPjFPFTigRBqse0rfxw9UxrfyhPg==}
-    peerDependencies:
-      '@codemirror/language': ^6.0.0
-      '@codemirror/state': ^6.0.0
-      '@codemirror/view': ^6.0.0
-      '@lezer/common': ^1.0.0
-
-  '@codemirror/commands@6.7.1':
-    resolution: {integrity: sha512-llTrboQYw5H4THfhN4U3qCnSZ1SOJ60ohhz+SzU0ADGtwlc533DtklQP0vSFaQuCPDn3BPpOd1GbbnUtwNjsrw==}
-
-  '@codemirror/lang-angular@0.1.3':
-    resolution: {integrity: sha512-xgeWGJQQl1LyStvndWtruUvb4SnBZDAu/gvFH/ZU+c0W25tQR8e5hq7WTwiIY2dNxnf+49mRiGI/9yxIwB6f5w==}
-
-  '@codemirror/lang-cpp@6.0.2':
-    resolution: {integrity: sha512-6oYEYUKHvrnacXxWxYa6t4puTlbN3dgV662BDfSH8+MfjQjVmP697/KYTDOqpxgerkvoNm7q5wlFMBeX8ZMocg==}
-
-  '@codemirror/lang-css@6.3.0':
-    resolution: {integrity: sha512-CyR4rUNG9OYcXDZwMPvJdtb6PHbBDKUc/6Na2BIwZ6dKab1JQqKa4di+RNRY9Myn7JB81vayKwJeQ7jEdmNVDA==}
-
-  '@codemirror/lang-go@6.0.1':
-    resolution: {integrity: sha512-7fNvbyNylvqCphW9HD6WFnRpcDjr+KXX/FgqXy5H5ZS0eC5edDljukm/yNgYkwTsgp2busdod50AOTIy6Jikfg==}
-
-  '@codemirror/lang-html@6.4.9':
-    resolution: {integrity: sha512-aQv37pIMSlueybId/2PVSP6NPnmurFDVmZwzc7jszd2KAF8qd4VBbvNYPXWQq90WIARjsdVkPbw29pszmHws3Q==}
-
-  '@codemirror/lang-java@6.0.1':
-    resolution: {integrity: sha512-OOnmhH67h97jHzCuFaIEspbmsT98fNdhVhmA3zCxW0cn7l8rChDhZtwiwJ/JOKXgfm4J+ELxQihxaI7bj7mJRg==}
-
-  '@codemirror/lang-javascript@6.2.2':
-    resolution: {integrity: sha512-VGQfY+FCc285AhWuwjYxQyUQcYurWlxdKYT4bqwr3Twnd5wP5WSeu52t4tvvuWmljT4EmgEgZCqSieokhtY8hg==}
-
-  '@codemirror/lang-json@6.0.1':
-    resolution: {integrity: sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==}
-
-  '@codemirror/lang-less@6.0.2':
-    resolution: {integrity: sha512-EYdQTG22V+KUUk8Qq582g7FMnCZeEHsyuOJisHRft/mQ+ZSZ2w51NupvDUHiqtsOy7It5cHLPGfHQLpMh9bqpQ==}
-
-  '@codemirror/lang-liquid@6.2.1':
-    resolution: {integrity: sha512-J1Mratcm6JLNEiX+U2OlCDTysGuwbHD76XwuL5o5bo9soJtSbz2g6RU3vGHFyS5DC8rgVmFSzi7i6oBftm7tnA==}
-
-  '@codemirror/lang-markdown@6.3.1':
-    resolution: {integrity: sha512-y3sSPuQjBKZQbQwe3ZJKrSW6Silyl9PnrU/Mf0m2OQgIlPoSYTtOvEL7xs94SVMkb8f4x+SQFnzXPdX4Wk2lsg==}
-
-  '@codemirror/lang-php@6.0.1':
-    resolution: {integrity: sha512-ublojMdw/PNWa7qdN5TMsjmqkNuTBD3k6ndZ4Z0S25SBAiweFGyY68AS3xNcIOlb6DDFDvKlinLQ40vSLqf8xA==}
-
-  '@codemirror/lang-python@6.1.6':
-    resolution: {integrity: sha512-ai+01WfZhWqM92UqjnvorkxosZ2aq2u28kHvr+N3gu012XqY2CThD67JPMHnGceRfXPDBmn1HnyqowdpF57bNg==}
-
-  '@codemirror/lang-rust@6.0.1':
-    resolution: {integrity: sha512-344EMWFBzWArHWdZn/NcgkwMvZIWUR1GEBdwG8FEp++6o6vT6KL9V7vGs2ONsKxxFUPXKI0SPcWhyYyl2zPYxQ==}
-
-  '@codemirror/lang-sass@6.0.2':
-    resolution: {integrity: sha512-l/bdzIABvnTo1nzdY6U+kPAC51czYQcOErfzQ9zSm9D8GmNPD0WTW8st/CJwBTPLO8jlrbyvlSEcN20dc4iL0Q==}
-
-  '@codemirror/lang-sql@6.8.0':
-    resolution: {integrity: sha512-aGLmY4OwGqN3TdSx3h6QeA1NrvaYtF7kkoWR/+W7/JzB0gQtJ+VJxewlnE3+VImhA4WVlhmkJr109PefOOhjLg==}
-
-  '@codemirror/lang-vue@0.1.3':
-    resolution: {integrity: sha512-QSKdtYTDRhEHCfo5zOShzxCmqKJvgGrZwDQSdbvCRJ5pRLWBS7pD/8e/tH44aVQT6FKm0t6RVNoSUWHOI5vNug==}
-
-  '@codemirror/lang-wast@6.0.2':
-    resolution: {integrity: sha512-Imi2KTpVGm7TKuUkqyJ5NRmeFWF7aMpNiwHnLQe0x9kmrxElndyH0K6H/gXtWwY6UshMRAhpENsgfpSwsgmC6Q==}
-
-  '@codemirror/lang-xml@6.1.0':
-    resolution: {integrity: sha512-3z0blhicHLfwi2UgkZYRPioSgVTo9PV5GP5ducFH6FaHy0IAJRg+ixj5gTR1gnT/glAIC8xv4w2VL1LoZfs+Jg==}
-
-  '@codemirror/lang-yaml@6.1.1':
-    resolution: {integrity: sha512-HV2NzbK9bbVnjWxwObuZh5FuPCowx51mEfoFT9y3y+M37fA3+pbxx4I7uePuygFzDsAmCTwQSc/kXh/flab4uw==}
-
-  '@codemirror/language-data@6.5.1':
-    resolution: {integrity: sha512-0sWxeUSNlBr6OmkqybUTImADFUP0M3P0IiSde4nc24bz/6jIYzqYSgkOSLS+CBIoW1vU8Q9KUWXscBXeoMVC9w==}
-
-  '@codemirror/language@6.10.3':
-    resolution: {integrity: sha512-kDqEU5sCP55Oabl6E7m5N+vZRoc0iWqgDVhEKifcHzPzjqCegcO4amfrYVL9PmPZpl4G0yjkpTpUO/Ui8CzO8A==}
-
-  '@codemirror/legacy-modes@6.4.2':
-    resolution: {integrity: sha512-HsvWu08gOIIk303eZQCal4H4t65O/qp1V4ul4zVa3MHK5FJ0gz3qz3O55FIkm+aQUcshUOjBx38t2hPiJwW5/g==}
-
-  '@codemirror/lint@6.8.2':
-    resolution: {integrity: sha512-PDFG5DjHxSEjOXk9TQYYVjZDqlZTFaDBfhQixHnQOEVDDNHUbEh/hstAjcQJaA6FQdZTD1hquXTK0rVBLADR1g==}
-
-  '@codemirror/search@6.5.7':
-    resolution: {integrity: sha512-6+iLsXvITWKHYlkgHPCs/qiX4dNzn8N78YfhOFvPtPYCkuXqZq10rAfsUMhOq7O/1VjJqdXRflyExlfVcu/9VQ==}
-
-  '@codemirror/state@6.4.1':
-    resolution: {integrity: sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==}
-
-  '@codemirror/view@6.34.2':
-    resolution: {integrity: sha512-d6n0WFvL970A9Z+l9N2dO+Hk9ev4hDYQzIx+B9tCyBP0W5wPEszi1rhuyFesNSkLZzXbQE5FPH7F/z/TMJfoPA==}
-
-  '@commitlint/cli@16.3.0':
-    resolution: {integrity: sha512-P+kvONlfsuTMnxSwWE1H+ZcPMY3STFaHb2kAacsqoIkNx66O0T7sTpBxpxkMrFPyhkJiLJnJWMhk4bbvYD3BMA==}
-    engines: {node: '>=v12'}
-    hasBin: true
-
-  '@commitlint/config-conventional@16.2.4':
-    resolution: {integrity: sha512-av2UQJa3CuE5P0dzxj/o/B9XVALqYzEViHrMXtDrW9iuflrqCStWBAioijppj9URyz6ONpohJKAtSdgAOE0gkA==}
-    engines: {node: '>=v12'}
-
-  '@commitlint/config-validator@16.2.1':
-    resolution: {integrity: sha512-hogSe0WGg7CKmp4IfNbdNES3Rq3UEI4XRPB8JL4EPgo/ORq5nrGTVzxJh78omibNuB8Ho4501Czb1Er1MoDWpw==}
-    engines: {node: '>=v12'}
-
-  '@commitlint/config-validator@17.4.4':
-    resolution: {integrity: sha512-bi0+TstqMiqoBAQDvdEP4AFh0GaKyLFlPPEObgI29utoKEYoPQTvF0EYqIwYYLEoJYhj5GfMIhPHJkTJhagfeg==}
-    engines: {node: '>=v14'}
-
-  '@commitlint/ensure@16.2.1':
-    resolution: {integrity: sha512-/h+lBTgf1r5fhbDNHOViLuej38i3rZqTQnBTk+xEg+ehOwQDXUuissQ5GsYXXqI5uGy+261ew++sT4EA3uBJ+A==}
-    engines: {node: '>=v12'}
-
-  '@commitlint/execute-rule@16.2.1':
-    resolution: {integrity: sha512-oSls82fmUTLM6cl5V3epdVo4gHhbmBFvCvQGHBRdQ50H/690Uq1Dyd7hXMuKITCIdcnr9umyDkr8r5C6HZDF3g==}
-    engines: {node: '>=v12'}
-
-  '@commitlint/execute-rule@17.4.0':
-    resolution: {integrity: sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==}
-    engines: {node: '>=v14'}
-
-  '@commitlint/format@16.2.1':
-    resolution: {integrity: sha512-Yyio9bdHWmNDRlEJrxHKglamIk3d6hC0NkEUW6Ti6ipEh2g0BAhy8Od6t4vLhdZRa1I2n+gY13foy+tUgk0i1Q==}
-    engines: {node: '>=v12'}
-
-  '@commitlint/is-ignored@16.2.4':
-    resolution: {integrity: sha512-Lxdq9aOAYCOOOjKi58ulbwK/oBiiKz+7Sq0+/SpFIEFwhHkIVugvDvWjh2VRBXmRC/x5lNcjDcYEwS/uYUvlYQ==}
-    engines: {node: '>=v12'}
-
-  '@commitlint/lint@16.2.4':
-    resolution: {integrity: sha512-AUDuwOxb2eGqsXbTMON3imUGkc1jRdtXrbbohiLSCSk3jFVXgJLTMaEcr39pR00N8nE9uZ+V2sYaiILByZVmxQ==}
-    engines: {node: '>=v12'}
-
-  '@commitlint/load@16.3.0':
-    resolution: {integrity: sha512-3tykjV/iwbkv2FU9DG+NZ/JqmP0Nm3b7aDwgCNQhhKV5P74JAuByULkafnhn+zsFGypG1qMtI5u+BZoa9APm0A==}
-    engines: {node: '>=v12'}
-
-  '@commitlint/load@17.4.4':
-    resolution: {integrity: sha512-z6uFIQ7wfKX5FGBe1AkOF4l/ShOQsaa1ml/nLMkbW7R/xF8galGS7Zh0yHvzVp/srtfS0brC+0bUfQfmpMPFVQ==}
-    engines: {node: '>=v14'}
-
-  '@commitlint/message@16.2.1':
-    resolution: {integrity: sha512-2eWX/47rftViYg7a3axYDdrgwKv32mxbycBJT6OQY/MJM7SUfYNYYvbMFOQFaA4xIVZt7t2Alyqslbl6blVwWw==}
-    engines: {node: '>=v12'}
-
-  '@commitlint/parse@16.2.1':
-    resolution: {integrity: sha512-2NP2dDQNL378VZYioLrgGVZhWdnJO4nAxQl5LXwYb08nEcN+cgxHN1dJV8OLJ5uxlGJtDeR8UZZ1mnQ1gSAD/g==}
-    engines: {node: '>=v12'}
-
-  '@commitlint/read@16.2.1':
-    resolution: {integrity: sha512-tViXGuaxLTrw2r7PiYMQOFA2fueZxnnt0lkOWqKyxT+n2XdEMGYcI9ID5ndJKXnfPGPppD0w/IItKsIXlZ+alw==}
-    engines: {node: '>=v12'}
-
-  '@commitlint/resolve-extends@16.2.1':
-    resolution: {integrity: sha512-NbbCMPKTFf2J805kwfP9EO+vV+XvnaHRcBy6ud5dF35dxMsvdJqke54W3XazXF1ZAxC4a3LBy4i/GNVBAthsEg==}
-    engines: {node: '>=v12'}
-
-  '@commitlint/resolve-extends@17.4.4':
-    resolution: {integrity: sha512-znXr1S0Rr8adInptHw0JeLgumS11lWbk5xAWFVno+HUFVN45875kUtqjrI6AppmD3JI+4s0uZlqqlkepjJd99A==}
-    engines: {node: '>=v14'}
-
-  '@commitlint/rules@16.2.4':
-    resolution: {integrity: sha512-rK5rNBIN2ZQNQK+I6trRPK3dWa0MtaTN4xnwOma1qxa4d5wQMQJtScwTZjTJeallFxhOgbNOgr48AMHkdounVg==}
-    engines: {node: '>=v12'}
-
-  '@commitlint/to-lines@16.2.1':
-    resolution: {integrity: sha512-9/VjpYj5j1QeY3eiog1zQWY6axsdWAc0AonUUfyZ7B0MVcRI0R56YsHAfzF6uK/g/WwPZaoe4Lb1QCyDVnpVaQ==}
-    engines: {node: '>=v12'}
-
-  '@commitlint/top-level@16.2.1':
-    resolution: {integrity: sha512-lS6GSieHW9y6ePL73ied71Z9bOKyK+Ib9hTkRsB8oZFAyQZcyRwq2w6nIa6Fngir1QW51oKzzaXfJL94qwImyw==}
-    engines: {node: '>=v12'}
-
-  '@commitlint/types@16.2.1':
-    resolution: {integrity: sha512-7/z7pA7BM0i8XvMSBynO7xsB3mVQPUZbVn6zMIlp/a091XJ3qAXRXc+HwLYhiIdzzS5fuxxNIHZMGHVD4HJxdA==}
-    engines: {node: '>=v12'}
-
-  '@commitlint/types@17.4.4':
-    resolution: {integrity: sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==}
-    engines: {node: '>=v14'}
-
-  '@cspotcode/source-map-support@0.8.1':
-    resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
-    engines: {node: '>=12'}
-
-  '@css-render/plugin-bem@0.15.14':
-    resolution: {integrity: sha512-QK513CJ7yEQxm/P3EwsI+d+ha8kSOcjGvD6SevM41neEMxdULE+18iuQK6tEChAWMOQNQPLG/Rw3Khb69r5neg==}
-    peerDependencies:
-      css-render: ~0.15.14
-
-  '@css-render/vue3-ssr@0.15.14':
-    resolution: {integrity: sha512-//8027GSbxE9n3QlD73xFY6z4ZbHbvrOVB7AO6hsmrEzGbg+h2A09HboUyDgu+xsmj7JnvJD39Irt+2D0+iV8g==}
-    peerDependencies:
-      vue: ^3.0.11
-
-  '@csstools/postcss-cascade-layers@1.1.1':
-    resolution: {integrity: sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.2
-
-  '@csstools/postcss-color-function@1.1.1':
-    resolution: {integrity: sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.2
-
-  '@csstools/postcss-font-format-keywords@1.0.1':
-    resolution: {integrity: sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.2
-
-  '@csstools/postcss-hwb-function@1.0.2':
-    resolution: {integrity: sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.2
-
-  '@csstools/postcss-ic-unit@1.0.1':
-    resolution: {integrity: sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.2
-
-  '@csstools/postcss-is-pseudo-class@2.0.7':
-    resolution: {integrity: sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.2
-
-  '@csstools/postcss-nested-calc@1.0.0':
-    resolution: {integrity: sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.2
-
-  '@csstools/postcss-normalize-display-values@1.0.1':
-    resolution: {integrity: sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.2
-
-  '@csstools/postcss-oklab-function@1.1.1':
-    resolution: {integrity: sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.2
-
-  '@csstools/postcss-progressive-custom-properties@1.3.0':
-    resolution: {integrity: sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.3
-
-  '@csstools/postcss-stepped-value-functions@1.0.1':
-    resolution: {integrity: sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.2
-
-  '@csstools/postcss-text-decoration-shorthand@1.0.0':
-    resolution: {integrity: sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.2
-
-  '@csstools/postcss-trigonometric-functions@1.0.2':
-    resolution: {integrity: sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==}
-    engines: {node: ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.2
-
-  '@csstools/postcss-unset-value@1.0.2':
-    resolution: {integrity: sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.2
-
-  '@csstools/selector-specificity@2.1.1':
-    resolution: {integrity: sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw==}
-    engines: {node: ^14 || ^16 || >=18}
-    peerDependencies:
-      postcss: ^8.4
-      postcss-selector-parser: ^6.0.10
-
-  '@discoveryjs/json-ext@0.5.7':
-    resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==}
-    engines: {node: '>=10.0.0'}
-
-  '@emotion/hash@0.8.0':
-    resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==}
-
-  '@esbuild/android-arm64@0.17.12':
-    resolution: {integrity: sha512-WQ9p5oiXXYJ33F2EkE3r0FRDFVpEdcDiwNX3u7Xaibxfx6vQE0Sb8ytrfQsA5WO6kDn6mDfKLh6KrPBjvkk7xA==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [android]
-
-  '@esbuild/android-arm64@0.19.3':
-    resolution: {integrity: sha512-w+Akc0vv5leog550kjJV9Ru+MXMR2VuMrui3C61mnysim0gkFCPOUTAfzTP0qX+HpN9Syu3YA3p1hf3EPqObRw==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [android]
-
-  '@esbuild/android-arm@0.15.18':
-    resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==}
-    engines: {node: '>=12'}
-    cpu: [arm]
-    os: [android]
-
-  '@esbuild/android-arm@0.17.12':
-    resolution: {integrity: sha512-E/sgkvwoIfj4aMAPL2e35VnUJspzVYl7+M1B2cqeubdBhADV4uPon0KCc8p2G+LqSJ6i8ocYPCqY3A4GGq0zkQ==}
-    engines: {node: '>=12'}
-    cpu: [arm]
-    os: [android]
-
-  '@esbuild/android-arm@0.19.3':
-    resolution: {integrity: sha512-Lemgw4io4VZl9GHJmjiBGzQ7ONXRfRPHcUEerndjwiSkbxzrpq0Uggku5MxxrXdwJ+pTj1qyw4jwTu7hkPsgIA==}
-    engines: {node: '>=12'}
-    cpu: [arm]
-    os: [android]
-
-  '@esbuild/android-x64@0.17.12':
-    resolution: {integrity: sha512-m4OsaCr5gT+se25rFPHKQXARMyAehHTQAz4XX1Vk3d27VtqiX0ALMBPoXZsGaB6JYryCLfgGwUslMqTfqeLU0w==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [android]
-
-  '@esbuild/android-x64@0.19.3':
-    resolution: {integrity: sha512-FKQJKkK5MXcBHoNZMDNUAg1+WcZlV/cuXrWCoGF/TvdRiYS4znA0m5Il5idUwfxrE20bG/vU1Cr5e1AD6IEIjQ==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [android]
-
-  '@esbuild/darwin-arm64@0.17.12':
-    resolution: {integrity: sha512-O3GCZghRIx+RAN0NDPhyyhRgwa19MoKlzGonIb5hgTj78krqp9XZbYCvFr9N1eUxg0ZQEpiiZ4QvsOQwBpP+lg==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [darwin]
-
-  '@esbuild/darwin-arm64@0.19.3':
-    resolution: {integrity: sha512-kw7e3FXU+VsJSSSl2nMKvACYlwtvZB8RUIeVShIEY6PVnuZ3c9+L9lWB2nWeeKWNNYDdtL19foCQ0ZyUL7nqGw==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [darwin]
-
-  '@esbuild/darwin-x64@0.17.12':
-    resolution: {integrity: sha512-5D48jM3tW27h1qjaD9UNRuN+4v0zvksqZSPZqeSWggfMlsVdAhH3pwSfQIFJwcs9QJ9BRibPS4ViZgs3d2wsCA==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [darwin]
-
-  '@esbuild/darwin-x64@0.19.3':
-    resolution: {integrity: sha512-tPfZiwF9rO0jW6Jh9ipi58N5ZLoSjdxXeSrAYypy4psA2Yl1dAMhM71KxVfmjZhJmxRjSnb29YlRXXhh3GqzYw==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [darwin]
-
-  '@esbuild/freebsd-arm64@0.17.12':
-    resolution: {integrity: sha512-OWvHzmLNTdF1erSvrfoEBGlN94IE6vCEaGEkEH29uo/VoONqPnoDFfShi41Ew+yKimx4vrmmAJEGNoyyP+OgOQ==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [freebsd]
-
-  '@esbuild/freebsd-arm64@0.19.3':
-    resolution: {integrity: sha512-ERDyjOgYeKe0Vrlr1iLrqTByB026YLPzTytDTz1DRCYM+JI92Dw2dbpRHYmdqn6VBnQ9Bor6J8ZlNwdZdxjlSg==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [freebsd]
-
-  '@esbuild/freebsd-x64@0.17.12':
-    resolution: {integrity: sha512-A0Xg5CZv8MU9xh4a+7NUpi5VHBKh1RaGJKqjxe4KG87X+mTjDE6ZvlJqpWoeJxgfXHT7IMP9tDFu7IZ03OtJAw==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [freebsd]
-
-  '@esbuild/freebsd-x64@0.19.3':
-    resolution: {integrity: sha512-nXesBZ2Ad1qL+Rm3crN7NmEVJ5uvfLFPLJev3x1j3feCQXfAhoYrojC681RhpdOph8NsvKBBwpYZHR7W0ifTTA==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [freebsd]
-
-  '@esbuild/linux-arm64@0.17.12':
-    resolution: {integrity: sha512-cK3AjkEc+8v8YG02hYLQIQlOznW+v9N+OI9BAFuyqkfQFR+DnDLhEM5N8QRxAUz99cJTo1rLNXqRrvY15gbQUg==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [linux]
-
-  '@esbuild/linux-arm64@0.19.3':
-    resolution: {integrity: sha512-qXvYKmXj8GcJgWq3aGvxL/JG1ZM3UR272SdPU4QSTzD0eymrM7leiZH77pvY3UetCy0k1xuXZ+VPvoJNdtrsWQ==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [linux]
-
-  '@esbuild/linux-arm@0.17.12':
-    resolution: {integrity: sha512-WsHyJ7b7vzHdJ1fv67Yf++2dz3D726oO3QCu8iNYik4fb5YuuReOI9OtA+n7Mk0xyQivNTPbl181s+5oZ38gyA==}
-    engines: {node: '>=12'}
-    cpu: [arm]
-    os: [linux]
-
-  '@esbuild/linux-arm@0.19.3':
-    resolution: {integrity: sha512-zr48Cg/8zkzZCzDHNxXO/89bf9e+r4HtzNUPoz4GmgAkF1gFAFmfgOdCbR8zMbzFDGb1FqBBhdXUpcTQRYS1cQ==}
-    engines: {node: '>=12'}
-    cpu: [arm]
-    os: [linux]
-
-  '@esbuild/linux-ia32@0.17.12':
-    resolution: {integrity: sha512-jdOBXJqcgHlah/nYHnj3Hrnl9l63RjtQ4vn9+bohjQPI2QafASB5MtHAoEv0JQHVb/xYQTFOeuHnNYE1zF7tYw==}
-    engines: {node: '>=12'}
-    cpu: [ia32]
-    os: [linux]
-
-  '@esbuild/linux-ia32@0.19.3':
-    resolution: {integrity: sha512-7XlCKCA0nWcbvYpusARWkFjRQNWNGlt45S+Q18UeS///K6Aw8bB2FKYe9mhVWy/XLShvCweOLZPrnMswIaDXQA==}
-    engines: {node: '>=12'}
-    cpu: [ia32]
-    os: [linux]
-
-  '@esbuild/linux-loong64@0.15.18':
-    resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==}
-    engines: {node: '>=12'}
-    cpu: [loong64]
-    os: [linux]
-
-  '@esbuild/linux-loong64@0.17.12':
-    resolution: {integrity: sha512-GTOEtj8h9qPKXCyiBBnHconSCV9LwFyx/gv3Phw0pa25qPYjVuuGZ4Dk14bGCfGX3qKF0+ceeQvwmtI+aYBbVA==}
-    engines: {node: '>=12'}
-    cpu: [loong64]
-    os: [linux]
-
-  '@esbuild/linux-loong64@0.19.3':
-    resolution: {integrity: sha512-qGTgjweER5xqweiWtUIDl9OKz338EQqCwbS9c2Bh5jgEH19xQ1yhgGPNesugmDFq+UUSDtWgZ264st26b3de8A==}
-    engines: {node: '>=12'}
-    cpu: [loong64]
-    os: [linux]
-
-  '@esbuild/linux-mips64el@0.17.12':
-    resolution: {integrity: sha512-o8CIhfBwKcxmEENOH9RwmUejs5jFiNoDw7YgS0EJTF6kgPgcqLFjgoc5kDey5cMHRVCIWc6kK2ShUePOcc7RbA==}
-    engines: {node: '>=12'}
-    cpu: [mips64el]
-    os: [linux]
-
-  '@esbuild/linux-mips64el@0.19.3':
-    resolution: {integrity: sha512-gy1bFskwEyxVMFRNYSvBauDIWNggD6pyxUksc0MV9UOBD138dKTzr8XnM2R4mBsHwVzeuIH8X5JhmNs2Pzrx+A==}
-    engines: {node: '>=12'}
-    cpu: [mips64el]
-    os: [linux]
-
-  '@esbuild/linux-ppc64@0.17.12':
-    resolution: {integrity: sha512-biMLH6NR/GR4z+ap0oJYb877LdBpGac8KfZoEnDiBKd7MD/xt8eaw1SFfYRUeMVx519kVkAOL2GExdFmYnZx3A==}
-    engines: {node: '>=12'}
-    cpu: [ppc64]
-    os: [linux]
-
-  '@esbuild/linux-ppc64@0.19.3':
-    resolution: {integrity: sha512-UrYLFu62x1MmmIe85rpR3qou92wB9lEXluwMB/STDzPF9k8mi/9UvNsG07Tt9AqwPQXluMQ6bZbTzYt01+Ue5g==}
-    engines: {node: '>=12'}
-    cpu: [ppc64]
-    os: [linux]
-
-  '@esbuild/linux-riscv64@0.17.12':
-    resolution: {integrity: sha512-jkphYUiO38wZGeWlfIBMB72auOllNA2sLfiZPGDtOBb1ELN8lmqBrlMiucgL8awBw1zBXN69PmZM6g4yTX84TA==}
-    engines: {node: '>=12'}
-    cpu: [riscv64]
-    os: [linux]
-
-  '@esbuild/linux-riscv64@0.19.3':
-    resolution: {integrity: sha512-9E73TfyMCbE+1AwFOg3glnzZ5fBAFK4aawssvuMgCRqCYzE0ylVxxzjEfut8xjmKkR320BEoMui4o/t9KA96gA==}
-    engines: {node: '>=12'}
-    cpu: [riscv64]
-    os: [linux]
-
-  '@esbuild/linux-s390x@0.17.12':
-    resolution: {integrity: sha512-j3ucLdeY9HBcvODhCY4b+Ds3hWGO8t+SAidtmWu/ukfLLG/oYDMaA+dnugTVAg5fnUOGNbIYL9TOjhWgQB8W5g==}
-    engines: {node: '>=12'}
-    cpu: [s390x]
-    os: [linux]
-
-  '@esbuild/linux-s390x@0.19.3':
-    resolution: {integrity: sha512-LlmsbuBdm1/D66TJ3HW6URY8wO6IlYHf+ChOUz8SUAjVTuaisfuwCOAgcxo3Zsu3BZGxmI7yt//yGOxV+lHcEA==}
-    engines: {node: '>=12'}
-    cpu: [s390x]
-    os: [linux]
-
-  '@esbuild/linux-x64@0.17.12':
-    resolution: {integrity: sha512-uo5JL3cgaEGotaqSaJdRfFNSCUJOIliKLnDGWaVCgIKkHxwhYMm95pfMbWZ9l7GeW9kDg0tSxcy9NYdEtjwwmA==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [linux]
-
-  '@esbuild/linux-x64@0.19.3':
-    resolution: {integrity: sha512-ogV0+GwEmvwg/8ZbsyfkYGaLACBQWDvO0Kkh8LKBGKj9Ru8VM39zssrnu9Sxn1wbapA2qNS6BiLdwJZGouyCwQ==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [linux]
-
-  '@esbuild/netbsd-x64@0.17.12':
-    resolution: {integrity: sha512-DNdoRg8JX+gGsbqt2gPgkgb00mqOgOO27KnrWZtdABl6yWTST30aibGJ6geBq3WM2TIeW6COs5AScnC7GwtGPg==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [netbsd]
-
-  '@esbuild/netbsd-x64@0.19.3':
-    resolution: {integrity: sha512-o1jLNe4uzQv2DKXMlmEzf66Wd8MoIhLNO2nlQBHLtWyh2MitDG7sMpfCO3NTcoTMuqHjfufgUQDFRI5C+xsXQw==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [netbsd]
-
-  '@esbuild/openbsd-x64@0.17.12':
-    resolution: {integrity: sha512-aVsENlr7B64w8I1lhHShND5o8cW6sB9n9MUtLumFlPhG3elhNWtE7M1TFpj3m7lT3sKQUMkGFjTQBrvDDO1YWA==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [openbsd]
-
-  '@esbuild/openbsd-x64@0.19.3':
-    resolution: {integrity: sha512-AZJCnr5CZgZOdhouLcfRdnk9Zv6HbaBxjcyhq0StNcvAdVZJSKIdOiPB9az2zc06ywl0ePYJz60CjdKsQacp5Q==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [openbsd]
-
-  '@esbuild/sunos-x64@0.17.12':
-    resolution: {integrity: sha512-qbHGVQdKSwi0JQJuZznS4SyY27tYXYF0mrgthbxXrZI3AHKuRvU+Eqbg/F0rmLDpW/jkIZBlCO1XfHUBMNJ1pg==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [sunos]
-
-  '@esbuild/sunos-x64@0.19.3':
-    resolution: {integrity: sha512-Acsujgeqg9InR4glTRvLKGZ+1HMtDm94ehTIHKhJjFpgVzZG9/pIcWW/HA/DoMfEyXmANLDuDZ2sNrWcjq1lxw==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [sunos]
-
-  '@esbuild/win32-arm64@0.17.12':
-    resolution: {integrity: sha512-zsCp8Ql+96xXTVTmm6ffvoTSZSV2B/LzzkUXAY33F/76EajNw1m+jZ9zPfNJlJ3Rh4EzOszNDHsmG/fZOhtqDg==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [win32]
-
-  '@esbuild/win32-arm64@0.19.3':
-    resolution: {integrity: sha512-FSrAfjVVy7TifFgYgliiJOyYynhQmqgPj15pzLyJk8BUsnlWNwP/IAy6GAiB1LqtoivowRgidZsfpoYLZH586A==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [win32]
-
-  '@esbuild/win32-ia32@0.17.12':
-    resolution: {integrity: sha512-FfrFjR4id7wcFYOdqbDfDET3tjxCozUgbqdkOABsSFzoZGFC92UK7mg4JKRc/B3NNEf1s2WHxJ7VfTdVDPN3ng==}
-    engines: {node: '>=12'}
-    cpu: [ia32]
-    os: [win32]
-
-  '@esbuild/win32-ia32@0.19.3':
-    resolution: {integrity: sha512-xTScXYi12xLOWZ/sc5RBmMN99BcXp/eEf7scUC0oeiRoiT5Vvo9AycuqCp+xdpDyAU+LkrCqEpUS9fCSZF8J3Q==}
-    engines: {node: '>=12'}
-    cpu: [ia32]
-    os: [win32]
-
-  '@esbuild/win32-x64@0.17.12':
-    resolution: {integrity: sha512-JOOxw49BVZx2/5tW3FqkdjSD/5gXYeVGPDcB0lvap0gLQshkh1Nyel1QazC+wNxus3xPlsYAgqU1BUmrmCvWtw==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [win32]
-
-  '@esbuild/win32-x64@0.19.3':
-    resolution: {integrity: sha512-FbUN+0ZRXsypPyWE2IwIkVjDkDnJoMJARWOcFZn4KPPli+QnKqF0z1anvfaYe3ev5HFCpRDLLBDHyOALLppWHw==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [win32]
-
-  '@eslint-community/eslint-utils@4.3.0':
-    resolution: {integrity: sha512-v3oplH6FYCULtFuCeqyuTd9D2WKO937Dxdq+GmHOLL72TTRriLxz2VLlNfkZRsvj6PKnOPAtuT6dwrs/pA5DvA==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    peerDependencies:
-      eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
-
-  '@eslint-community/eslint-utils@4.4.0':
-    resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    peerDependencies:
-      eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
-
-  '@eslint-community/regexpp@4.4.0':
-    resolution: {integrity: sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==}
-    engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
-
-  '@eslint/eslintrc@2.0.1':
-    resolution: {integrity: sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
-  '@eslint/js@8.36.0':
-    resolution: {integrity: sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
-  '@humanwhocodes/config-array@0.11.8':
-    resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==}
-    engines: {node: '>=10.10.0'}
-
-  '@humanwhocodes/module-importer@1.0.1':
-    resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
-    engines: {node: '>=12.22'}
-
-  '@humanwhocodes/object-schema@1.2.1':
-    resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
-
-  '@hutson/parse-repository-url@3.0.2':
-    resolution: {integrity: sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==}
-    engines: {node: '>=6.9.0'}
-
-  '@intlify/core-base@9.9.1':
-    resolution: {integrity: sha512-qsV15dg7jNX2faBRyKMgZS8UcFJViWEUPLdzZ9UR0kQZpFVeIpc0AG7ZOfeP7pX2T9SQ5jSiorq/tii9nkkafA==}
-    engines: {node: '>= 16'}
-
-  '@intlify/message-compiler@9.9.1':
-    resolution: {integrity: sha512-zTvP6X6HeumHOXuAE1CMMsV6tTX+opKMOxO1OHTCg5N5Sm/F7d8o2jdT6W6L5oHUsJ/vvkGefHIs7Q3hfowmsA==}
-    engines: {node: '>= 16'}
-
-  '@intlify/shared@9.9.1':
-    resolution: {integrity: sha512-b3Pta1nwkz5rGq434v0psHwEwHGy1pYCttfcM22IE//K9owbpkEvFptx9VcuRAxjQdrO2If249cmDDjBu5wMDA==}
-    engines: {node: '>= 16'}
-
-  '@jridgewell/gen-mapping@0.1.1':
-    resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==}
-    engines: {node: '>=6.0.0'}
-
-  '@jridgewell/gen-mapping@0.3.2':
-    resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==}
-    engines: {node: '>=6.0.0'}
-
-  '@jridgewell/resolve-uri@3.1.0':
-    resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
-    engines: {node: '>=6.0.0'}
-
-  '@jridgewell/set-array@1.1.2':
-    resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
-    engines: {node: '>=6.0.0'}
-
-  '@jridgewell/source-map@0.3.2':
-    resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==}
-
-  '@jridgewell/sourcemap-codec@1.4.14':
-    resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
-
-  '@jridgewell/sourcemap-codec@1.5.0':
-    resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
-
-  '@jridgewell/trace-mapping@0.3.17':
-    resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==}
-
-  '@jridgewell/trace-mapping@0.3.9':
-    resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
-
-  '@juggle/resize-observer@3.4.0':
-    resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==}
-
-  '@leichtgewicht/ip-codec@2.0.4':
-    resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==}
-
-  '@lezer/common@1.2.3':
-    resolution: {integrity: sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==}
-
-  '@lezer/cpp@1.1.2':
-    resolution: {integrity: sha512-macwKtyeUO0EW86r3xWQCzOV9/CF8imJLpJlPv3sDY57cPGeUZ8gXWOWNlJr52TVByMV3PayFQCA5SHEERDmVQ==}
-
-  '@lezer/css@1.1.9':
-    resolution: {integrity: sha512-TYwgljcDv+YrV0MZFFvYFQHCfGgbPMR6nuqLabBdmZoFH3EP1gvw8t0vae326Ne3PszQkbXfVBjCnf3ZVCr0bA==}
-
-  '@lezer/go@1.0.0':
-    resolution: {integrity: sha512-co9JfT3QqX1YkrMmourYw2Z8meGC50Ko4d54QEcQbEYpvdUvN4yb0NBZdn/9ertgvjsySxHsKzH3lbm3vqJ4Jw==}
-
-  '@lezer/highlight@1.2.1':
-    resolution: {integrity: sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==}
-
-  '@lezer/html@1.3.10':
-    resolution: {integrity: sha512-dqpT8nISx/p9Do3AchvYGV3qYc4/rKr3IBZxlHmpIKam56P47RSHkSF5f13Vu9hebS1jM0HmtJIwLbWz1VIY6w==}
-
-  '@lezer/java@1.1.3':
-    resolution: {integrity: sha512-yHquUfujwg6Yu4Fd1GNHCvidIvJwi/1Xu2DaKl/pfWIA2c1oXkVvawH3NyXhCaFx4OdlYBVX5wvz2f7Aoa/4Xw==}
-
-  '@lezer/javascript@1.4.19':
-    resolution: {integrity: sha512-j44kbR1QL26l6dMunZ1uhKBFteVGLVCBGNUD2sUaMnic+rbTviVuoK0CD1l9FTW31EueWvFFswCKMH7Z+M3JRA==}
-
-  '@lezer/json@1.0.2':
-    resolution: {integrity: sha512-xHT2P4S5eeCYECyKNPhr4cbEL9tc8w83SPwRC373o9uEdrvGKTZoJVAGxpOsZckMlEh9W23Pc72ew918RWQOBQ==}
-
-  '@lezer/lr@1.4.2':
-    resolution: {integrity: sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==}
-
-  '@lezer/markdown@1.3.2':
-    resolution: {integrity: sha512-Wu7B6VnrKTbBEohqa63h5vxXjiC4pO5ZQJ/TDbhJxPQaaIoRD/6UVDhSDtVsCwVZV12vvN9KxuLL3ATMnlG0oQ==}
-
-  '@lezer/php@1.0.2':
-    resolution: {integrity: sha512-GN7BnqtGRpFyeoKSEqxvGvhJQiI4zkgmYnDk/JIyc7H7Ifc1tkPnUn/R2R8meH3h/aBf5rzjvU8ZQoyiNDtDrA==}
-
-  '@lezer/python@1.1.14':
-    resolution: {integrity: sha512-ykDOb2Ti24n76PJsSa4ZoDF0zH12BSw1LGfQXCYJhJyOGiFTfGaX0Du66Ze72R+u/P35U+O6I9m8TFXov1JzsA==}
-
-  '@lezer/rust@1.0.2':
-    resolution: {integrity: sha512-Lz5sIPBdF2FUXcWeCu1//ojFAZqzTQNRga0aYv6dYXqJqPfMdCAI0NzajWUd4Xijj1IKJLtjoXRPMvTKWBcqKg==}
-
-  '@lezer/sass@1.0.7':
-    resolution: {integrity: sha512-8HLlOkuX/SMHOggI2DAsXUw38TuURe+3eQ5hiuk9QmYOUyC55B1dYEIMkav5A4IELVaW4e1T4P9WRiI5ka4mdw==}
-
-  '@lezer/xml@1.0.5':
-    resolution: {integrity: sha512-VFouqOzmUWfIg+tfmpcdV33ewtK+NSwd4ngSe1aG7HFb4BN0ExyY1b8msp+ndFrnlG4V4iC8yXacjFtrwERnaw==}
-
-  '@lezer/yaml@1.0.3':
-    resolution: {integrity: sha512-GuBLekbw9jDBDhGur82nuwkxKQ+a3W5H0GfaAthDXcAu+XdpS43VlnxA9E9hllkpSP5ellRDKjLLj7Lu9Wr6xA==}
-
-  '@mapbox/node-pre-gyp@1.0.11':
-    resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==}
-    hasBin: true
-
-  '@nodelib/fs.scandir@2.1.5':
-    resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
-    engines: {node: '>= 8'}
-
-  '@nodelib/fs.stat@2.0.5':
-    resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
-    engines: {node: '>= 8'}
-
-  '@nodelib/fs.walk@1.2.8':
-    resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
-    engines: {node: '>= 8'}
-
-  '@oxlint/darwin-arm64@0.13.0':
-    resolution: {integrity: sha512-TFVi4gWKmn4oUoaS6AUU6cvlA+xLCIHQWA27LdnyfmRDerxHSWaG4yPNq9bvhDAeeEWqid5+TR5ndu4WRhEr5A==}
-    cpu: [arm64]
-    os: [darwin]
-
-  '@oxlint/darwin-x64@0.13.0':
-    resolution: {integrity: sha512-ihbegvRXcED2Bgz9Lt4AGFoNfvh/tUZPrFR5DZ3Hn8muab+PEFfXXXKcelSDpTB4za5bDXz6dZcAUUfQUWPwxg==}
-    cpu: [x64]
-    os: [darwin]
-
-  '@oxlint/linux-arm64-gnu@0.13.0':
-    resolution: {integrity: sha512-k4r03/29d+IdcT30B6H5TpWT7bFrkqbRrFQ5VS6GX5ISN0yRdagu4Q08sDimCTTXvg5H9Z/sHmxbw7tbjGGW4w==}
-    cpu: [arm64]
-    os: [linux]
-    libc: [glibc]
-
-  '@oxlint/linux-arm64-musl@0.13.0':
-    resolution: {integrity: sha512-m+LFHCwNydIrGHDz1VPTaQsZewaqYadKhzyjsw4TRf0g5fxeEC4tkv6MI80D2S//QO6DJi8VcnPfVqGWoS5vQQ==}
-    cpu: [arm64]
-    os: [linux]
-    libc: [musl]
-
-  '@oxlint/linux-x64-gnu@0.13.0':
-    resolution: {integrity: sha512-Kixb9MXi5muDKsrNo5k7TANEE3DuUUSKIgoBN68LbX4n2owjCsq/gnzVjQ/rDK0vFn0JQMxMXWjBZvV64ybXMQ==}
-    cpu: [x64]
-    os: [linux]
-    libc: [glibc]
-
-  '@oxlint/linux-x64-musl@0.13.0':
-    resolution: {integrity: sha512-wCCsesDf05G0bjXMrxAvH36Cl4q0oavR3fo4N5NJyyrRdZ+feAZSsfaHRpvlqkJyUM3vhP6emKrXzIN5fp22dw==}
-    cpu: [x64]
-    os: [linux]
-    libc: [musl]
-
-  '@oxlint/win32-arm64@0.13.0':
-    resolution: {integrity: sha512-xO6oZ+0yjYuEviKqRUVWMuYvzYqJDHd0IcBss8J2o45OS9SH+mNNk5gZJm9uKbDdmFZcDn2OlZxAiygVMxHt9g==}
-    cpu: [arm64]
-    os: [win32]
-
-  '@oxlint/win32-x64@0.13.0':
-    resolution: {integrity: sha512-NiiaQ/AD1ILQ8cXRxdjE/dRMCRABFbelSYqoFrrklV2Y7hwtF0Law48GvM5ysQbz/NHVpQpnVNQOQ3cevywn3w==}
-    cpu: [x64]
-    os: [win32]
-
-  '@pkgr/utils@2.4.2':
-    resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==}
-    engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
-
-  '@polka/url@1.0.0-next.21':
-    resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==}
-
-  '@rollup/plugin-babel@5.3.1':
-    resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==}
-    engines: {node: '>= 10.0.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-      '@types/babel__core': ^7.1.9
-      rollup: ^1.20.0||^2.0.0
-    peerDependenciesMeta:
-      '@types/babel__core':
-        optional: true
-
-  '@rollup/plugin-commonjs@22.0.2':
-    resolution: {integrity: sha512-//NdP6iIwPbMTcazYsiBMbJW7gfmpHom33u1beiIoHDEM0Q9clvtQB1T0efvMqHeKsGohiHo97BCPCkBXdscwg==}
-    engines: {node: '>= 12.0.0'}
-    peerDependencies:
-      rollup: ^2.68.0
-
-  '@rollup/plugin-json@4.1.0':
-    resolution: {integrity: sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==}
-    peerDependencies:
-      rollup: ^1.20.0 || ^2.0.0
-
-  '@rollup/plugin-node-resolve@13.3.0':
-    resolution: {integrity: sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==}
-    engines: {node: '>= 10.0.0'}
-    peerDependencies:
-      rollup: ^2.42.0
-
-  '@rollup/plugin-typescript@8.5.0':
-    resolution: {integrity: sha512-wMv1/scv0m/rXx21wD2IsBbJFba8wGF3ErJIr6IKRfRj49S85Lszbxb4DCo8iILpluTjk2GAAu9CoZt4G3ppgQ==}
-    engines: {node: '>=8.0.0'}
-    peerDependencies:
-      rollup: ^2.14.0
-      tslib: '*'
-      typescript: '>=3.7.0'
-    peerDependenciesMeta:
-      tslib:
-        optional: true
-
-  '@rollup/pluginutils@3.1.0':
-    resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==}
-    engines: {node: '>= 8.0.0'}
-    peerDependencies:
-      rollup: ^1.20.0||^2.0.0
-
-  '@rollup/pluginutils@4.2.1':
-    resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==}
-    engines: {node: '>= 8.0.0'}
-
-  '@rollup/pluginutils@5.0.2':
-    resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==}
-    engines: {node: '>=14.0.0'}
-    peerDependencies:
-      rollup: ^1.20.0||^2.0.0||^3.0.0
-    peerDependenciesMeta:
-      rollup:
-        optional: true
-
-  '@rushstack/eslint-patch@1.2.0':
-    resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==}
-
-  '@sindresorhus/chunkify@0.2.0':
-    resolution: {integrity: sha512-mOAiwqu+bIIkNFDCXFJxZEmF9p9WHfSBbpLLmgysYnNkEs7aA0/AvU9+6zLHFqI7JnqdqwAuWu8CbGwGIszRdw==}
-    engines: {node: '>=12'}
-
-  '@sindresorhus/df@1.0.1':
-    resolution: {integrity: sha512-1Hyp7NQnD/u4DSxR2DGW78TF9k7R0wZ8ev0BpMAIzA6yTQSHqNb5wTuvtcPYf4FWbVse2rW7RgDsyL8ua2vXHw==}
-    engines: {node: '>=0.10.0'}
-
-  '@sindresorhus/df@3.1.1':
-    resolution: {integrity: sha512-SME/vtXaJcnQ/HpeV6P82Egy+jThn11IKfwW8+/XVoRD0rmPHVTeKMtww1oWdVnMykzVPjmrDN9S8NBndPEHCQ==}
-    engines: {node: '>=8'}
-
-  '@socket.io/component-emitter@3.1.0':
-    resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==}
-
-  '@soda/friendly-errors-webpack-plugin@1.8.1':
-    resolution: {integrity: sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==}
-    engines: {node: '>=8.0.0'}
-    peerDependencies:
-      webpack: ^4.0.0 || ^5.0.0
-
-  '@stroncium/procfs@1.2.1':
-    resolution: {integrity: sha512-X1Iui3FUNZP18EUvysTHxt+Avu2nlVzyf90YM8OYgP6SGzTzzX/0JgObfO1AQQDzuZtNNz29bVh8h5R97JrjxA==}
-    engines: {node: '>=8'}
-
-  '@swc/core-darwin-arm64@1.3.84':
-    resolution: {integrity: sha512-mqK0buOo+toF2HoJ/gWj2ApZbvbIiNq3mMwSTHCYJHlQFQfoTWnl9aaD5GSO4wfNFVYfEZ1R259o5uv5NlVtoA==}
-    engines: {node: '>=10'}
-    cpu: [arm64]
-    os: [darwin]
-
-  '@swc/core-darwin-x64@1.3.84':
-    resolution: {integrity: sha512-cyuQZz62C43EDZqtnptUTlfDvAjgG3qu139m5zsfIK6ltXA5inKFbDWV3a/M5c18dFzA2Xh21Q46XZezmtQ9Tg==}
-    engines: {node: '>=10'}
-    cpu: [x64]
-    os: [darwin]
-
-  '@swc/core-linux-arm-gnueabihf@1.3.84':
-    resolution: {integrity: sha512-dmt/ECQrp3ZPWnK27p4E4xRIRHOoJhgGvxC5t5YaWzN20KcxE9ykEY2oLGSoeceM/A+4D11aRYGwF/EM7yOkvA==}
-    engines: {node: '>=10'}
-    cpu: [arm]
-    os: [linux]
-
-  '@swc/core-linux-arm64-gnu@1.3.84':
-    resolution: {integrity: sha512-PgVfrI3NVg2z/oeg3GWLb9rFLMqidbdPwVH5nRyHVP2RX/BWP6qfnYfG+gJv4qrKzIldb9TyCGH7y8VWctKLxw==}
-    engines: {node: '>=10'}
-    cpu: [arm64]
-    os: [linux]
-    libc: [glibc]
-
-  '@swc/core-linux-arm64-musl@1.3.84':
-    resolution: {integrity: sha512-hcuEa8/vin4Ns0P+FpcDHQ4f3jmhgGKQhqw0w+TovPSVTIXr+nrFQ2AGhs9nAxS6tSQ77C53Eb5YRpK8ToFo1A==}
-    engines: {node: '>=10'}
-    cpu: [arm64]
-    os: [linux]
-    libc: [musl]
-
-  '@swc/core-linux-x64-gnu@1.3.84':
-    resolution: {integrity: sha512-IvyimSbwGdu21jBBEqR1Up8Jhvl8kIAf1k3e5Oy8oRfgojdUfmW1EIwgGdoUeyQ1VHlfquiWaRGfsnHQUKl35g==}
-    engines: {node: '>=10'}
-    cpu: [x64]
-    os: [linux]
-    libc: [glibc]
-
-  '@swc/core-linux-x64-musl@1.3.84':
-    resolution: {integrity: sha512-hdgVU/O5ufDCe+p5RtCjU7PRNwd0WM+eWJS+GNY4QWL6O8y2VLM+i4+6YzwSUjeBk0xd+1YElMxbqz7r5tSZhw==}
-    engines: {node: '>=10'}
-    cpu: [x64]
-    os: [linux]
-    libc: [musl]
-
-  '@swc/core-win32-arm64-msvc@1.3.84':
-    resolution: {integrity: sha512-rzH6k2BF0BFOFhUTD+bh0oCiUCZjFfDfoZoYNN/CM0qbtjAcFH21hzMh/EH8ZaXq8k/iQmUNNa5MPNPZ4SOMNw==}
-    engines: {node: '>=10'}
-    cpu: [arm64]
-    os: [win32]
-
-  '@swc/core-win32-ia32-msvc@1.3.84':
-    resolution: {integrity: sha512-Y+Dk7VLLVwwsAzoDmjkNW/sTmSPl9PGr4Mj1nhc5A2NNxZ+hz4SxFMclacDI03SC5ikK8Qh6WOoE/+nwUDa3uA==}
-    engines: {node: '>=10'}
-    cpu: [ia32]
-    os: [win32]
-
-  '@swc/core-win32-x64-msvc@1.3.84':
-    resolution: {integrity: sha512-WmpaosqCWMX7DArLdU8AJcj96hy0PKlYh1DaMVikSrrDHbJm2dZ8rd27IK3qUB8DgPkrDYHmLAKNZ+z3gWXgRQ==}
-    engines: {node: '>=10'}
-    cpu: [x64]
-    os: [win32]
-
-  '@swc/core@1.3.84':
-    resolution: {integrity: sha512-UPKUiDwG7HOdPfOb1VFeEJ76JDgU2w80JLewzx6tb0fk9TIjhr9yxKBzPbzc/QpjGHDu5iaEuNeZcu27u4j63g==}
-    engines: {node: '>=10'}
-    peerDependencies:
-      '@swc/helpers': ^0.5.0
-    peerDependenciesMeta:
-      '@swc/helpers':
-        optional: true
-
-  '@swc/types@0.1.4':
-    resolution: {integrity: sha512-z/G02d+59gyyUb7KYhKi9jOhicek6QD2oMaotUyG+lUkybpXoV49dY9bj7Ah5Q+y7knK2jU67UTX9FyfGzaxQg==}
-
-  '@tootallnate/once@2.0.0':
-    resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
-    engines: {node: '>= 10'}
-
-  '@trysound/sax@0.2.0':
-    resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
-    engines: {node: '>=10.13.0'}
-
-  '@tsconfig/node10@1.0.9':
-    resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==}
-
-  '@tsconfig/node12@1.0.11':
-    resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
-
-  '@tsconfig/node14@1.0.3':
-    resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
-
-  '@tsconfig/node16@1.0.3':
-    resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==}
-
-  '@types/body-parser@1.19.2':
-    resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==}
-
-  '@types/bonjour@3.5.10':
-    resolution: {integrity: sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==}
-
-  '@types/connect-history-api-fallback@1.3.5':
-    resolution: {integrity: sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==}
-
-  '@types/connect@3.4.35':
-    resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==}
-
-  '@types/eslint-scope@3.7.4':
-    resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==}
-
-  '@types/eslint@8.21.2':
-    resolution: {integrity: sha512-EMpxUyystd3uZVByZap1DACsMXvb82ypQnGn89e1Y0a+LYu3JJscUd/gqhRsVFDkaD2MIiWo0MT8EfXr3DGRKw==}
-
-  '@types/estree@0.0.39':
-    resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==}
-
-  '@types/estree@0.0.51':
-    resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==}
-
-  '@types/estree@1.0.0':
-    resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==}
-
-  '@types/express-serve-static-core@4.17.33':
-    resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==}
-
-  '@types/express@4.17.17':
-    resolution: {integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==}
-
-  '@types/fabric@5.3.3':
-    resolution: {integrity: sha512-O+lGsf5MXhkr4CZhZBE2foxIU1yZklTwhmZxFbTeBNWEqrvwGeq4c8TWJBKAqiISYRu7bDIMLZUPacFodbVD0g==}
-
-  '@types/html-minifier-terser@6.1.0':
-    resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==}
-
-  '@types/http-proxy@1.17.10':
-    resolution: {integrity: sha512-Qs5aULi+zV1bwKAg5z1PWnDXWmsn+LxIvUGv6E2+OOMYhclZMO+OXd9pYVf2gLykf2I7IV2u7oTHwChPNsvJ7g==}
-
-  '@types/json-schema@7.0.11':
-    resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==}
-
-  '@types/json5@0.0.29':
-    resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
-
-  '@types/katex@0.16.7':
-    resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==}
-
-  '@types/linkify-it@5.0.0':
-    resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==}
-
-  '@types/lodash-es@4.17.12':
-    resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==}
-
-  '@types/lodash@4.17.13':
-    resolution: {integrity: sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==}
-
-  '@types/markdown-it@14.1.2':
-    resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==}
-
-  '@types/mdurl@2.0.0':
-    resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==}
-
-  '@types/mime@3.0.1':
-    resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==}
-
-  '@types/minimist@1.2.2':
-    resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==}
-
-  '@types/node@18.15.3':
-    resolution: {integrity: sha512-p6ua9zBxz5otCmbpb5D3U4B5Nanw6Pk3PPyX05xnxbB/fRv71N7CPmORg7uAD5P70T0xmx1pzAx/FUfa5X+3cw==}
-
-  '@types/normalize-package-data@2.4.1':
-    resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
-
-  '@types/parse-json@4.0.0':
-    resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==}
-
-  '@types/qs@6.9.7':
-    resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==}
-
-  '@types/range-parser@1.2.4':
-    resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==}
-
-  '@types/resolve@1.17.1':
-    resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==}
-
-  '@types/retry@0.12.0':
-    resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==}
-
-  '@types/semver@7.3.13':
-    resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==}
-
-  '@types/serve-index@1.9.1':
-    resolution: {integrity: sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==}
-
-  '@types/serve-static@1.15.1':
-    resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==}
-
-  '@types/sockjs@0.3.33':
-    resolution: {integrity: sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==}
-
-  '@types/ssh2@1.11.19':
-    resolution: {integrity: sha512-ydbQAqEcdNVy2t1w7dMh6eWMr+iOgtEkqM/3K9RMijMaok/ER7L8GW6PwsOypHCN++M+c8S/UR9SgMqNIFstbA==}
-
-  '@types/video.js@7.3.52':
-    resolution: {integrity: sha512-WFj/HkNVCfkchXDeDU0QbimC356FB5vva3g5mgsjk8n3UMKqP9S522rQAmu9LGPiCmShZRPuAlkXmbp5WId6ow==}
-
-  '@types/web-bluetooth@0.0.20':
-    resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==}
-
-  '@types/ws@8.5.4':
-    resolution: {integrity: sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==}
-
-  '@typescript-eslint/eslint-plugin@5.62.0':
-    resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    peerDependencies:
-      '@typescript-eslint/parser': ^5.0.0
-      eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
-      typescript: '*'
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-
-  '@typescript-eslint/parser@5.62.0':
-    resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    peerDependencies:
-      eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
-      typescript: '*'
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-
-  '@typescript-eslint/scope-manager@5.62.0':
-    resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
-  '@typescript-eslint/type-utils@5.62.0':
-    resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    peerDependencies:
-      eslint: '*'
-      typescript: '*'
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-
-  '@typescript-eslint/types@5.62.0':
-    resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
-  '@typescript-eslint/typescript-estree@5.62.0':
-    resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    peerDependencies:
-      typescript: '*'
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-
-  '@typescript-eslint/utils@5.62.0':
-    resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    peerDependencies:
-      eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
-
-  '@typescript-eslint/visitor-keys@5.62.0':
-    resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
-  '@vavt/util@2.1.0':
-    resolution: {integrity: sha512-YIfAvArSFVXmWvoF+DEGD0FhkhVNcCtVWWkfYtj76eSrwHh/wuEEFhiEubg1XLNM3tChO8FH8xJCT/hnizjgFQ==}
-
-  '@vicons/ionicons5@0.12.0':
-    resolution: {integrity: sha512-Iy1EUVRpX0WWxeu1VIReR1zsZLMc4fqpt223czR+Rpnrwu7pt46nbnC2ycO7ItI/uqDLJxnbcMC7FujKs9IfFA==}
-
-  '@videojs/http-streaming@3.0.2':
-    resolution: {integrity: sha512-iSZkwTLGg3Rx78ypCCq/GsMME89ElNvU02xj7reCE2PlITMQjyYsER1w5AsySvT1A694u5yuSzEzLLGF1cL4pg==}
-    engines: {node: '>=8', npm: '>=5'}
-    peerDependencies:
-      video.js: ^7 || ^8
-
-  '@videojs/vhs-utils@3.0.5':
-    resolution: {integrity: sha512-PKVgdo8/GReqdx512F+ombhS+Bzogiofy1LgAj4tN8PfdBx3HSS7V5WfJotKTqtOWGwVfSWsrYN/t09/DSryrw==}
-    engines: {node: '>=8', npm: '>=5'}
-
-  '@videojs/vhs-utils@4.0.0':
-    resolution: {integrity: sha512-xJp7Yd4jMLwje2vHCUmi8MOUU76nxiwII3z4Eg3Ucb+6rrkFVGosrXlMgGnaLjq724j3wzNElRZ71D/CKrTtxg==}
-    engines: {node: '>=8', npm: '>=5'}
-
-  '@videojs/xhr@2.6.0':
-    resolution: {integrity: sha512-7J361GiN1tXpm+gd0xz2QWr3xNWBE+rytvo8J3KuggFaLg+U37gZQ2BuPLcnkfGffy2e+ozY70RHC8jt7zjA6Q==}
-
-  '@vue/compiler-core@3.3.4':
-    resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==}
-
-  '@vue/compiler-core@3.5.13':
-    resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==}
-
-  '@vue/compiler-dom@3.3.4':
-    resolution: {integrity: sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==}
-
-  '@vue/compiler-dom@3.5.13':
-    resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==}
-
-  '@vue/compiler-sfc@3.3.4':
-    resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==}
-
-  '@vue/compiler-sfc@3.5.13':
-    resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==}
-
-  '@vue/compiler-ssr@3.3.4':
-    resolution: {integrity: sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==}
-
-  '@vue/compiler-ssr@3.5.13':
-    resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==}
-
-  '@vue/devtools-api@6.5.0':
-    resolution: {integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==}
-
-  '@vue/eslint-config-prettier@8.0.0':
-    resolution: {integrity: sha512-55dPqtC4PM/yBjhAr+yEw6+7KzzdkBuLmnhBrDfp4I48+wy+Giqqj9yUr5T2uD/BkBROjjmqnLZmXRdOx/VtQg==}
-    peerDependencies:
-      eslint: '>= 8.0.0'
-      prettier: '>= 3.0.0'
-
-  '@vue/eslint-config-typescript@11.0.3':
-    resolution: {integrity: sha512-dkt6W0PX6H/4Xuxg/BlFj5xHvksjpSlVjtkQCpaYJBIEuKj2hOVU7r+TIe+ysCwRYFz/lGqvklntRkCAibsbPw==}
-    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
-
-  '@vue/preload-webpack-plugin@2.0.0':
-    resolution: {integrity: sha512-RoorRB50WehYbsiWu497q8egZBYlrvOo9KBUG41uth4O023Cbs+7POLm9uw2CAiViBAIhvpw1Y4w4i+MZxOfXw==}
-    engines: {node: '>=6.0.0'}
-    peerDependencies:
-      html-webpack-plugin: ^5.0.0 || ^4.5.1
-      webpack: ^5.20.0 || ^4.1.0
-
-  '@vue/reactivity-transform@3.3.4':
-    resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==}
-
-  '@vue/reactivity@3.5.13':
-    resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==}
-
-  '@vue/runtime-core@3.5.13':
-    resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==}
-
-  '@vue/runtime-dom@3.5.13':
-    resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==}
-
-  '@vue/server-renderer@3.5.13':
-    resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==}
-    peerDependencies:
-      vue: 3.5.13
-
-  '@vue/shared@3.3.4':
-    resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==}
-
-  '@vue/shared@3.5.13':
-    resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==}
-
-  '@vueuse/core@10.11.1':
-    resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==}
-
-  '@vueuse/metadata@10.11.1':
-    resolution: {integrity: sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==}
-
-  '@vueuse/shared@10.11.1':
-    resolution: {integrity: sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==}
-
-  '@webassemblyjs/ast@1.11.1':
-    resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==}
-
-  '@webassemblyjs/floating-point-hex-parser@1.11.1':
-    resolution: {integrity: sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==}
-
-  '@webassemblyjs/helper-api-error@1.11.1':
-    resolution: {integrity: sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==}
-
-  '@webassemblyjs/helper-buffer@1.11.1':
-    resolution: {integrity: sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==}
-
-  '@webassemblyjs/helper-numbers@1.11.1':
-    resolution: {integrity: sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==}
-
-  '@webassemblyjs/helper-wasm-bytecode@1.11.1':
-    resolution: {integrity: sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==}
-
-  '@webassemblyjs/helper-wasm-section@1.11.1':
-    resolution: {integrity: sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==}
-
-  '@webassemblyjs/ieee754@1.11.1':
-    resolution: {integrity: sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==}
-
-  '@webassemblyjs/leb128@1.11.1':
-    resolution: {integrity: sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==}
-
-  '@webassemblyjs/utf8@1.11.1':
-    resolution: {integrity: sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==}
-
-  '@webassemblyjs/wasm-edit@1.11.1':
-    resolution: {integrity: sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==}
-
-  '@webassemblyjs/wasm-gen@1.11.1':
-    resolution: {integrity: sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==}
-
-  '@webassemblyjs/wasm-opt@1.11.1':
-    resolution: {integrity: sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==}
-
-  '@webassemblyjs/wasm-parser@1.11.1':
-    resolution: {integrity: sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==}
-
-  '@webassemblyjs/wast-printer@1.11.1':
-    resolution: {integrity: sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==}
-
-  '@webav/av-cliper@1.0.6':
-    resolution: {integrity: sha512-uyG6FkD2XYfWT0J+lpVJiTZ7YBg4OzGzG97Fq9A97LKTvKoqP0vB8jyELV4edZOUzwKjh3HJiALFWNL9uV+IWQ==}
-
-  '@webav/av-recorder@1.0.6':
-    resolution: {integrity: sha512-I50ZGU9LSIRuW8xrF8Amqr/IjtPpkfexfjYG2M0CMt2aT6bFo9jhvc1jdwlRT7V7/1iuS52DH7rYDg11+myG7A==}
-
-  '@webav/internal-utils@1.0.6':
-    resolution: {integrity: sha512-rjuVwsxcaS9LGSBeBZqoFE8af7GKH9IPAKMsr2tsdd03B+M/wWrmRWH0ZtaHJChPRneOOZkDicHlMKijc2Cdqw==}
-
-  '@webav/mp4box.js@0.5.4-fenghen':
-    resolution: {integrity: sha512-1NDZyNcB4Eu52tWhrRPGRTXpXUzWzh1xJE6jA0owj/Tlh8d9Bhsu2nsl9Dyheg1IhiFm3FfFoz0aK5dkCadqow==}
-
-  '@webpack-cli/configtest@1.2.0':
-    resolution: {integrity: sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==}
-    peerDependencies:
-      webpack: 4.x.x || 5.x.x
-      webpack-cli: 4.x.x
-
-  '@webpack-cli/info@1.5.0':
-    resolution: {integrity: sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==}
-    peerDependencies:
-      webpack-cli: 4.x.x
-
-  '@webpack-cli/serve@1.7.0':
-    resolution: {integrity: sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==}
-    peerDependencies:
-      webpack-cli: 4.x.x
-      webpack-dev-server: '*'
-    peerDependenciesMeta:
-      webpack-dev-server:
-        optional: true
-
-  '@windicss/config@1.8.10':
-    resolution: {integrity: sha512-O9SsC110b1Ik3YYa4Ck/0TWuCo7YFfA9KDrwD5sAeqscT5COIGK1HszdCT3oh0MJFej2wNrvpfyW9h6yQaW6PA==}
-
-  '@windicss/plugin-utils@1.8.10':
-    resolution: {integrity: sha512-Phqk5OW1w+Mv+ry6t7BzAeDq3aMhbI94gR49j9vQCufFfDGCHndhhjtMK0sBv+NPJUsIAIh6qayb1iwBCXUGrw==}
-
-  '@xmldom/xmldom@0.8.8':
-    resolution: {integrity: sha512-0LNz4EY8B/8xXY86wMrQ4tz6zEHZv9ehFMJPm8u2gq5lQ71cfRKdaKyxfJAx5aUoyzx0qzgURblTisPGgz3d+Q==}
-    engines: {node: '>=10.0.0'}
-
-  '@xtuc/ieee754@1.2.0':
-    resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==}
-
-  '@xtuc/long@4.2.2':
-    resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
-
-  JSONStream@1.3.5:
-    resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
-    hasBin: true
-
-  abab@2.0.6:
-    resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
-
-  abbrev@1.1.1:
-    resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
-
-  accepts@1.3.8:
-    resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
-    engines: {node: '>= 0.6'}
-
-  acorn-globals@6.0.0:
-    resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==}
-
-  acorn-import-assertions@1.8.0:
-    resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==}
-    peerDependencies:
-      acorn: ^8
-
-  acorn-jsx@5.3.2:
-    resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
-    peerDependencies:
-      acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
-
-  acorn-walk@7.2.0:
-    resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==}
-    engines: {node: '>=0.4.0'}
-
-  acorn-walk@8.2.0:
-    resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
-    engines: {node: '>=0.4.0'}
-
-  acorn@7.4.1:
-    resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==}
-    engines: {node: '>=0.4.0'}
-    hasBin: true
-
-  acorn@8.8.2:
-    resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==}
-    engines: {node: '>=0.4.0'}
-    hasBin: true
-
-  add-stream@1.0.0:
-    resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==}
-
-  address@1.2.2:
-    resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==}
-    engines: {node: '>= 10.0.0'}
-
-  aes-decrypter@4.0.1:
-    resolution: {integrity: sha512-H1nh/P9VZXUf17AA5NQfJML88CFjVBDuGkp5zDHa7oEhYN9TTpNLJknRY1ie0iSKWlDf6JRnJKaZVDSQdPy6Cg==}
-
-  agent-base@6.0.2:
-    resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
-    engines: {node: '>= 6.0.0'}
-
-  agentkeepalive@3.5.2:
-    resolution: {integrity: sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==}
-    engines: {node: '>= 4.0.0'}
-
-  agentkeepalive@4.5.0:
-    resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
-    engines: {node: '>= 8.0.0'}
-
-  aggregate-error@3.1.0:
-    resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
-    engines: {node: '>=8'}
-
-  aggregate-error@4.0.1:
-    resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==}
-    engines: {node: '>=12'}
-
-  ajv-formats@1.6.1:
-    resolution: {integrity: sha512-4CjkH20If1lhR5CGtqkrVg3bbOtFEG80X9v6jDOIUhbzzbB+UzPBGy8GQhUNVZ0yvMHdMpawCOcy5ydGMsagGQ==}
-    peerDependencies:
-      ajv: ^7.0.0
-    peerDependenciesMeta:
-      ajv:
-        optional: true
-
-  ajv-formats@2.1.1:
-    resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
-    peerDependencies:
-      ajv: ^8.0.0
-    peerDependenciesMeta:
-      ajv:
-        optional: true
-
-  ajv-keywords@3.5.2:
-    resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==}
-    peerDependencies:
-      ajv: ^6.9.1
-
-  ajv-keywords@5.1.0:
-    resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==}
-    peerDependencies:
-      ajv: ^8.8.2
-
-  ajv@6.12.6:
-    resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
-
-  ajv@7.2.4:
-    resolution: {integrity: sha512-nBeQgg/ZZA3u3SYxyaDvpvDtgZ/EZPF547ARgZBrG9Bhu1vKDwAIjtIf+sDtJUKa2zOcEbmRLBRSyMraS/Oy1A==}
-
-  ajv@8.12.0:
-    resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==}
-
-  ali-oss@6.20.0:
-    resolution: {integrity: sha512-TzFXgGlw81sy2JvcCveSYsa2b2+6kv+HA6WTc+cXg6bu8nUAmVPfncRGbn3x2getSOniOFA+TyGy3V4l3Fks+Q==}
-    engines: {node: '>=8'}
-
-  ansi-escapes@3.2.0:
-    resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==}
-    engines: {node: '>=4'}
-
-  ansi-escapes@4.3.2:
-    resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
-    engines: {node: '>=8'}
-
-  ansi-html-community@0.0.8:
-    resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==}
-    engines: {'0': node >= 0.8.0}
-    hasBin: true
-
-  ansi-regex@3.0.1:
-    resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==}
-    engines: {node: '>=4'}
-
-  ansi-regex@4.1.1:
-    resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==}
-    engines: {node: '>=6'}
-
-  ansi-regex@5.0.1:
-    resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
-    engines: {node: '>=8'}
-
-  ansi-regex@6.0.1:
-    resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
-    engines: {node: '>=12'}
-
-  ansi-styles@3.2.1:
-    resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
-    engines: {node: '>=4'}
-
-  ansi-styles@4.3.0:
-    resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
-    engines: {node: '>=8'}
-
-  ansi-styles@6.2.1:
-    resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
-    engines: {node: '>=12'}
-
-  any-promise@1.3.0:
-    resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
-
-  anymatch@3.1.3:
-    resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
-    engines: {node: '>= 8'}
-
-  aproba@2.0.0:
-    resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==}
-
-  are-we-there-yet@2.0.0:
-    resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==}
-    engines: {node: '>=10'}
-
-  arg@4.1.3:
-    resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
-
-  argparse@2.0.1:
-    resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
-
-  array-buffer-byte-length@1.0.0:
-    resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==}
-
-  array-flatten@1.1.1:
-    resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
-
-  array-flatten@2.1.2:
-    resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==}
-
-  array-ify@1.0.0:
-    resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==}
-
-  array-includes@3.1.6:
-    resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==}
-    engines: {node: '>= 0.4'}
-
-  array-union@1.0.2:
-    resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==}
-    engines: {node: '>=0.10.0'}
-
-  array-union@2.1.0:
-    resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
-    engines: {node: '>=8'}
-
-  array-uniq@1.0.3:
-    resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==}
-    engines: {node: '>=0.10.0'}
-
-  array.prototype.findlastindex@1.2.2:
-    resolution: {integrity: sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==}
-    engines: {node: '>= 0.4'}
-
-  array.prototype.flat@1.3.1:
-    resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==}
-    engines: {node: '>= 0.4'}
-
-  array.prototype.flatmap@1.3.1:
-    resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==}
-    engines: {node: '>= 0.4'}
-
-  arrify@1.0.1:
-    resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
-    engines: {node: '>=0.10.0'}
-
-  asn1@0.2.6:
-    resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==}
-
-  assert-plus@1.0.0:
-    resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==}
-    engines: {node: '>=0.8'}
-
-  astral-regex@2.0.0:
-    resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==}
-    engines: {node: '>=8'}
-
-  async-validator@4.2.5:
-    resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==}
-
-  async@2.6.4:
-    resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==}
-
-  asynckit@0.4.0:
-    resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
-
-  at-least-node@1.0.0:
-    resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==}
-    engines: {node: '>= 4.0.0'}
-
-  atomically@1.7.0:
-    resolution: {integrity: sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==}
-    engines: {node: '>=10.12.0'}
-
-  autoprefixer@10.4.14:
-    resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==}
-    engines: {node: ^10 || ^12 || >=14}
-    hasBin: true
-    peerDependencies:
-      postcss: ^8.1.0
-
-  available-typed-arrays@1.0.5:
-    resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==}
-    engines: {node: '>= 0.4'}
-
-  aws-sign2@0.7.0:
-    resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==}
-
-  aws4@1.12.0:
-    resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==}
-
-  axios@1.3.4:
-    resolution: {integrity: sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==}
-
-  babel-loader@8.3.0:
-    resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==}
-    engines: {node: '>= 8.9'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-      webpack: '>=2'
-
-  babel-plugin-polyfill-corejs2@0.3.3:
-    resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  babel-plugin-polyfill-corejs3@0.6.0:
-    resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  babel-plugin-polyfill-regenerator@0.4.1:
-    resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-
-  balanced-match@1.0.2:
-    resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
-
-  base64-js@1.5.1:
-    resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
-
-  batch@0.6.1:
-    resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==}
-
-  bcrypt-pbkdf@1.0.2:
-    resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==}
-
-  before@0.0.1:
-    resolution: {integrity: sha512-1J5SWbkoVJH9DTALN8igB4p+nPKZzPrJ/HomqBDLpfUvDXCdjdBmBUcH5McZfur0lftVssVU6BZug5NYh87zTw==}
-
-  big-integer@1.6.51:
-    resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==}
-    engines: {node: '>=0.6'}
-
-  big.js@5.2.2:
-    resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==}
-
-  billd-deploy@1.1.0:
-    resolution: {integrity: sha512-7wi42bJR4Hgg66vZ3nNw5E4jkTDozatiTEqogXSUU9Qc+DpDiwoaQV8woHrMYRrTdr7PNTLB53H8cYnsdCRtJw==}
-
-  billd-html-webpack-plugin@1.0.6:
-    resolution: {integrity: sha512-zM294oAMqRD1rlqoyC1E9QbFsBgMPYStODmQKwUjI+xd02Rwo+3iZhmlQ8q0EuF2KnyhwDwhxyZfDGSo6Ow8Tw==}
-
-  billd-scss@0.0.8:
-    resolution: {integrity: sha512-42gyDYnmRICjqrzk3qbqVygpvjpMu/2rMk41x8HyWLOf457EkXyCiAAFrFR2XM3/c6PHWbtD+IhP8MHUV6JeyA==}
-
-  billd-utils@0.0.25:
-    resolution: {integrity: sha512-Pp8ivF15L93ZG0vA1hqAqaDwzxesKYam6tEO0DcDjKHGVR6ylVl/ASsHlniR5hbvp4XFhBiKJ0oMwJvab9GFiQ==}
-
-  binary-extensions@2.2.0:
-    resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
-    engines: {node: '>=8'}
-
-  bl@4.1.0:
-    resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
-
-  block-stream2@2.1.0:
-    resolution: {integrity: sha512-suhjmLI57Ewpmq00qaygS8UgEq2ly2PCItenIyhMqVjo4t4pGzqMvfgJuX8iWTeSDdfSSqS6j38fL4ToNL7Pfg==}
-
-  body-parser@1.20.1:
-    resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==}
-    engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
-
-  bonjour-service@1.1.0:
-    resolution: {integrity: sha512-LVRinRB3k1/K0XzZ2p58COnWvkQknIY6sf0zF2rpErvcJXpMBttEPQSxK+HEXSS9VmpZlDoDnQWv8ftJT20B0Q==}
-
-  boolbase@1.0.0:
-    resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
-
-  bowser@1.9.4:
-    resolution: {integrity: sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ==}
-
-  bplist-parser@0.2.0:
-    resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==}
-    engines: {node: '>= 5.10.0'}
-
-  brace-expansion@1.1.11:
-    resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
-
-  brace-expansion@2.0.1:
-    resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
-
-  braces@3.0.2:
-    resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
-    engines: {node: '>=8'}
-
-  browser-process-hrtime@1.0.0:
-    resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==}
-
-  browserslist@4.21.5:
-    resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==}
-    engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
-    hasBin: true
-
-  buffer-from@1.1.2:
-    resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
-
-  buffer@5.7.1:
-    resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
-
-  buildcheck@0.0.6:
-    resolution: {integrity: sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==}
-    engines: {node: '>=10.0.0'}
-
-  builtin-modules@3.3.0:
-    resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
-    engines: {node: '>=6'}
-
-  builtin-status-codes@3.0.0:
-    resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==}
-
-  bundle-name@3.0.0:
-    resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==}
-    engines: {node: '>=12'}
-
-  bytes@3.0.0:
-    resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==}
-    engines: {node: '>= 0.8'}
-
-  bytes@3.1.2:
-    resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
-    engines: {node: '>= 0.8'}
-
-  cachedir@2.3.0:
-    resolution: {integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==}
-    engines: {node: '>=6'}
-
-  call-bind@1.0.2:
-    resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
-
-  callsites@3.1.0:
-    resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
-    engines: {node: '>=6'}
-
-  camel-case@4.1.2:
-    resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==}
-
-  camelcase-keys@6.2.2:
-    resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==}
-    engines: {node: '>=8'}
-
-  camelcase@5.3.1:
-    resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
-    engines: {node: '>=6'}
-
-  caniuse-api@3.0.0:
-    resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==}
-
-  caniuse-lite@1.0.30001467:
-    resolution: {integrity: sha512-cEdN/5e+RPikvl9AHm4uuLXxeCNq8rFsQ+lPHTfe/OtypP3WwnVVbjn+6uBV7PaFL6xUFzTh+sSCOz1rKhcO+Q==}
-
-  canvas@2.11.2:
-    resolution: {integrity: sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==}
-    engines: {node: '>=6'}
-
-  caseless@0.12.0:
-    resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==}
-
-  chalk@2.4.2:
-    resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
-    engines: {node: '>=4'}
-
-  chalk@3.0.0:
-    resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==}
-    engines: {node: '>=8'}
-
-  chalk@4.1.2:
-    resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
-    engines: {node: '>=10'}
-
-  chardet@0.7.0:
-    resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
-
-  chokidar@3.5.3:
-    resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
-    engines: {node: '>= 8.10.0'}
-
-  chownr@2.0.0:
-    resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
-    engines: {node: '>=10'}
-
-  chrome-trace-event@1.0.3:
-    resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==}
-    engines: {node: '>=6.0'}
-
-  clean-css@5.3.2:
-    resolution: {integrity: sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==}
-    engines: {node: '>= 10.0'}
-
-  clean-stack@2.2.0:
-    resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
-    engines: {node: '>=6'}
-
-  clean-stack@4.2.0:
-    resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==}
-    engines: {node: '>=12'}
-
-  cli-cursor@2.1.0:
-    resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==}
-    engines: {node: '>=4'}
-
-  cli-cursor@3.1.0:
-    resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
-    engines: {node: '>=8'}
-
-  cli-spinners@2.7.0:
-    resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==}
-    engines: {node: '>=6'}
-
-  cli-truncate@2.1.0:
-    resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==}
-    engines: {node: '>=8'}
-
-  cli-truncate@3.1.0:
-    resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
-  cli-width@2.2.1:
-    resolution: {integrity: sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==}
-
-  cli-width@3.0.0:
-    resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==}
-    engines: {node: '>= 10'}
-
-  cliui@6.0.0:
-    resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
-
-  cliui@7.0.4:
-    resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
-
-  cliui@8.0.1:
-    resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
-    engines: {node: '>=12'}
-
-  clone-deep@4.0.1:
-    resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==}
-    engines: {node: '>=6'}
-
-  clone@1.0.4:
-    resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
-    engines: {node: '>=0.8'}
-
-  codemirror@6.0.1:
-    resolution: {integrity: sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==}
-
-  color-convert@1.9.3:
-    resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
-
-  color-convert@2.0.1:
-    resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
-    engines: {node: '>=7.0.0'}
-
-  color-name@1.1.3:
-    resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
-
-  color-name@1.1.4:
-    resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
-
-  color-support@1.1.3:
-    resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
-    hasBin: true
-
-  colord@2.9.3:
-    resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==}
-
-  colorette@2.0.19:
-    resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==}
-
-  combined-stream@1.0.8:
-    resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
-    engines: {node: '>= 0.8'}
-
-  commander@2.20.3:
-    resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
-
-  commander@7.2.0:
-    resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
-    engines: {node: '>= 10'}
-
-  commander@8.3.0:
-    resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
-    engines: {node: '>= 12'}
-
-  commander@9.5.0:
-    resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==}
-    engines: {node: ^12.20.0 || >=14}
-
-  commitizen@4.3.0:
-    resolution: {integrity: sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==}
-    engines: {node: '>= 12'}
-    hasBin: true
-
-  commondir@1.0.1:
-    resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
-
-  compare-func@2.0.0:
-    resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==}
-
-  component-emitter@1.3.1:
-    resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==}
-
-  compressible@2.0.18:
-    resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==}
-    engines: {node: '>= 0.6'}
-
-  compression-webpack-plugin@9.2.0:
-    resolution: {integrity: sha512-R/Oi+2+UHotGfu72fJiRoVpuRifZT0tTC6UqFD/DUo+mv8dbOow9rVOuTvDv5nPPm3GZhHL/fKkwxwIHnJ8Nyw==}
-    engines: {node: '>= 12.13.0'}
-    peerDependencies:
-      webpack: ^5.1.0
-
-  compression@1.7.4:
-    resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==}
-    engines: {node: '>= 0.8.0'}
-
-  concat-map@0.0.1:
-    resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
-
-  concat-stream@2.0.0:
-    resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==}
-    engines: {'0': node >= 6.0}
-
-  conf@9.0.2:
-    resolution: {integrity: sha512-rLSiilO85qHgaTBIIHQpsv8z+NnVfZq3cKuYNCXN1AOqPzced0GWZEe/A517VldRLyQYXUMyV+vszavE2jSAqw==}
-    engines: {node: '>=10'}
-
-  connect-history-api-fallback@2.0.0:
-    resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==}
-    engines: {node: '>=0.8'}
-
-  consola@2.15.3:
-    resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==}
-
-  console-control-strings@1.1.0:
-    resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
-
-  content-disposition@0.5.4:
-    resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
-    engines: {node: '>= 0.6'}
-
-  content-type@1.0.5:
-    resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
-    engines: {node: '>= 0.6'}
-
-  conventional-changelog-angular@5.0.13:
-    resolution: {integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==}
-    engines: {node: '>=10'}
-
-  conventional-changelog-atom@2.0.8:
-    resolution: {integrity: sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==}
-    engines: {node: '>=10'}
-
-  conventional-changelog-codemirror@2.0.8:
-    resolution: {integrity: sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==}
-    engines: {node: '>=10'}
-
-  conventional-changelog-config-spec@2.1.0:
-    resolution: {integrity: sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==}
-
-  conventional-changelog-conventionalcommits@4.6.3:
-    resolution: {integrity: sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==}
-    engines: {node: '>=10'}
-
-  conventional-changelog-core@4.2.4:
-    resolution: {integrity: sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==}
-    engines: {node: '>=10'}
-
-  conventional-changelog-ember@2.0.9:
-    resolution: {integrity: sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==}
-    engines: {node: '>=10'}
-
-  conventional-changelog-eslint@3.0.9:
-    resolution: {integrity: sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==}
-    engines: {node: '>=10'}
-
-  conventional-changelog-express@2.0.6:
-    resolution: {integrity: sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==}
-    engines: {node: '>=10'}
-
-  conventional-changelog-jquery@3.0.11:
-    resolution: {integrity: sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==}
-    engines: {node: '>=10'}
-
-  conventional-changelog-jshint@2.0.9:
-    resolution: {integrity: sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==}
-    engines: {node: '>=10'}
-
-  conventional-changelog-preset-loader@2.3.4:
-    resolution: {integrity: sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==}
-    engines: {node: '>=10'}
-
-  conventional-changelog-writer@5.0.1:
-    resolution: {integrity: sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==}
-    engines: {node: '>=10'}
-    hasBin: true
-
-  conventional-changelog@3.1.25:
-    resolution: {integrity: sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==}
-    engines: {node: '>=10'}
-
-  conventional-commit-types@3.0.0:
-    resolution: {integrity: sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==}
-
-  conventional-commits-filter@2.0.7:
-    resolution: {integrity: sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==}
-    engines: {node: '>=10'}
-
-  conventional-commits-parser@3.2.4:
-    resolution: {integrity: sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==}
-    engines: {node: '>=10'}
-    hasBin: true
-
-  conventional-recommended-bump@6.1.0:
-    resolution: {integrity: sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==}
-    engines: {node: '>=10'}
-    hasBin: true
-
-  convert-source-map@1.9.0:
-    resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
-
-  cookie-signature@1.0.6:
-    resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
-
-  cookie@0.5.0:
-    resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
-    engines: {node: '>= 0.6'}
-
-  copy-text-to-clipboard@3.1.0:
-    resolution: {integrity: sha512-PFM6BnjLnOON/lB3ta/Jg7Ywsv+l9kQGD4TWDCSlRBGmqnnTM5MrDkhAFgw+8HZt0wW6Q2BBE4cmy9sq+s9Qng==}
-    engines: {node: '>=12'}
-
-  copy-to-clipboard@3.3.3:
-    resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==}
-
-  copy-to@2.0.1:
-    resolution: {integrity: sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w==}
-
-  copy-webpack-plugin@8.1.1:
-    resolution: {integrity: sha512-rYM2uzRxrLRpcyPqGceRBDpxxUV8vcDqIKxAUKfcnFpcrPxT5+XvhTxv7XLjo5AvEJFPdAE3zCogG2JVahqgSQ==}
-    engines: {node: '>= 10.13.0'}
-    peerDependencies:
-      webpack: ^5.1.0
-
-  core-js-compat@3.29.1:
-    resolution: {integrity: sha512-QmchCua884D8wWskMX8tW5ydINzd8oSJVx38lx/pVkFGqztxt73GYre3pm/hyYq8bPf+MW5In4I/uRShFDsbrA==}
-
-  core-js-pure@3.29.1:
-    resolution: {integrity: sha512-4En6zYVi0i0XlXHVz/bi6l1XDjCqkKRq765NXuX+SnaIatlE96Odt5lMLjdxUiNI1v9OXI5DSLWYPlmTfkTktg==}
-
-  core-js@2.6.12:
-    resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==}
-    deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.
-
-  core-js@3.29.1:
-    resolution: {integrity: sha512-+jwgnhg6cQxKYIIjGtAHq2nwUOolo9eoFZ4sHfUH09BLXBgxnH4gA0zEd+t+BO2cNB8idaBtZFcFTRjQJRJmAw==}
-
-  core-util-is@1.0.2:
-    resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==}
-
-  core-util-is@1.0.3:
-    resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
-
-  cos-js-sdk-v5@1.8.6:
-    resolution: {integrity: sha512-FCygXb5cNQhlwmsGf5B5WnqFsx+cQiPW+I4SWjVg08IaSA+1Uu8VqpP+FI7+LIA9PoC3GpX6ehgV0olsfEnoHg==}
-
-  cos-nodejs-sdk-v5@2.13.1:
-    resolution: {integrity: sha512-lvmAAUGisiWeiilVkpFQ2Eh9Bl/0aiQuUF4V8GvE0ioSmKQFdb3Z8lrjJNY1CeMtPCtPq9WWZqyevgPwndyEnA==}
-    engines: {node: '>= 6'}
-
-  cosmiconfig-typescript-loader@2.0.2:
-    resolution: {integrity: sha512-KmE+bMjWMXJbkWCeY4FJX/npHuZPNr9XF9q9CIQ/bpFwi1qHfCmSiKarrCcRa0LO4fWjk93pVoeRtJAkTGcYNw==}
-    engines: {node: '>=12', npm: '>=6'}
-    peerDependencies:
-      '@types/node': '*'
-      cosmiconfig: '>=7'
-      typescript: '>=3'
-
-  cosmiconfig-typescript-loader@4.3.0:
-    resolution: {integrity: sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==}
-    engines: {node: '>=12', npm: '>=6'}
-    peerDependencies:
-      '@types/node': '*'
-      cosmiconfig: '>=7'
-      ts-node: '>=10'
-      typescript: '>=3'
-
-  cosmiconfig@7.1.0:
-    resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==}
-    engines: {node: '>=10'}
-
-  cosmiconfig@8.1.3:
-    resolution: {integrity: sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==}
-    engines: {node: '>=14'}
-
-  cpu-features@0.0.9:
-    resolution: {integrity: sha512-AKjgn2rP2yJyfbepsmLfiYcmtNn/2eUvocUyM/09yB0YDiz39HteK/5/T4Onf0pmdYDMgkBoGvRLvEguzyL7wQ==}
-    engines: {node: '>=10.0.0'}
-
-  crc32@0.2.2:
-    resolution: {integrity: sha512-PFZEGbDUeoNbL2GHIEpJRQGheXReDody/9axKTxhXtQqIL443wnNigtVZO9iuCIMPApKZRv7k2xr8euXHqNxQQ==}
-    engines: {node: '>= 0.4.0'}
-    hasBin: true
-
-  create-require@1.1.1:
-    resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
-
-  crelt@1.0.6:
-    resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==}
-
-  cross-env@7.0.3:
-    resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==}
-    engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'}
-    hasBin: true
-
-  cross-spawn@7.0.3:
-    resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
-    engines: {node: '>= 8'}
-
-  crypto-js@4.2.0:
-    resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==}
-
-  css-blank-pseudo@3.0.3:
-    resolution: {integrity: sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==}
-    engines: {node: ^12 || ^14 || >=16}
-    hasBin: true
-    peerDependencies:
-      postcss: ^8.4
-
-  css-declaration-sorter@6.3.1:
-    resolution: {integrity: sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==}
-    engines: {node: ^10 || ^12 || >=14}
-    peerDependencies:
-      postcss: ^8.0.9
-
-  css-has-pseudo@3.0.4:
-    resolution: {integrity: sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==}
-    engines: {node: ^12 || ^14 || >=16}
-    hasBin: true
-    peerDependencies:
-      postcss: ^8.4
-
-  css-loader@6.7.3:
-    resolution: {integrity: sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==}
-    engines: {node: '>= 12.13.0'}
-    peerDependencies:
-      webpack: ^5.0.0
-
-  css-minimizer-webpack-plugin@3.4.1:
-    resolution: {integrity: sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==}
-    engines: {node: '>= 12.13.0'}
-    peerDependencies:
-      '@parcel/css': '*'
-      clean-css: '*'
-      csso: '*'
-      esbuild: '*'
-      webpack: ^5.0.0
-    peerDependenciesMeta:
-      '@parcel/css':
-        optional: true
-      clean-css:
-        optional: true
-      csso:
-        optional: true
-      esbuild:
-        optional: true
-
-  css-prefers-color-scheme@6.0.3:
-    resolution: {integrity: sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==}
-    engines: {node: ^12 || ^14 || >=16}
-    hasBin: true
-    peerDependencies:
-      postcss: ^8.4
-
-  css-render@0.15.14:
-    resolution: {integrity: sha512-9nF4PdUle+5ta4W5SyZdLCCmFd37uVimSjg1evcTqKJCyvCEEj12WKzOSBNak6r4im4J4iYXKH1OWpUV5LBYFg==}
-
-  css-select@4.3.0:
-    resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==}
-
-  css-tree@1.1.3:
-    resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==}
-    engines: {node: '>=8.0.0'}
-
-  css-what@6.1.0:
-    resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
-    engines: {node: '>= 6'}
-
-  cssdb@7.4.1:
-    resolution: {integrity: sha512-0Q8NOMpXJ3iTDDbUv9grcmQAfdDx4qz+fN/+Md2FGbevT+6+bJNQ2LjB2YIUlLbpBTM32idU1Sb+tb/uGt6/XQ==}
-
-  cssesc@3.0.0:
-    resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
-    engines: {node: '>=4'}
-    hasBin: true
-
-  cssfilter@0.0.10:
-    resolution: {integrity: sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==}
-
-  cssnano-preset-default@5.2.14:
-    resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  cssnano-utils@3.1.0:
-    resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  cssnano@5.1.15:
-    resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  csso@4.2.0:
-    resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==}
-    engines: {node: '>=8.0.0'}
-
-  cssom@0.3.8:
-    resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==}
-
-  cssom@0.5.0:
-    resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==}
-
-  cssstyle@2.3.0:
-    resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==}
-    engines: {node: '>=8'}
-
-  csstype@3.0.11:
-    resolution: {integrity: sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==}
-
-  csstype@3.1.3:
-    resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
-
-  cz-conventional-changelog@3.3.0:
-    resolution: {integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==}
-    engines: {node: '>= 10'}
-
-  cz-customizable@7.0.0:
-    resolution: {integrity: sha512-pQKkGSm+8SY9VY/yeJqDOla1MjrGaG7WG4EYLLEV4VNctGO7WdzdGtWEr2ydKSkrpmTs7f8fmBksg/FaTrUAyw==}
-    hasBin: true
-
-  dargs@7.0.0:
-    resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==}
-    engines: {node: '>=8'}
-
-  dashdash@1.14.1:
-    resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==}
-    engines: {node: '>=0.10'}
-
-  data-urls@3.0.2:
-    resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==}
-    engines: {node: '>=12'}
-
-  date-fns-tz@3.2.0:
-    resolution: {integrity: sha512-sg8HqoTEulcbbbVXeg84u5UnlsQa8GS5QXMqjjYIhS4abEVVKIUwe0/l/UhrZdKaL/W5eWZNlbTeEIiOXTcsBQ==}
-    peerDependencies:
-      date-fns: ^3.0.0 || ^4.0.0
-
-  date-fns@3.6.0:
-    resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==}
-
-  date-format@4.0.14:
-    resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==}
-    engines: {node: '>=4.0'}
-
-  dateformat@2.2.0:
-    resolution: {integrity: sha512-GODcnWq3YGoTnygPfi02ygEiRxqUxpJwuRHjdhJYuxpcZmDq4rjBiXYmbCCzStxo176ixfLT6i4NPwQooRySnw==}
-
-  dateformat@3.0.3:
-    resolution: {integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==}
-
-  debounce-fn@4.0.0:
-    resolution: {integrity: sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==}
-    engines: {node: '>=10'}
-
-  debug@2.6.9:
-    resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
-    peerDependencies:
-      supports-color: '*'
-    peerDependenciesMeta:
-      supports-color:
-        optional: true
-
-  debug@3.2.7:
-    resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
-    peerDependencies:
-      supports-color: '*'
-    peerDependenciesMeta:
-      supports-color:
-        optional: true
-
-  debug@4.3.4:
-    resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
-    engines: {node: '>=6.0'}
-    peerDependencies:
-      supports-color: '*'
-    peerDependenciesMeta:
-      supports-color:
-        optional: true
-
-  decamelize-keys@1.1.1:
-    resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==}
-    engines: {node: '>=0.10.0'}
-
-  decamelize@1.2.0:
-    resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
-    engines: {node: '>=0.10.0'}
-
-  decimal.js@10.4.3:
-    resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==}
-
-  decompress-response@4.2.1:
-    resolution: {integrity: sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==}
-    engines: {node: '>=8'}
-
-  dedent@0.7.0:
-    resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==}
-
-  deep-is@0.1.4:
-    resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
-
-  deepmerge@4.3.1:
-    resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
-    engines: {node: '>=0.10.0'}
-
-  default-browser-id@3.0.0:
-    resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==}
-    engines: {node: '>=12'}
-
-  default-browser@4.0.0:
-    resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==}
-    engines: {node: '>=14.16'}
-
-  default-gateway@6.0.3:
-    resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==}
-    engines: {node: '>= 10'}
-
-  default-user-agent@1.0.0:
-    resolution: {integrity: sha512-bDF7bg6OSNcSwFWPu4zYKpVkJZQYVrAANMYB8bc9Szem1D0yKdm4sa/rOCs2aC9+2GMqQ7KnwtZRvDhmLF0dXw==}
-    engines: {node: '>= 0.10.0'}
-
-  defaults@1.0.4:
-    resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
-
-  define-lazy-prop@2.0.0:
-    resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
-    engines: {node: '>=8'}
-
-  define-lazy-prop@3.0.0:
-    resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
-    engines: {node: '>=12'}
-
-  define-properties@1.2.0:
-    resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==}
-    engines: {node: '>= 0.4'}
-
-  delayed-stream@1.0.0:
-    resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
-    engines: {node: '>=0.4.0'}
-
-  delegates@1.0.0:
-    resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==}
-
-  depd@1.1.2:
-    resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==}
-    engines: {node: '>= 0.6'}
-
-  depd@2.0.0:
-    resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
-    engines: {node: '>= 0.8'}
-
-  destroy@1.2.0:
-    resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
-    engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
-
-  detect-file@1.0.0:
-    resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==}
-    engines: {node: '>=0.10.0'}
-
-  detect-indent@6.1.0:
-    resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
-    engines: {node: '>=8'}
-
-  detect-libc@2.0.2:
-    resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==}
-    engines: {node: '>=8'}
-
-  detect-newline@3.1.0:
-    resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==}
-    engines: {node: '>=8'}
-
-  detect-node@2.1.0:
-    resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==}
-
-  diff@4.0.2:
-    resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
-    engines: {node: '>=0.3.1'}
-
-  digest-header@1.1.0:
-    resolution: {integrity: sha512-glXVh42vz40yZb9Cq2oMOt70FIoWiv+vxNvdKdU8CwjLad25qHM3trLxhl9bVjdr6WaslIXhWpn0NO8T/67Qjg==}
-    engines: {node: '>= 8.0.0'}
-
-  dijkstrajs@1.0.3:
-    resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==}
-
-  dir-glob@2.2.2:
-    resolution: {integrity: sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==}
-    engines: {node: '>=4'}
-
-  dir-glob@3.0.1:
-    resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
-    engines: {node: '>=8'}
-
-  dns-equal@1.0.0:
-    resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==}
-
-  dns-packet@5.4.0:
-    resolution: {integrity: sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==}
-    engines: {node: '>=6'}
-
-  doctrine@2.1.0:
-    resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
-    engines: {node: '>=0.10.0'}
-
-  doctrine@3.0.0:
-    resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
-    engines: {node: '>=6.0.0'}
-
-  dom-converter@0.2.0:
-    resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==}
-
-  dom-serializer@1.4.1:
-    resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==}
-
-  dom-walk@0.1.2:
-    resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==}
-
-  domelementtype@2.3.0:
-    resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
-
-  domexception@4.0.0:
-    resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==}
-    engines: {node: '>=12'}
-
-  domhandler@4.3.1:
-    resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==}
-    engines: {node: '>= 4'}
-
-  domutils@2.8.0:
-    resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==}
-
-  dot-case@3.0.4:
-    resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
-
-  dot-prop@5.3.0:
-    resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==}
-    engines: {node: '>=8'}
-
-  dot-prop@6.0.1:
-    resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==}
-    engines: {node: '>=10'}
-
-  dotgitignore@2.1.0:
-    resolution: {integrity: sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==}
-    engines: {node: '>=6'}
-
-  duplexer@0.1.2:
-    resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
-
-  eastasianwidth@0.2.0:
-    resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
-
-  ecc-jsbn@0.1.2:
-    resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==}
-
-  editor@1.0.0:
-    resolution: {integrity: sha512-SoRmbGStwNYHgKfjOrX2L0mUvp9bUVv0uPppZSOMAntEbcFtoC3MKF5b3T6HQPXKIV+QGY3xPO3JK5it5lVkuw==}
-
-  ee-first@1.1.1:
-    resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
-
-  electron-to-chromium@1.4.333:
-    resolution: {integrity: sha512-YyE8+GKyGtPEP1/kpvqsdhD6rA/TP1DUFDN4uiU/YI52NzDxmwHkEb3qjId8hLBa5siJvG0sfC3O66501jMruQ==}
-
-  emoji-regex@8.0.0:
-    resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
-
-  emoji-regex@9.2.2:
-    resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
-
-  emojis-list@3.0.0:
-    resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==}
-    engines: {node: '>= 4'}
-
-  encode-utf8@1.0.3:
-    resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==}
-
-  encodeurl@1.0.2:
-    resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
-    engines: {node: '>= 0.8'}
-
-  end-of-stream@1.4.4:
-    resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
-
-  end-or-error@1.0.1:
-    resolution: {integrity: sha512-OclLMSug+k2A0JKuf494im25ANRBVW8qsjmwbgX7lQ8P82H21PQ1PWkoYwb9y5yMBS69BPlwtzdIFClo3+7kOQ==}
-    engines: {node: '>= 0.11.14'}
-
-  engine.io-client@6.6.1:
-    resolution: {integrity: sha512-aYuoak7I+R83M/BBPIOs2to51BmFIpC1wZe6zZzMrT2llVsHy5cvcmdsJgP2Qz6smHu+sD9oexiSUAVd8OfBPw==}
-
-  engine.io-parser@5.2.1:
-    resolution: {integrity: sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==}
-    engines: {node: '>=10.0.0'}
-
-  enhanced-resolve@5.12.0:
-    resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==}
-    engines: {node: '>=10.13.0'}
-
-  entities@2.2.0:
-    resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
-
-  entities@4.5.0:
-    resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
-    engines: {node: '>=0.12'}
-
-  env-paths@2.2.1:
-    resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
-    engines: {node: '>=6'}
-
-  envinfo@7.8.1:
-    resolution: {integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==}
-    engines: {node: '>=4'}
-    hasBin: true
-
-  error-ex@1.3.2:
-    resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
-
-  error-stack-parser@2.1.4:
-    resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==}
-
-  es-abstract@1.21.2:
-    resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==}
-    engines: {node: '>= 0.4'}
-
-  es-module-lexer@0.9.3:
-    resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==}
-
-  es-set-tostringtag@2.0.1:
-    resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==}
-    engines: {node: '>= 0.4'}
-
-  es-shim-unscopables@1.0.0:
-    resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==}
-
-  es-to-primitive@1.2.1:
-    resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
-    engines: {node: '>= 0.4'}
-
-  es6-promise@4.2.8:
-    resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
-
-  esbuild-android-64@0.15.18:
-    resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [android]
-
-  esbuild-android-arm64@0.15.18:
-    resolution: {integrity: sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [android]
-
-  esbuild-darwin-64@0.15.18:
-    resolution: {integrity: sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [darwin]
-
-  esbuild-darwin-arm64@0.15.18:
-    resolution: {integrity: sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [darwin]
-
-  esbuild-freebsd-64@0.15.18:
-    resolution: {integrity: sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [freebsd]
-
-  esbuild-freebsd-arm64@0.15.18:
-    resolution: {integrity: sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [freebsd]
-
-  esbuild-linux-32@0.15.18:
-    resolution: {integrity: sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==}
-    engines: {node: '>=12'}
-    cpu: [ia32]
-    os: [linux]
-
-  esbuild-linux-64@0.15.18:
-    resolution: {integrity: sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [linux]
-
-  esbuild-linux-arm64@0.15.18:
-    resolution: {integrity: sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [linux]
-
-  esbuild-linux-arm@0.15.18:
-    resolution: {integrity: sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==}
-    engines: {node: '>=12'}
-    cpu: [arm]
-    os: [linux]
-
-  esbuild-linux-mips64le@0.15.18:
-    resolution: {integrity: sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==}
-    engines: {node: '>=12'}
-    cpu: [mips64el]
-    os: [linux]
-
-  esbuild-linux-ppc64le@0.15.18:
-    resolution: {integrity: sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==}
-    engines: {node: '>=12'}
-    cpu: [ppc64]
-    os: [linux]
-
-  esbuild-linux-riscv64@0.15.18:
-    resolution: {integrity: sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==}
-    engines: {node: '>=12'}
-    cpu: [riscv64]
-    os: [linux]
-
-  esbuild-linux-s390x@0.15.18:
-    resolution: {integrity: sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==}
-    engines: {node: '>=12'}
-    cpu: [s390x]
-    os: [linux]
-
-  esbuild-loader@4.0.2:
-    resolution: {integrity: sha512-kj88m0yrtTEJDeUEF+3TZsq7t9VPzQQj7UmXAzUbIaipoYSrd0UxKAcg4l9CBgP8uVoploiw+nKr8DIv6Y9gXw==}
-    peerDependencies:
-      webpack: ^4.40.0 || ^5.0.0
-
-  esbuild-netbsd-64@0.15.18:
-    resolution: {integrity: sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [netbsd]
-
-  esbuild-openbsd-64@0.15.18:
-    resolution: {integrity: sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [openbsd]
-
-  esbuild-sunos-64@0.15.18:
-    resolution: {integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [sunos]
-
-  esbuild-windows-32@0.15.18:
-    resolution: {integrity: sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==}
-    engines: {node: '>=12'}
-    cpu: [ia32]
-    os: [win32]
-
-  esbuild-windows-64@0.15.18:
-    resolution: {integrity: sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [win32]
-
-  esbuild-windows-arm64@0.15.18:
-    resolution: {integrity: sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [win32]
-
-  esbuild@0.15.18:
-    resolution: {integrity: sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==}
-    engines: {node: '>=12'}
-    hasBin: true
-
-  esbuild@0.17.12:
-    resolution: {integrity: sha512-bX/zHl7Gn2CpQwcMtRogTTBf9l1nl+H6R8nUbjk+RuKqAE3+8FDulLA+pHvX7aA7Xe07Iwa+CWvy9I8Y2qqPKQ==}
-    engines: {node: '>=12'}
-    hasBin: true
-
-  esbuild@0.19.3:
-    resolution: {integrity: sha512-UlJ1qUUA2jL2nNib1JTSkifQTcYTroFqRjwCFW4QYEKEsixXD5Tik9xML7zh2gTxkYTBKGHNH9y7txMwVyPbjw==}
-    engines: {node: '>=12'}
-    hasBin: true
-
-  escalade@3.1.1:
-    resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
-    engines: {node: '>=6'}
-
-  escape-html@1.0.3:
-    resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
-
-  escape-string-regexp@1.0.5:
-    resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
-    engines: {node: '>=0.8.0'}
-
-  escape-string-regexp@4.0.0:
-    resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
-    engines: {node: '>=10'}
-
-  escape-string-regexp@5.0.0:
-    resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
-    engines: {node: '>=12'}
-
-  escodegen@2.1.0:
-    resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==}
-    engines: {node: '>=6.0'}
-    hasBin: true
-
-  esdk-obs-nodejs@3.23.11:
-    resolution: {integrity: sha512-Al9W/B6XvW3SC2GNM00VXywcRfPf7yW4AvZXHX0uudeCAY0kkubJSnepj2quF7cC/ecrKBpmWic58TeC8atjww==}
-    engines: {node: '>=0.12.7'}
-
-  eslint-config-prettier@8.10.0:
-    resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==}
-    hasBin: true
-    peerDependencies:
-      eslint: '>=7.0.0'
-
-  eslint-import-resolver-node@0.3.7:
-    resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==}
-
-  eslint-import-resolver-typescript@3.5.5:
-    resolution: {integrity: sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==}
-    engines: {node: ^14.18.0 || >=16.0.0}
-    peerDependencies:
-      eslint: '*'
-      eslint-plugin-import: '*'
-
-  eslint-module-utils@2.8.0:
-    resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
-    engines: {node: '>=4'}
-    peerDependencies:
-      '@typescript-eslint/parser': '*'
-      eslint: '*'
-      eslint-import-resolver-node: '*'
-      eslint-import-resolver-typescript: '*'
-      eslint-import-resolver-webpack: '*'
-    peerDependenciesMeta:
-      '@typescript-eslint/parser':
-        optional: true
-      eslint:
-        optional: true
-      eslint-import-resolver-node:
-        optional: true
-      eslint-import-resolver-typescript:
-        optional: true
-      eslint-import-resolver-webpack:
-        optional: true
-
-  eslint-plugin-import@2.28.0:
-    resolution: {integrity: sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q==}
-    engines: {node: '>=4'}
-    peerDependencies:
-      '@typescript-eslint/parser': '*'
-      eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8
-    peerDependenciesMeta:
-      '@typescript-eslint/parser':
-        optional: true
-
-  eslint-plugin-prettier@5.0.0:
-    resolution: {integrity: sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w==}
-    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
-
-  eslint-plugin-vue@9.16.1:
-    resolution: {integrity: sha512-2FtnTqazA6aYONfDuOZTk0QzwhAwi7Z4+uJ7+GHeGxcKapjqWlDsRWDenvyG/utyOfAS5bVRmAG3cEWiYEz2bA==}
-    engines: {node: ^14.17.0 || >=16.0.0}
-    peerDependencies:
-      eslint: ^6.2.0 || ^7.0.0 || ^8.0.0
-
-  eslint-scope@5.1.1:
-    resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
-    engines: {node: '>=8.0.0'}
-
-  eslint-scope@7.1.1:
-    resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
-  eslint-visitor-keys@3.3.0:
-    resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
-  eslint-webpack-plugin@3.2.0:
-    resolution: {integrity: sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==}
-    engines: {node: '>= 12.13.0'}
-    peerDependencies:
-      eslint: ^7.0.0 || ^8.0.0
-      webpack: ^5.0.0
-
-  eslint@8.36.0:
-    resolution: {integrity: sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    hasBin: true
-
-  espree@9.5.0:
-    resolution: {integrity: sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
-  esprima@4.0.1:
-    resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
-    engines: {node: '>=4'}
-    hasBin: true
-
-  esquery@1.5.0:
-    resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
-    engines: {node: '>=0.10'}
-
-  esrecurse@4.3.0:
-    resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
-    engines: {node: '>=4.0'}
-
-  estraverse@4.3.0:
-    resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
-    engines: {node: '>=4.0'}
-
-  estraverse@5.3.0:
-    resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
-    engines: {node: '>=4.0'}
-
-  estree-walker@1.0.1:
-    resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==}
-
-  estree-walker@2.0.2:
-    resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
-
-  esutils@2.0.3:
-    resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
-    engines: {node: '>=0.10.0'}
-
-  etag@1.8.1:
-    resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
-    engines: {node: '>= 0.6'}
-
-  eventemitter3@4.0.7:
-    resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
-
-  events@3.3.0:
-    resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
-    engines: {node: '>=0.8.x'}
-
-  evtd@0.2.4:
-    resolution: {integrity: sha512-qaeGN5bx63s/AXgQo8gj6fBkxge+OoLddLniox5qtLAEY5HSnuSlISXVPxnSae1dWblvTh4/HoMIB+mbMsvZzw==}
-
-  execa@2.1.0:
-    resolution: {integrity: sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw==}
-    engines: {node: ^8.12.0 || >=9.7.0}
-
-  execa@5.1.1:
-    resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
-    engines: {node: '>=10'}
-
-  execa@7.2.0:
-    resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==}
-    engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0}
-
-  expand-tilde@2.0.2:
-    resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==}
-    engines: {node: '>=0.10.0'}
-
-  express@4.18.2:
-    resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==}
-    engines: {node: '>= 0.10.0'}
-
-  extend-shallow@2.0.1:
-    resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
-    engines: {node: '>=0.10.0'}
-
-  extend@3.0.2:
-    resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
-
-  external-editor@3.1.0:
-    resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
-    engines: {node: '>=4'}
-
-  extsprintf@1.3.0:
-    resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==}
-    engines: {'0': node >=0.6.0}
-
-  fabric@5.3.0:
-    resolution: {integrity: sha512-AVayKuzWoXM5cTn7iD3yNWBlfEa8r1tHaOe2g8NsZrmWKAHjryTxT/j6f9ncRfOWOF0I1Ci1AId3y78cC+GExQ==}
-    engines: {node: '>=14.0.0'}
-
-  fast-deep-equal@3.1.3:
-    resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
-
-  fast-diff@1.2.0:
-    resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==}
-
-  fast-glob@3.2.12:
-    resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
-    engines: {node: '>=8.6.0'}
-
-  fast-glob@3.3.1:
-    resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==}
-    engines: {node: '>=8.6.0'}
-
-  fast-json-stable-stringify@2.1.0:
-    resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
-
-  fast-levenshtein@2.0.6:
-    resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
-
-  fast-xml-parser@4.2.5:
-    resolution: {integrity: sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==}
-    hasBin: true
-
-  fast-xml-parser@4.5.0:
-    resolution: {integrity: sha512-/PlTQCI96+fZMAOLMZK4CWG1ItCbfZ/0jx7UIJFChPNrx7tcEgerUgWbeieCM9MfHInUDyK8DWYZ+YrywDJuTg==}
-    hasBin: true
-
-  fastest-levenshtein@1.0.16:
-    resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==}
-    engines: {node: '>= 4.9.1'}
-
-  fastq@1.15.0:
-    resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
-
-  faye-websocket@0.11.4:
-    resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==}
-    engines: {node: '>=0.8.0'}
-
-  figures@2.0.0:
-    resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==}
-    engines: {node: '>=4'}
-
-  figures@3.2.0:
-    resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
-    engines: {node: '>=8'}
-
-  file-entry-cache@6.0.1:
-    resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
-    engines: {node: ^10.12.0 || >=12.0.0}
-
-  file-loader@6.2.0:
-    resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==}
-    engines: {node: '>= 10.13.0'}
-    peerDependencies:
-      webpack: ^4.0.0 || ^5.0.0
-
-  fill-range@7.0.1:
-    resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
-    engines: {node: '>=8'}
-
-  finalhandler@1.2.0:
-    resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==}
-    engines: {node: '>= 0.8'}
-
-  find-cache-dir@3.3.2:
-    resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==}
-    engines: {node: '>=8'}
-
-  find-config@1.0.0:
-    resolution: {integrity: sha512-Z+suHH+7LSE40WfUeZPIxSxypCWvrzdVc60xAjUShZeT5eMWM0/FQUduq3HjluyfAHWvC/aOBkT1pTZktyF/jg==}
-    engines: {node: '>= 0.12'}
-
-  find-node-modules@2.1.3:
-    resolution: {integrity: sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==}
-
-  find-root@1.1.0:
-    resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==}
-
-  find-up@2.1.0:
-    resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==}
-    engines: {node: '>=4'}
-
-  find-up@3.0.0:
-    resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==}
-    engines: {node: '>=6'}
-
-  find-up@4.1.0:
-    resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
-    engines: {node: '>=8'}
-
-  find-up@5.0.0:
-    resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
-    engines: {node: '>=10'}
-
-  findup-sync@4.0.0:
-    resolution: {integrity: sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==}
-    engines: {node: '>= 8'}
-
-  flat-cache@3.0.4:
-    resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==}
-    engines: {node: ^10.12.0 || >=12.0.0}
-
-  flatted@3.2.7:
-    resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==}
-
-  flv.js@1.6.2:
-    resolution: {integrity: sha512-xre4gUbX1MPtgQRKj2pxJENp/RnaHaxYvy3YToVVCrSmAWUu85b9mug6pTXF6zakUjNP2lFWZ1rkSX7gxhB/2A==}
-
-  follow-redirects@1.15.2:
-    resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==}
-    engines: {node: '>=4.0'}
-    peerDependencies:
-      debug: '*'
-    peerDependenciesMeta:
-      debug:
-        optional: true
-
-  for-each@0.3.3:
-    resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
-
-  forever-agent@0.6.1:
-    resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==}
-
-  fork-ts-checker-webpack-plugin@7.3.0:
-    resolution: {integrity: sha512-IN+XTzusCjR5VgntYFgxbxVx3WraPRnKehBFrf00cMSrtUuW9MsG9dhL6MWpY6MkjC3wVwoujfCDgZZCQwbswA==}
-    engines: {node: '>=12.13.0', yarn: '>=1.0.0'}
-    peerDependencies:
-      typescript: '>3.6.0'
-      vue-template-compiler: '*'
-      webpack: ^5.11.0
-    peerDependenciesMeta:
-      vue-template-compiler:
-        optional: true
-
-  form-data@2.3.3:
-    resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==}
-    engines: {node: '>= 0.12'}
-
-  form-data@4.0.0:
-    resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
-    engines: {node: '>= 6'}
-
-  formstream@1.3.1:
-    resolution: {integrity: sha512-FkW++ub+VbE5dpwukJVDizNWhSgp8FhmhI65pF7BZSVStBqe6Wgxe2Z9/Vhsn7l7nXCPwP+G1cyYlX8VwWOf0g==}
-
-  forwarded@0.2.0:
-    resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
-    engines: {node: '>= 0.6'}
-
-  fraction.js@4.2.0:
-    resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==}
-
-  fresh@0.5.2:
-    resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
-    engines: {node: '>= 0.6'}
-
-  fs-extra@10.1.0:
-    resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
-    engines: {node: '>=12'}
-
-  fs-extra@8.1.0:
-    resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==}
-    engines: {node: '>=6 <7 || >=8'}
-
-  fs-extra@9.1.0:
-    resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
-    engines: {node: '>=10'}
-
-  fs-minipass@2.1.0:
-    resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
-    engines: {node: '>= 8'}
-
-  fs-monkey@1.0.3:
-    resolution: {integrity: sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==}
-
-  fs.realpath@1.0.0:
-    resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
-
-  fsevents@2.3.2:
-    resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
-    engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
-    os: [darwin]
-
-  function-bind@1.1.1:
-    resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
-
-  function.prototype.name@1.1.5:
-    resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==}
-    engines: {node: '>= 0.4'}
-
-  functions-have-names@1.2.3:
-    resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
-
-  gauge@3.0.2:
-    resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==}
-    engines: {node: '>=10'}
-
-  gensync@1.0.0-beta.2:
-    resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
-    engines: {node: '>=6.9.0'}
-
-  get-caller-file@2.0.5:
-    resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
-    engines: {node: 6.* || 8.* || >= 10.*}
-
-  get-intrinsic@1.2.0:
-    resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==}
-
-  get-intrinsic@1.2.1:
-    resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==}
-
-  get-pkg-repo@4.2.1:
-    resolution: {integrity: sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==}
-    engines: {node: '>=6.9.0'}
-    hasBin: true
-
-  get-port@6.1.2:
-    resolution: {integrity: sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
-  get-ready@1.0.0:
-    resolution: {integrity: sha512-mFXCZPJIlcYcth+N8267+mghfYN9h3EhsDa6JSnbA3Wrhh/XFpuowviFcsDeYZtKspQyWyJqfs4O6P8CHeTwzw==}
-
-  get-stream@5.2.0:
-    resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==}
-    engines: {node: '>=8'}
-
-  get-stream@6.0.1:
-    resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
-    engines: {node: '>=10'}
-
-  get-symbol-description@1.0.0:
-    resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==}
-    engines: {node: '>= 0.4'}
-
-  get-tsconfig@4.6.2:
-    resolution: {integrity: sha512-E5XrT4CbbXcXWy+1jChlZmrmCwd5KGx502kDCXJJ7y898TtWW9FwoG5HfOLVRKmlmDGkWN2HM9Ho+/Y8F0sJDg==}
-
-  get-tsconfig@4.7.0:
-    resolution: {integrity: sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==}
-
-  getpass@0.1.7:
-    resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==}
-
-  git-raw-commits@2.0.11:
-    resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==}
-    engines: {node: '>=10'}
-    hasBin: true
-
-  git-remote-origin-url@2.0.0:
-    resolution: {integrity: sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==}
-    engines: {node: '>=4'}
-
-  git-semver-tags@4.1.1:
-    resolution: {integrity: sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==}
-    engines: {node: '>=10'}
-    hasBin: true
-
-  gitconfiglocal@1.0.0:
-    resolution: {integrity: sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==}
-
-  glob-parent@5.1.2:
-    resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
-    engines: {node: '>= 6'}
-
-  glob-parent@6.0.2:
-    resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
-    engines: {node: '>=10.13.0'}
-
-  glob-to-regexp@0.4.1:
-    resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
-
-  glob@7.2.3:
-    resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
-
-  global-dirs@0.1.1:
-    resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==}
-    engines: {node: '>=4'}
-
-  global-modules@1.0.0:
-    resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==}
-    engines: {node: '>=0.10.0'}
-
-  global-prefix@1.0.2:
-    resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==}
-    engines: {node: '>=0.10.0'}
-
-  global@4.4.0:
-    resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==}
-
-  globals@11.12.0:
-    resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
-    engines: {node: '>=4'}
-
-  globals@13.20.0:
-    resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==}
-    engines: {node: '>=8'}
-
-  globalthis@1.0.3:
-    resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==}
-    engines: {node: '>= 0.4'}
-
-  globby@11.1.0:
-    resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
-    engines: {node: '>=10'}
-
-  globby@13.2.2:
-    resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
-  globby@7.1.1:
-    resolution: {integrity: sha512-yANWAN2DUcBtuus5Cpd+SKROzXHs2iVXFZt/Ykrfz6SAXqacLX25NZpltE+39ceMexYF4TtEadjuSTw8+3wX4g==}
-    engines: {node: '>=4'}
-
-  gopd@1.0.1:
-    resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
-
-  graceful-fs@4.2.11:
-    resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
-
-  grapheme-splitter@1.0.4:
-    resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
-
-  graphemer@1.4.0:
-    resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
-
-  gzip-size@6.0.0:
-    resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==}
-    engines: {node: '>=10'}
-
-  handle-thing@2.0.1:
-    resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==}
-
-  handlebars@4.7.7:
-    resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==}
-    engines: {node: '>=0.4.7'}
-    hasBin: true
-
-  har-schema@2.0.0:
-    resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==}
-    engines: {node: '>=4'}
-
-  har-validator@5.1.5:
-    resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==}
-    engines: {node: '>=6'}
-    deprecated: this library is no longer supported
-
-  hard-rejection@2.1.0:
-    resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==}
-    engines: {node: '>=6'}
-
-  has-bigints@1.0.2:
-    resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
-
-  has-flag@3.0.0:
-    resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
-    engines: {node: '>=4'}
-
-  has-flag@4.0.0:
-    resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
-    engines: {node: '>=8'}
-
-  has-property-descriptors@1.0.0:
-    resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
-
-  has-proto@1.0.1:
-    resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
-    engines: {node: '>= 0.4'}
-
-  has-symbols@1.0.3:
-    resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
-    engines: {node: '>= 0.4'}
-
-  has-tostringtag@1.0.0:
-    resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==}
-    engines: {node: '>= 0.4'}
-
-  has-unicode@2.0.1:
-    resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==}
-
-  has@1.0.3:
-    resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
-    engines: {node: '>= 0.4.0'}
-
-  hash-sum@1.0.2:
-    resolution: {integrity: sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==}
-
-  hash-sum@2.0.0:
-    resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==}
-
-  he@1.2.0:
-    resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
-    hasBin: true
-
-  highlight.js@11.8.0:
-    resolution: {integrity: sha512-MedQhoqVdr0U6SSnWPzfiadUcDHfN/Wzq25AkXiQv9oiOO/sG0S7XkvpFIqWBl9Yq1UYyYOOVORs5UW2XlPyzg==}
-    engines: {node: '>=12.0.0'}
-
-  homedir-polyfill@1.0.3:
-    resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==}
-    engines: {node: '>=0.10.0'}
-
-  hosted-git-info@2.8.9:
-    resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
-
-  hosted-git-info@4.1.0:
-    resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==}
-    engines: {node: '>=10'}
-
-  hpack.js@2.1.6:
-    resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==}
-
-  html-encoding-sniffer@3.0.0:
-    resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==}
-    engines: {node: '>=12'}
-
-  html-entities@2.3.3:
-    resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==}
-
-  html-minifier-terser@6.1.0:
-    resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==}
-    engines: {node: '>=12'}
-    hasBin: true
-
-  html-webpack-plugin@5.5.0:
-    resolution: {integrity: sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==}
-    engines: {node: '>=10.13.0'}
-    peerDependencies:
-      webpack: ^5.20.0
-
-  html-webpack-tags-plugin@3.0.2:
-    resolution: {integrity: sha512-jZ4IHjT8AWyNa4RJ+8p0+AGkunLf1H5E/IjzW+9BOQbJ39Dy2jZULnxseXsEAiFxu6DX6z+sOZKV9rhbEDtpqA==}
-    engines: {node: '>=10'}
-    peerDependencies:
-      html-webpack-plugin: ^5.0.0
-      webpack: ^5.0.0
-
-  htmlparser2@6.1.0:
-    resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==}
-
-  http-deceiver@1.2.7:
-    resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==}
-
-  http-errors@1.6.3:
-    resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==}
-    engines: {node: '>= 0.6'}
-
-  http-errors@2.0.0:
-    resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
-    engines: {node: '>= 0.8'}
-
-  http-parser-js@0.5.8:
-    resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==}
-
-  http-proxy-agent@5.0.0:
-    resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==}
-    engines: {node: '>= 6'}
-
-  http-proxy-middleware@2.0.6:
-    resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==}
-    engines: {node: '>=12.0.0'}
-    peerDependencies:
-      '@types/express': ^4.17.13
-    peerDependenciesMeta:
-      '@types/express':
-        optional: true
-
-  http-proxy@1.18.1:
-    resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==}
-    engines: {node: '>=8.0.0'}
-
-  http-signature@1.2.0:
-    resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==}
-    engines: {node: '>=0.8', npm: '>=1.3.7'}
-
-  https-proxy-agent@5.0.1:
-    resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
-    engines: {node: '>= 6'}
-
-  human-signals@2.1.0:
-    resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
-    engines: {node: '>=10.17.0'}
-
-  human-signals@4.3.1:
-    resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==}
-    engines: {node: '>=14.18.0'}
-
-  humanize-ms@1.2.1:
-    resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
-
-  husky@7.0.4:
-    resolution: {integrity: sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==}
-    engines: {node: '>=12'}
-    hasBin: true
-
-  iconv-lite@0.4.24:
-    resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
-    engines: {node: '>=0.10.0'}
-
-  iconv-lite@0.6.3:
-    resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
-    engines: {node: '>=0.10.0'}
-
-  icss-utils@5.1.0:
-    resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==}
-    engines: {node: ^10 || ^12 || >= 14}
-    peerDependencies:
-      postcss: ^8.1.0
-
-  ieee754@1.2.1:
-    resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
-
-  ignore@3.3.10:
-    resolution: {integrity: sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==}
-
-  ignore@5.2.4:
-    resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
-    engines: {node: '>= 4'}
-
-  immediate@3.0.6:
-    resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
-
-  immutable@4.3.0:
-    resolution: {integrity: sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==}
-
-  import-fresh@3.3.0:
-    resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
-    engines: {node: '>=6'}
-
-  import-local@3.1.0:
-    resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==}
-    engines: {node: '>=8'}
-    hasBin: true
-
-  imurmurhash@0.1.4:
-    resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
-    engines: {node: '>=0.8.19'}
-
-  indent-string@4.0.0:
-    resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
-    engines: {node: '>=8'}
-
-  indent-string@5.0.0:
-    resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==}
-    engines: {node: '>=12'}
-
-  individual@2.0.0:
-    resolution: {integrity: sha512-pWt8hBCqJsUWI/HtcfWod7+N9SgAqyPEaF7JQjwzjn5vGrpg6aQ5qeAFQ7dx//UH4J1O+7xqew+gCeeFt6xN/g==}
-
-  inflight@1.0.6:
-    resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
-
-  inherits@2.0.3:
-    resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==}
-
-  inherits@2.0.4:
-    resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
-
-  ini@1.3.8:
-    resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
-
-  inquirer@6.5.2:
-    resolution: {integrity: sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==}
-    engines: {node: '>=6.0.0'}
-
-  inquirer@8.2.5:
-    resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==}
-    engines: {node: '>=12.0.0'}
-
-  internal-slot@1.0.5:
-    resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==}
-    engines: {node: '>= 0.4'}
-
-  interpret@2.2.0:
-    resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==}
-    engines: {node: '>= 0.10'}
-
-  ip@1.1.9:
-    resolution: {integrity: sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==}
-
-  ipaddr.js@1.9.1:
-    resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
-    engines: {node: '>= 0.10'}
-
-  ipaddr.js@2.0.1:
-    resolution: {integrity: sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==}
-    engines: {node: '>= 10'}
-
-  is-array-buffer@3.0.2:
-    resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==}
-
-  is-arrayish@0.2.1:
-    resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
-
-  is-bigint@1.0.4:
-    resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
-
-  is-binary-path@2.1.0:
-    resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
-    engines: {node: '>=8'}
-
-  is-boolean-object@1.1.2:
-    resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
-    engines: {node: '>= 0.4'}
-
-  is-builtin-module@3.2.1:
-    resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==}
-    engines: {node: '>=6'}
-
-  is-callable@1.2.7:
-    resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
-    engines: {node: '>= 0.4'}
-
-  is-class-hotfix@0.0.6:
-    resolution: {integrity: sha512-0n+pzCC6ICtVr/WXnN2f03TK/3BfXY7me4cjCAqT8TYXEl0+JBRoqBo94JJHXcyDSLUeWbNX8Fvy5g5RJdAstQ==}
-
-  is-core-module@2.13.0:
-    resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==}
-
-  is-date-object@1.0.5:
-    resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
-    engines: {node: '>= 0.4'}
-
-  is-docker@2.2.1:
-    resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
-    engines: {node: '>=8'}
-    hasBin: true
-
-  is-docker@3.0.0:
-    resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-    hasBin: true
-
-  is-extendable@0.1.1:
-    resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
-    engines: {node: '>=0.10.0'}
-
-  is-extglob@2.1.1:
-    resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
-    engines: {node: '>=0.10.0'}
-
-  is-fullwidth-code-point@2.0.0:
-    resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==}
-    engines: {node: '>=4'}
-
-  is-fullwidth-code-point@3.0.0:
-    resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
-    engines: {node: '>=8'}
-
-  is-fullwidth-code-point@4.0.0:
-    resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
-    engines: {node: '>=12'}
-
-  is-function@1.0.2:
-    resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==}
-
-  is-glob@4.0.3:
-    resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
-    engines: {node: '>=0.10.0'}
-
-  is-inside-container@1.0.0:
-    resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
-    engines: {node: '>=14.16'}
-    hasBin: true
-
-  is-interactive@1.0.0:
-    resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
-    engines: {node: '>=8'}
-
-  is-module@1.0.0:
-    resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
-
-  is-negative-zero@2.0.2:
-    resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==}
-    engines: {node: '>= 0.4'}
-
-  is-number-object@1.0.7:
-    resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
-    engines: {node: '>= 0.4'}
-
-  is-number@7.0.0:
-    resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
-    engines: {node: '>=0.12.0'}
-
-  is-obj@2.0.0:
-    resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
-    engines: {node: '>=8'}
-
-  is-path-inside@3.0.3:
-    resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
-    engines: {node: '>=8'}
-
-  is-path-inside@4.0.0:
-    resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==}
-    engines: {node: '>=12'}
-
-  is-plain-obj@1.1.0:
-    resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==}
-    engines: {node: '>=0.10.0'}
-
-  is-plain-obj@3.0.0:
-    resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==}
-    engines: {node: '>=10'}
-
-  is-plain-object@2.0.4:
-    resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
-    engines: {node: '>=0.10.0'}
-
-  is-potential-custom-element-name@1.0.1:
-    resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
-
-  is-reference@1.2.1:
-    resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
-
-  is-regex@1.1.4:
-    resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
-    engines: {node: '>= 0.4'}
-
-  is-shared-array-buffer@1.0.2:
-    resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==}
-
-  is-stream@2.0.1:
-    resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
-    engines: {node: '>=8'}
-
-  is-stream@3.0.0:
-    resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
-  is-string@1.0.7:
-    resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
-    engines: {node: '>= 0.4'}
-
-  is-symbol@1.0.4:
-    resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
-    engines: {node: '>= 0.4'}
-
-  is-text-path@1.0.1:
-    resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==}
-    engines: {node: '>=0.10.0'}
-
-  is-type-of@1.4.0:
-    resolution: {integrity: sha512-EddYllaovi5ysMLMEN7yzHEKh8A850cZ7pykrY1aNRQGn/CDjRDE9qEWbIdt7xGEVJmjBXzU/fNnC4ABTm8tEQ==}
-
-  is-typed-array@1.1.10:
-    resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==}
-    engines: {node: '>= 0.4'}
-
-  is-typedarray@1.0.0:
-    resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==}
-
-  is-unicode-supported@0.1.0:
-    resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
-    engines: {node: '>=10'}
-
-  is-utf8@0.2.1:
-    resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==}
-
-  is-weakref@1.0.2:
-    resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
-
-  is-windows@1.0.2:
-    resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
-    engines: {node: '>=0.10.0'}
-
-  is-wsl@2.2.0:
-    resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
-    engines: {node: '>=8'}
-
-  isarray@1.0.0:
-    resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
-
-  isexe@2.0.0:
-    resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
-
-  isobject@3.0.1:
-    resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
-    engines: {node: '>=0.10.0'}
-
-  isstream@0.1.2:
-    resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==}
-
-  jest-worker@26.6.2:
-    resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==}
-    engines: {node: '>= 10.13.0'}
-
-  jest-worker@27.5.1:
-    resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
-    engines: {node: '>= 10.13.0'}
-
-  jest-worker@28.1.3:
-    resolution: {integrity: sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==}
-    engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0}
-
-  jiti@1.18.2:
-    resolution: {integrity: sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==}
-    hasBin: true
-
-  joycon@3.1.1:
-    resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
-    engines: {node: '>=10'}
-
-  js-base64@2.6.4:
-    resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==}
-
-  js-cookie@3.0.5:
-    resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==}
-    engines: {node: '>=14'}
-
-  js-sdsl@4.3.0:
-    resolution: {integrity: sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==}
-
-  js-tokens@4.0.0:
-    resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
-
-  js-yaml@4.1.0:
-    resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
-    hasBin: true
-
-  jsbn@0.1.1:
-    resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==}
-
-  jsdom@19.0.0:
-    resolution: {integrity: sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==}
-    engines: {node: '>=12'}
-    peerDependencies:
-      canvas: ^2.5.0
-    peerDependenciesMeta:
-      canvas:
-        optional: true
-
-  jsesc@0.5.0:
-    resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
-    hasBin: true
-
-  jsesc@2.5.2:
-    resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
-    engines: {node: '>=4'}
-    hasBin: true
-
-  json-parse-better-errors@1.0.2:
-    resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==}
-
-  json-parse-even-better-errors@2.3.1:
-    resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
-
-  json-schema-traverse@0.4.1:
-    resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
-
-  json-schema-traverse@1.0.0:
-    resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
-
-  json-schema-typed@7.0.3:
-    resolution: {integrity: sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==}
-
-  json-schema@0.4.0:
-    resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==}
-
-  json-stable-stringify-without-jsonify@1.0.1:
-    resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
-
-  json-stringify-safe@5.0.1:
-    resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
-
-  json5@1.0.2:
-    resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
-    hasBin: true
-
-  json5@2.2.3:
-    resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
-    engines: {node: '>=6'}
-    hasBin: true
-
-  jsonc-parser@3.2.0:
-    resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==}
-
-  jsonfile@4.0.0:
-    resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
-
-  jsonfile@6.1.0:
-    resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
-
-  jsonparse@1.3.1:
-    resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
-    engines: {'0': node >= 0.2.0}
-
-  jsprim@1.4.2:
-    resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==}
-    engines: {node: '>=0.6.0'}
-
-  jstoxml@2.2.9:
-    resolution: {integrity: sha512-OYWlK0j+roh+eyaMROlNbS5cd5R25Y+IUpdl7cNdB8HNrkgwQzIS7L9MegxOiWNBj9dQhA/yAxiMwCC5mwNoBw==}
-
-  jszip@3.10.1:
-    resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==}
-
-  keycode@2.2.0:
-    resolution: {integrity: sha512-ps3I9jAdNtRpJrbBvQjpzyFbss/skHqzS+eu4RxKLaEAtFqkjZaB6TZMSivPbLxf4K7VI4SjR0P5mRCX5+Q25A==}
-
-  kind-of@6.0.3:
-    resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
-    engines: {node: '>=0.10.0'}
-
-  klona@2.0.6:
-    resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==}
-    engines: {node: '>= 8'}
-
-  launch-editor@2.6.0:
-    resolution: {integrity: sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==}
-
-  levn@0.4.1:
-    resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
-    engines: {node: '>= 0.8.0'}
-
-  lie@3.3.0:
-    resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==}
-
-  lilconfig@2.0.5:
-    resolution: {integrity: sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==}
-    engines: {node: '>=10'}
-
-  lilconfig@2.1.0:
-    resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
-    engines: {node: '>=10'}
-
-  lines-and-columns@1.2.4:
-    resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
-
-  linkify-it@5.0.0:
-    resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==}
-
-  lint-staged@12.5.0:
-    resolution: {integrity: sha512-BKLUjWDsKquV/JuIcoQW4MSAI3ggwEImF1+sB4zaKvyVx1wBk3FsG7UK9bpnmBTN1pm7EH2BBcMwINJzCRv12g==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-    hasBin: true
-
-  listr2@4.0.5:
-    resolution: {integrity: sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==}
-    engines: {node: '>=12'}
-    peerDependencies:
-      enquirer: '>= 2.3.0 < 3'
-    peerDependenciesMeta:
-      enquirer:
-        optional: true
-
-  load-json-file@4.0.0:
-    resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==}
-    engines: {node: '>=4'}
-
-  loader-runner@4.3.0:
-    resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==}
-    engines: {node: '>=6.11.5'}
-
-  loader-utils@1.4.2:
-    resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==}
-    engines: {node: '>=4.0.0'}
-
-  loader-utils@2.0.4:
-    resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==}
-    engines: {node: '>=8.9.0'}
-
-  local-pkg@0.4.3:
-    resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==}
-    engines: {node: '>=14'}
-
-  locate-path@2.0.0:
-    resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==}
-    engines: {node: '>=4'}
-
-  locate-path@3.0.0:
-    resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==}
-    engines: {node: '>=6'}
-
-  locate-path@5.0.0:
-    resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
-    engines: {node: '>=8'}
-
-  locate-path@6.0.0:
-    resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
-    engines: {node: '>=10'}
-
-  lodash-es@4.17.21:
-    resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
-
-  lodash.debounce@4.0.8:
-    resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
-
-  lodash.ismatch@4.4.0:
-    resolution: {integrity: sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==}
-
-  lodash.isplainobject@4.0.6:
-    resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
-
-  lodash.map@4.6.0:
-    resolution: {integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==}
-
-  lodash.memoize@4.1.2:
-    resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
-
-  lodash.merge@4.6.2:
-    resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
-
-  lodash.mergewith@4.6.2:
-    resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==}
-
-  lodash.uniq@4.5.0:
-    resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
-
-  lodash@4.17.21:
-    resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
-
-  log-symbols@4.1.0:
-    resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
-    engines: {node: '>=10'}
-
-  log-update@4.0.0:
-    resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==}
-    engines: {node: '>=10'}
-
-  log4js@6.9.1:
-    resolution: {integrity: sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==}
-    engines: {node: '>=8.0'}
-
-  longest@2.0.1:
-    resolution: {integrity: sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==}
-    engines: {node: '>=0.10.0'}
-
-  lower-case@2.0.2:
-    resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
-
-  lru-cache@10.4.3:
-    resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
-
-  lru-cache@5.1.1:
-    resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
-
-  lru-cache@6.0.0:
-    resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
-    engines: {node: '>=10'}
-
-  m3u8-parser@6.2.0:
-    resolution: {integrity: sha512-qlC00JTxYOxawcqg+RB8jbyNwL3foY/nCY61kyWP+RCuJE9APLeqB/nSlTjb4Mg0yRmyERgjswpdQxMvkeoDrg==}
-
-  magic-string@0.25.9:
-    resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
-
-  magic-string@0.26.7:
-    resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==}
-    engines: {node: '>=12'}
-
-  magic-string@0.27.0:
-    resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==}
-    engines: {node: '>=12'}
-
-  magic-string@0.30.0:
-    resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==}
-    engines: {node: '>=12'}
-
-  magic-string@0.30.15:
-    resolution: {integrity: sha512-zXeaYRgZ6ldS1RJJUrMrYgNJ4fdwnyI6tVqoiIhyCyv5IVTK9BU8Ic2l253GGETQHxI4HNUwhJ3fjDhKqEoaAw==}
-
-  make-dir@3.1.0:
-    resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
-    engines: {node: '>=8'}
-
-  make-error@1.3.6:
-    resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
-
-  map-obj@1.0.1:
-    resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==}
-    engines: {node: '>=0.10.0'}
-
-  map-obj@4.3.0:
-    resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==}
-    engines: {node: '>=8'}
-
-  markdown-it-image-figures@2.1.1:
-    resolution: {integrity: sha512-mwXSQ2nPeVUzCMIE3HlLvjRioopiqyJLNph0pyx38yf9mpqFDhNGnMpAXF9/A2Xv0oiF2cVyg9xwfF0HNAz05g==}
-    engines: {node: '>=12.0.0'}
-    peerDependencies:
-      markdown-it: '*'
-
-  markdown-it-sub@2.0.0:
-    resolution: {integrity: sha512-iCBKgwCkfQBRg2vApy9vx1C1Tu6D8XYo8NvevI3OlwzBRmiMtsJ2sXupBgEA7PPxiDwNni3qIUkhZ6j5wofDUA==}
-
-  markdown-it-sup@2.0.0:
-    resolution: {integrity: sha512-5VgmdKlkBd8sgXuoDoxMpiU+BiEt3I49GItBzzw7Mxq9CxvnhE/k09HFli09zgfFDRixDQDfDxi0mgBCXtaTvA==}
-
-  markdown-it@14.1.0:
-    resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==}
-    hasBin: true
-
-  md-editor-v3@4.21.3:
-    resolution: {integrity: sha512-9+RCioqFIWSExTsG0jf9T/RTrFhtH8SpRcKVjHeEQSlExAr/zsgYt/M9XUy/nuGx87hgNKDzK0PXp/uOlDumAw==}
-    peerDependencies:
-      vue: ^3.2.47
-
-  mdn-data@2.0.14:
-    resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==}
-
-  mdurl@2.0.0:
-    resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==}
-
-  media-typer@0.3.0:
-    resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
-    engines: {node: '>= 0.6'}
-
-  medium-zoom@1.1.0:
-    resolution: {integrity: sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==}
-
-  memfs@3.4.13:
-    resolution: {integrity: sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==}
-    engines: {node: '>= 4.0.0'}
-
-  meow@8.1.2:
-    resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==}
-    engines: {node: '>=10'}
-
-  merge-descriptors@1.0.1:
-    resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==}
-
-  merge-stream@2.0.0:
-    resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
-
-  merge2@1.4.1:
-    resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
-    engines: {node: '>= 8'}
-
-  merge@2.1.1:
-    resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==}
-
-  methods@1.1.2:
-    resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
-    engines: {node: '>= 0.6'}
-
-  micromatch@4.0.5:
-    resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
-    engines: {node: '>=8.6'}
-
-  mime-db@1.52.0:
-    resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
-    engines: {node: '>= 0.6'}
-
-  mime-types@2.1.35:
-    resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
-    engines: {node: '>= 0.6'}
-
-  mime@1.6.0:
-    resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
-    engines: {node: '>=4'}
-    hasBin: true
-
-  mime@2.6.0:
-    resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==}
-    engines: {node: '>=4.0.0'}
-    hasBin: true
-
-  mimic-fn@1.2.0:
-    resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==}
-    engines: {node: '>=4'}
-
-  mimic-fn@2.1.0:
-    resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
-    engines: {node: '>=6'}
-
-  mimic-fn@3.1.0:
-    resolution: {integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==}
-    engines: {node: '>=8'}
-
-  mimic-fn@4.0.0:
-    resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
-    engines: {node: '>=12'}
-
-  mimic-response@2.1.0:
-    resolution: {integrity: sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==}
-    engines: {node: '>=8'}
-
-  min-document@2.19.0:
-    resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==}
-
-  min-indent@1.0.1:
-    resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
-    engines: {node: '>=4'}
-
-  mini-css-extract-plugin@2.7.5:
-    resolution: {integrity: sha512-9HaR++0mlgom81s95vvNjxkg52n2b5s//3ZTI1EtzFb98awsLSivs2LMsVqnQ3ay0PVhqWcGNyDaTE961FOcjQ==}
-    engines: {node: '>= 12.13.0'}
-    peerDependencies:
-      webpack: ^5.0.0
-
-  minimalistic-assert@1.0.1:
-    resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==}
-
-  minimatch@3.1.2:
-    resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
-
-  minimatch@7.4.6:
-    resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==}
-    engines: {node: '>=10'}
-
-  minimist-options@4.1.0:
-    resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==}
-    engines: {node: '>= 6'}
-
-  minimist@1.2.7:
-    resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==}
-
-  minimist@1.2.8:
-    resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
-
-  minipass@3.3.6:
-    resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==}
-    engines: {node: '>=8'}
-
-  minipass@5.0.0:
-    resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==}
-    engines: {node: '>=8'}
-
-  minizlib@2.1.2:
-    resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
-    engines: {node: '>= 8'}
-
-  mkdirp@0.5.6:
-    resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
-    hasBin: true
-
-  mkdirp@1.0.4:
-    resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
-    engines: {node: '>=10'}
-    hasBin: true
-
-  mockdate@3.0.5:
-    resolution: {integrity: sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ==}
-
-  modify-values@1.0.1:
-    resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==}
-    engines: {node: '>=0.10.0'}
-
-  mount-point@3.0.0:
-    resolution: {integrity: sha512-jAhfD7ZCG+dbESZjcY1SdFVFqSJkh/yGbdsifHcPkvuLRO5ugK0Ssmd9jdATu29BTd4JiN+vkpMzVvsUgP3SZA==}
-    engines: {node: '>=0.10.0'}
-
-  move-file@3.1.0:
-    resolution: {integrity: sha512-4aE3U7CCBWgrQlQDMq8da4woBWDGHioJFiOZ8Ie6Yq2uwYQ9V2kGhTz4x3u6Wc+OU17nw0yc3rJ/lQ4jIiPe3A==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
-  mp4box@0.5.2:
-    resolution: {integrity: sha512-zRmGlvxy+YdW3Dmt+TR4xPHynbxwXtAQDTN/Fo9N3LMxaUlB2C5KmZpzYyGKy4c7k4Jf3RCR0A2pm9SZELOLXw==}
-
-  mpd-parser@1.1.1:
-    resolution: {integrity: sha512-uZ/db5wQdlQn1L+OD49YXBhPI9UGeK1SeQE4D5EoaJIhf0WM9X3HDj8d+9PjoG06CgCvGZw3YW/wsHku+CH3yA==}
-    hasBin: true
-
-  mpegts.js@1.7.3:
-    resolution: {integrity: sha512-kqZ1C1IsbAQN72cK8vMrzKeM7hwrwSBbFAwVAc7PPweOeoZxCANrc7fAVDKMfYUzxdNkMTnec9tVmlxmKZB0TQ==}
-
-  mrmime@1.0.1:
-    resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==}
-    engines: {node: '>=10'}
-
-  ms@2.0.0:
-    resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
-
-  ms@2.1.2:
-    resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
-
-  ms@2.1.3:
-    resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
-
-  multicast-dns@7.2.5:
-    resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==}
-    hasBin: true
-
-  mutation-observer@1.0.3:
-    resolution: {integrity: sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA==}
-
-  mute-stream@0.0.7:
-    resolution: {integrity: sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==}
-
-  mute-stream@0.0.8:
-    resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
-
-  mux.js@6.3.0:
-    resolution: {integrity: sha512-/QTkbSAP2+w1nxV+qTcumSDN5PA98P0tjrADijIzQHe85oBK3Akhy9AHlH0ne/GombLMz1rLyvVsmrgRxoPDrQ==}
-    engines: {node: '>=8', npm: '>=5'}
-    hasBin: true
-
-  mz@2.7.0:
-    resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
-
-  naive-ui@2.40.2:
-    resolution: {integrity: sha512-iOpk9/SdAxOPnbFDiN9c0N6vzRJiyC+xgs8rqeaulLvxg0ix39xA3noordy9wyq0YUbqS3ID6jPdld/kW4KSEg==}
-    peerDependencies:
-      vue: ^3.0.0
-
-  nan@2.17.0:
-    resolution: {integrity: sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==}
-
-  nan@2.18.0:
-    resolution: {integrity: sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==}
-
-  nanoid@3.3.4:
-    resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
-    engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
-    hasBin: true
-
-  nanoid@3.3.8:
-    resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
-    engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
-    hasBin: true
-
-  natural-compare-lite@1.4.0:
-    resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
-
-  natural-compare@1.4.0:
-    resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
-
-  negotiator@0.6.3:
-    resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
-    engines: {node: '>= 0.6'}
-
-  neo-async@2.6.2:
-    resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
-
-  no-case@3.0.4:
-    resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
-
-  node-abort-controller@3.1.1:
-    resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==}
-
-  node-emoji@1.11.0:
-    resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==}
-
-  node-fetch@2.6.12:
-    resolution: {integrity: sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==}
-    engines: {node: 4.x || >=6.0.0}
-    peerDependencies:
-      encoding: ^0.1.0
-    peerDependenciesMeta:
-      encoding:
-        optional: true
-
-  node-forge@1.3.1:
-    resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==}
-    engines: {node: '>= 6.13.0'}
-
-  node-releases@2.0.10:
-    resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==}
-
-  node-ssh@13.1.0:
-    resolution: {integrity: sha512-GLcw49yFd9+rUpP+FgX6wrF/N90cmuDl2n0i8d3L828b6riRjkb9w3SS+XvviRWbrAhLxuMKywFqxvQDZQ1bug==}
-    engines: {node: '>= 10'}
-
-  nopt@5.0.0:
-    resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==}
-    engines: {node: '>=6'}
-    hasBin: true
-
-  normalize-package-data@2.5.0:
-    resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
-
-  normalize-package-data@3.0.3:
-    resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==}
-    engines: {node: '>=10'}
-
-  normalize-path@3.0.0:
-    resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
-    engines: {node: '>=0.10.0'}
-
-  normalize-range@0.1.2:
-    resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
-    engines: {node: '>=0.10.0'}
-
-  normalize-url@6.1.0:
-    resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==}
-    engines: {node: '>=10'}
-
-  notepack.io@2.2.0:
-    resolution: {integrity: sha512-9b5w3t5VSH6ZPosoYnyDONnUTF8o0UkBw7JLA6eBlYJWyGT1Q3vQa8Hmuj1/X6RYvHjjygBDgw6fJhe0JEojfw==}
-
-  npm-run-path@3.1.0:
-    resolution: {integrity: sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==}
-    engines: {node: '>=8'}
-
-  npm-run-path@4.0.1:
-    resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
-    engines: {node: '>=8'}
-
-  npm-run-path@5.1.0:
-    resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
-  npmlog@5.0.1:
-    resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==}
-
-  nth-check@2.1.1:
-    resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
-
-  nwsapi@2.2.7:
-    resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==}
-
-  oauth-sign@0.9.0:
-    resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==}
-
-  object-assign@4.1.1:
-    resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
-    engines: {node: '>=0.10.0'}
-
-  object-inspect@1.12.3:
-    resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==}
-
-  object-keys@1.1.1:
-    resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
-    engines: {node: '>= 0.4'}
-
-  object.assign@4.1.4:
-    resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==}
-    engines: {node: '>= 0.4'}
-
-  object.fromentries@2.0.6:
-    resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==}
-    engines: {node: '>= 0.4'}
-
-  object.groupby@1.0.0:
-    resolution: {integrity: sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==}
-
-  object.values@1.1.6:
-    resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==}
-    engines: {node: '>= 0.4'}
-
-  obuf@1.1.2:
-    resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==}
-
-  on-finished@2.4.1:
-    resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
-    engines: {node: '>= 0.8'}
-
-  on-headers@1.0.2:
-    resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==}
-    engines: {node: '>= 0.8'}
-
-  once@1.4.0:
-    resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
-
-  onetime@2.0.1:
-    resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==}
-    engines: {node: '>=4'}
-
-  onetime@5.1.2:
-    resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
-    engines: {node: '>=6'}
-
-  onetime@6.0.0:
-    resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
-    engines: {node: '>=12'}
-
-  open@8.4.2:
-    resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
-    engines: {node: '>=12'}
-
-  open@9.1.0:
-    resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==}
-    engines: {node: '>=14.16'}
-
-  opener@1.5.2:
-    resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==}
-    hasBin: true
-
-  opfs-tools@0.6.1:
-    resolution: {integrity: sha512-UAopBwr64jzyrNUr4LWWhLGZY2dAzNIKX/CTI48wR5V88dx3aqx0DN+NdosMY9vZ0heb12ZMTPQ0XpoC4cfSOA==}
-
-  optionator@0.9.1:
-    resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==}
-    engines: {node: '>= 0.8.0'}
-
-  ora@5.4.1:
-    resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
-    engines: {node: '>=10'}
-
-  os-homedir@1.0.2:
-    resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==}
-    engines: {node: '>=0.10.0'}
-
-  os-name@1.0.3:
-    resolution: {integrity: sha512-f5estLO2KN8vgtTRaILIgEGBoBrMnZ3JQ7W9TMZCnOIGwHe8TRGSpcagnWDo+Dfhd/z08k9Xe75hvciJJ8Qaew==}
-    engines: {node: '>=0.10.0'}
-    hasBin: true
-
-  os-tmpdir@1.0.2:
-    resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
-    engines: {node: '>=0.10.0'}
-
-  osx-release@1.1.0:
-    resolution: {integrity: sha512-ixCMMwnVxyHFQLQnINhmIpWqXIfS2YOXchwQrk+OFzmo6nDjQ0E4KXAyyUh0T0MZgV4bUhkRrAbVqlE4yLVq4A==}
-    engines: {node: '>=0.10.0'}
-    hasBin: true
-
-  oxlint@0.13.0:
-    resolution: {integrity: sha512-YUwybs9U5siS54Q+vVkxMQXiNF6LHeLRxihj6toUFwrYSxL1wsV6HUiAS8Vig+USDIGoEDdGBgpq29iwWDjYHw==}
-    engines: {node: '>=14.*'}
-    hasBin: true
-
-  p-finally@2.0.1:
-    resolution: {integrity: sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==}
-    engines: {node: '>=8'}
-
-  p-limit@1.3.0:
-    resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==}
-    engines: {node: '>=4'}
-
-  p-limit@2.3.0:
-    resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
-    engines: {node: '>=6'}
-
-  p-limit@3.1.0:
-    resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
-    engines: {node: '>=10'}
-
-  p-locate@2.0.0:
-    resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==}
-    engines: {node: '>=4'}
-
-  p-locate@3.0.0:
-    resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==}
-    engines: {node: '>=6'}
-
-  p-locate@4.1.0:
-    resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
-    engines: {node: '>=8'}
-
-  p-locate@5.0.0:
-    resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
-    engines: {node: '>=10'}
-
-  p-map@4.0.0:
-    resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==}
-    engines: {node: '>=10'}
-
-  p-map@5.5.0:
-    resolution: {integrity: sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==}
-    engines: {node: '>=12'}
-
-  p-retry@4.6.2:
-    resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==}
-    engines: {node: '>=8'}
-
-  p-try@1.0.0:
-    resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==}
-    engines: {node: '>=4'}
-
-  p-try@2.2.0:
-    resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
-    engines: {node: '>=6'}
-
-  pako@1.0.11:
-    resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
-
-  param-case@3.0.4:
-    resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==}
-
-  parent-module@1.0.1:
-    resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
-    engines: {node: '>=6'}
-
-  parse-json@4.0.0:
-    resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==}
-    engines: {node: '>=4'}
-
-  parse-json@5.2.0:
-    resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
-    engines: {node: '>=8'}
-
-  parse-passwd@1.0.0:
-    resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==}
-    engines: {node: '>=0.10.0'}
-
-  parse5@6.0.1:
-    resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==}
-
-  parseurl@1.3.3:
-    resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
-    engines: {node: '>= 0.8'}
-
-  pascal-case@3.1.2:
-    resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==}
-
-  path-exists@3.0.0:
-    resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
-    engines: {node: '>=4'}
-
-  path-exists@4.0.0:
-    resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
-    engines: {node: '>=8'}
-
-  path-exists@5.0.0:
-    resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
-  path-is-absolute@1.0.1:
-    resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
-    engines: {node: '>=0.10.0'}
-
-  path-key@3.1.1:
-    resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
-    engines: {node: '>=8'}
-
-  path-key@4.0.0:
-    resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
-    engines: {node: '>=12'}
-
-  path-parse@1.0.7:
-    resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
-
-  path-to-regexp@0.1.7:
-    resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
-
-  path-type@3.0.0:
-    resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==}
-    engines: {node: '>=4'}
-
-  path-type@4.0.0:
-    resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
-    engines: {node: '>=8'}
-
-  pathe@1.1.0:
-    resolution: {integrity: sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==}
-
-  pause-stream@0.0.11:
-    resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==}
-
-  performance-now@2.1.0:
-    resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==}
-
-  picocolors@1.0.0:
-    resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
-
-  picocolors@1.1.1:
-    resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
-
-  picomatch@2.3.1:
-    resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
-    engines: {node: '>=8.6'}
-
-  pidtree@0.5.0:
-    resolution: {integrity: sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==}
-    engines: {node: '>=0.10'}
-    hasBin: true
-
-  pify@2.3.0:
-    resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
-    engines: {node: '>=0.10.0'}
-
-  pify@3.0.0:
-    resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==}
-    engines: {node: '>=4'}
-
-  pinia-plugin-persistedstate@3.2.0:
-    resolution: {integrity: sha512-tZbNGf2vjAQcIm7alK40sE51Qu/m9oWr+rEgNm/2AWr1huFxj72CjvpQcIQzMknDBJEkQznCLAGtJTIcLKrKdw==}
-    peerDependencies:
-      pinia: ^2.0.0
-
-  pinia@2.0.33:
-    resolution: {integrity: sha512-HOj1yVV2itw6rNIrR2f7+MirGNxhORjrULL8GWgRwXsGSvEqIQ+SE0MYt6cwtpegzCda3i+rVTZM+AM7CG+kRg==}
-    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
-
-  pinkie-promise@2.0.1:
-    resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==}
-    engines: {node: '>=0.10.0'}
-
-  pinkie@2.0.4:
-    resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==}
-    engines: {node: '>=0.10.0'}
-
-  pkcs7@1.0.4:
-    resolution: {integrity: sha512-afRERtHn54AlwaF2/+LFszyAANTCggGilmcmILUzEjvs3XgFZT+xE6+QWQcAGmu4xajy+Xtj7acLOPdx5/eXWQ==}
-    hasBin: true
-
-  pkg-dir@4.2.0:
-    resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
-    engines: {node: '>=8'}
-
-  pkg-up@3.1.0:
-    resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==}
-    engines: {node: '>=8'}
-
-  platform@1.3.6:
-    resolution: {integrity: sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==}
-
-  pngjs@5.0.0:
-    resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==}
-    engines: {node: '>=10.13.0'}
-
-  portfinder@1.0.32:
-    resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==}
-    engines: {node: '>= 0.12.0'}
-
-  postcss-attribute-case-insensitive@5.0.2:
-    resolution: {integrity: sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.2
-
-  postcss-calc@8.2.4:
-    resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==}
-    peerDependencies:
-      postcss: ^8.2.2
-
-  postcss-clamp@4.1.0:
-    resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==}
-    engines: {node: '>=7.6.0'}
-    peerDependencies:
-      postcss: ^8.4.6
-
-  postcss-color-functional-notation@4.2.4:
-    resolution: {integrity: sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.2
-
-  postcss-color-hex-alpha@8.0.4:
-    resolution: {integrity: sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.4
-
-  postcss-color-rebeccapurple@7.1.1:
-    resolution: {integrity: sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.2
-
-  postcss-colormin@5.3.1:
-    resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  postcss-convert-values@5.1.3:
-    resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  postcss-custom-media@8.0.2:
-    resolution: {integrity: sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.3
-
-  postcss-custom-properties@12.1.11:
-    resolution: {integrity: sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.2
-
-  postcss-custom-selectors@6.0.3:
-    resolution: {integrity: sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.3
-
-  postcss-dir-pseudo-class@6.0.5:
-    resolution: {integrity: sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.2
-
-  postcss-discard-comments@5.1.2:
-    resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  postcss-discard-duplicates@5.1.0:
-    resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  postcss-discard-empty@5.1.1:
-    resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  postcss-discard-overridden@5.1.0:
-    resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  postcss-double-position-gradients@3.1.2:
-    resolution: {integrity: sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.2
-
-  postcss-env-function@4.0.6:
-    resolution: {integrity: sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.4
-
-  postcss-focus-visible@6.0.4:
-    resolution: {integrity: sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.4
-
-  postcss-focus-within@5.0.4:
-    resolution: {integrity: sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.4
-
-  postcss-font-variant@5.0.0:
-    resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==}
-    peerDependencies:
-      postcss: ^8.1.0
-
-  postcss-gap-properties@3.0.5:
-    resolution: {integrity: sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.2
-
-  postcss-image-set-function@4.0.7:
-    resolution: {integrity: sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.2
-
-  postcss-initial@4.0.1:
-    resolution: {integrity: sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==}
-    peerDependencies:
-      postcss: ^8.0.0
-
-  postcss-lab-function@4.2.1:
-    resolution: {integrity: sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.2
-
-  postcss-loader@6.2.1:
-    resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==}
-    engines: {node: '>= 12.13.0'}
-    peerDependencies:
-      postcss: ^7.0.0 || ^8.0.1
-      webpack: ^5.0.0
-
-  postcss-logical@5.0.4:
-    resolution: {integrity: sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.4
-
-  postcss-media-minmax@5.0.0:
-    resolution: {integrity: sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==}
-    engines: {node: '>=10.0.0'}
-    peerDependencies:
-      postcss: ^8.1.0
-
-  postcss-merge-longhand@5.1.7:
-    resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  postcss-merge-rules@5.1.4:
-    resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  postcss-minify-font-values@5.1.0:
-    resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  postcss-minify-gradients@5.1.1:
-    resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  postcss-minify-params@5.1.4:
-    resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  postcss-minify-selectors@5.2.1:
-    resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  postcss-modules-extract-imports@3.0.0:
-    resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==}
-    engines: {node: ^10 || ^12 || >= 14}
-    peerDependencies:
-      postcss: ^8.1.0
-
-  postcss-modules-local-by-default@4.0.0:
-    resolution: {integrity: sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==}
-    engines: {node: ^10 || ^12 || >= 14}
-    peerDependencies:
-      postcss: ^8.1.0
-
-  postcss-modules-scope@3.0.0:
-    resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==}
-    engines: {node: ^10 || ^12 || >= 14}
-    peerDependencies:
-      postcss: ^8.1.0
-
-  postcss-modules-values@4.0.0:
-    resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==}
-    engines: {node: ^10 || ^12 || >= 14}
-    peerDependencies:
-      postcss: ^8.1.0
-
-  postcss-nesting@10.2.0:
-    resolution: {integrity: sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.2
-
-  postcss-normalize-charset@5.1.0:
-    resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  postcss-normalize-display-values@5.1.0:
-    resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  postcss-normalize-positions@5.1.1:
-    resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  postcss-normalize-repeat-style@5.1.1:
-    resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  postcss-normalize-string@5.1.0:
-    resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  postcss-normalize-timing-functions@5.1.0:
-    resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  postcss-normalize-unicode@5.1.1:
-    resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  postcss-normalize-url@5.1.0:
-    resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  postcss-normalize-whitespace@5.1.1:
-    resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  postcss-opacity-percentage@1.1.3:
-    resolution: {integrity: sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.2
-
-  postcss-ordered-values@5.1.3:
-    resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  postcss-overflow-shorthand@3.0.4:
-    resolution: {integrity: sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.2
-
-  postcss-page-break@3.0.4:
-    resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==}
-    peerDependencies:
-      postcss: ^8
-
-  postcss-place@7.0.5:
-    resolution: {integrity: sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.2
-
-  postcss-preset-env@7.8.3:
-    resolution: {integrity: sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.2
-
-  postcss-pseudo-class-any-link@7.1.6:
-    resolution: {integrity: sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.2
-
-  postcss-reduce-initial@5.1.2:
-    resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  postcss-reduce-transforms@5.1.0:
-    resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  postcss-replace-overflow-wrap@4.0.0:
-    resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==}
-    peerDependencies:
-      postcss: ^8.0.3
-
-  postcss-selector-not@6.0.1:
-    resolution: {integrity: sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==}
-    engines: {node: ^12 || ^14 || >=16}
-    peerDependencies:
-      postcss: ^8.2
-
-  postcss-selector-parser@6.0.11:
-    resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==}
-    engines: {node: '>=4'}
-
-  postcss-selector-parser@6.0.13:
-    resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==}
-    engines: {node: '>=4'}
-
-  postcss-svgo@5.1.0:
-    resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  postcss-unique-selectors@5.1.1:
-    resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  postcss-value-parser@4.2.0:
-    resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
-
-  postcss@8.4.21:
-    resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==}
-    engines: {node: ^10 || ^12 || >=14}
-
-  postcss@8.4.49:
-    resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==}
-    engines: {node: ^10 || ^12 || >=14}
-
-  prelude-ls@1.2.1:
-    resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
-    engines: {node: '>= 0.8.0'}
-
-  prettier-linter-helpers@1.0.0:
-    resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
-    engines: {node: '>=6.0.0'}
-
-  prettier@3.0.1:
-    resolution: {integrity: sha512-fcOWSnnpCrovBsmFZIGIy9UqK2FaI7Hqax+DIO0A9UxeVoY4iweyaFjS5TavZN97Hfehph0nhsZnjlVKzEQSrQ==}
-    engines: {node: '>=14'}
-    hasBin: true
-
-  pretty-error@4.0.0:
-    resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==}
-
-  pretty-time@1.1.0:
-    resolution: {integrity: sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==}
-    engines: {node: '>=4'}
-
-  process-nextick-args@2.0.1:
-    resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
-
-  process@0.11.10:
-    resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
-    engines: {node: '>= 0.6.0'}
-
-  proxy-addr@2.0.7:
-    resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
-    engines: {node: '>= 0.10'}
-
-  proxy-from-env@1.1.0:
-    resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
-
-  psl@1.9.0:
-    resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==}
-
-  pump@3.0.0:
-    resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
-
-  punycode.js@2.3.1:
-    resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==}
-    engines: {node: '>=6'}
-
-  punycode@2.3.0:
-    resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
-    engines: {node: '>=6'}
-
-  q@1.5.1:
-    resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==}
-    engines: {node: '>=0.6.0', teleport: '>=0.2.0'}
-
-  qiniu-js@3.4.2:
-    resolution: {integrity: sha512-Gu94/4adN2FnM9VpTgLsgvS3KN+2ZV9gCxlmrKICMI7VqcAwTsy3+9eBLLk8WueMYwniyg8rELjdxNf0wABUHg==}
-
-  qiniu@7.11.0:
-    resolution: {integrity: sha512-Pdux9AxQR5V8IrlkSWDBUIrBRoxyK98sfmdGm19R0jZyxBMM2+KMwB0zhjAJhb6+lxEzjyHO3EfsVRz0JeTj7A==}
-    engines: {node: '>= 6'}
-
-  qrcode@1.5.3:
-    resolution: {integrity: sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==}
-    engines: {node: '>=10.13.0'}
-    hasBin: true
-
-  qs@6.11.0:
-    resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==}
-    engines: {node: '>=0.6'}
-
-  qs@6.5.3:
-    resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==}
-    engines: {node: '>=0.6'}
-
-  querystring@0.2.1:
-    resolution: {integrity: sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==}
-    engines: {node: '>=0.4.x'}
-    deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead.
-
-  querystringify@2.2.0:
-    resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
-
-  queue-microtask@1.2.3:
-    resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
-
-  quick-lru@4.0.1:
-    resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==}
-    engines: {node: '>=8'}
-
-  randombytes@2.1.0:
-    resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
-
-  range-parser@1.2.1:
-    resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
-    engines: {node: '>= 0.6'}
-
-  raw-body@2.5.1:
-    resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==}
-    engines: {node: '>= 0.8'}
-
-  read-pkg-up@3.0.0:
-    resolution: {integrity: sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==}
-    engines: {node: '>=4'}
-
-  read-pkg-up@7.0.1:
-    resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
-    engines: {node: '>=8'}
-
-  read-pkg@3.0.0:
-    resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==}
-    engines: {node: '>=4'}
-
-  read-pkg@5.2.0:
-    resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==}
-    engines: {node: '>=8'}
-
-  readable-stream@2.3.8:
-    resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
-
-  readable-stream@3.6.2:
-    resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
-    engines: {node: '>= 6'}
-
-  readdirp@3.6.0:
-    resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
-    engines: {node: '>=8.10.0'}
-
-  rechoir@0.7.1:
-    resolution: {integrity: sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==}
-    engines: {node: '>= 0.10'}
-
-  redent@3.0.0:
-    resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
-    engines: {node: '>=8'}
-
-  regenerate-unicode-properties@10.1.0:
-    resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==}
-    engines: {node: '>=4'}
-
-  regenerate@1.4.2:
-    resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
-
-  regenerator-runtime@0.13.11:
-    resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
-
-  regenerator-runtime@0.14.1:
-    resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
-
-  regenerator-transform@0.15.1:
-    resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==}
-
-  regexp.prototype.flags@1.4.3:
-    resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==}
-    engines: {node: '>= 0.4'}
-
-  regexpu-core@5.3.2:
-    resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==}
-    engines: {node: '>=4'}
-
-  regjsparser@0.9.1:
-    resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==}
-    hasBin: true
-
-  relateurl@0.2.7:
-    resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==}
-    engines: {node: '>= 0.10'}
-
-  renderkid@3.0.0:
-    resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==}
-
-  request@2.88.2:
-    resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==}
-    engines: {node: '>= 6'}
-    deprecated: request has been deprecated, see https://github.com/request/request/issues/3142
-
-  require-directory@2.1.1:
-    resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
-    engines: {node: '>=0.10.0'}
-
-  require-from-string@2.0.2:
-    resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
-    engines: {node: '>=0.10.0'}
-
-  require-main-filename@2.0.0:
-    resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
-
-  requires-port@1.0.0:
-    resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
-
-  resolve-cwd@3.0.0:
-    resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
-    engines: {node: '>=8'}
-
-  resolve-dir@1.0.1:
-    resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==}
-    engines: {node: '>=0.10.0'}
-
-  resolve-from@4.0.0:
-    resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
-    engines: {node: '>=4'}
-
-  resolve-from@5.0.0:
-    resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
-    engines: {node: '>=8'}
-
-  resolve-global@1.0.0:
-    resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==}
-    engines: {node: '>=8'}
-
-  resolve-pkg-maps@1.0.0:
-    resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
-
-  resolve@1.22.1:
-    resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
-    hasBin: true
-
-  resolve@1.22.4:
-    resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==}
-    hasBin: true
-
-  restore-cursor@2.0.0:
-    resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==}
-    engines: {node: '>=4'}
-
-  restore-cursor@3.1.0:
-    resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
-    engines: {node: '>=8'}
-
-  retry@0.13.1:
-    resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==}
-    engines: {node: '>= 4'}
-
-  reusify@1.0.4:
-    resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
-    engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
-
-  rfdc@1.3.0:
-    resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==}
-
-  rimraf@2.6.3:
-    resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==}
-    hasBin: true
-
-  rimraf@3.0.2:
-    resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
-    hasBin: true
-
-  rollup-plugin-dts@4.2.3:
-    resolution: {integrity: sha512-jlcpItqM2efqfIiKzDB/IKOS9E9fDvbkJSGw5GtK/PqPGS9eC3R3JKyw2VvpTktZA+TNgJRMu1NTv244aTUzzQ==}
-    engines: {node: '>=v12.22.12'}
-    peerDependencies:
-      rollup: ^2.55
-      typescript: ^4.1
-
-  rollup-plugin-esbuild@4.10.3:
-    resolution: {integrity: sha512-RILwUCgnCL5vo8vyZ/ZpwcqRuE5KmLizEv6BujBQfgXFZ6ggcS0FiYvQN+gsTJfWCMaU37l0Fosh4eEufyO97Q==}
-    engines: {node: '>=12'}
-    peerDependencies:
-      esbuild: '>=0.10.1'
-      rollup: ^1.20.0 || ^2.0.0
-
-  rollup-plugin-terser@7.0.2:
-    resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==}
-    deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser
-    peerDependencies:
-      rollup: ^2.0.0
-
-  rollup-plugin-typescript2@0.32.1:
-    resolution: {integrity: sha512-RanO8bp1WbeMv0bVlgcbsFNCn+Y3rX7wF97SQLDxf0fMLsg0B/QFF005t4AsGUcDgF3aKJHoqt4JF2xVaABeKw==}
-    peerDependencies:
-      rollup: '>=1.26.3'
-      typescript: '>=2.4.0'
-
-  rollup@2.79.1:
-    resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==}
-    engines: {node: '>=10.0.0'}
-    hasBin: true
-
-  rollup@3.19.1:
-    resolution: {integrity: sha512-lAbrdN7neYCg/8WaoWn/ckzCtz+jr70GFfYdlf50OF7387HTg+wiuiqJRFYawwSPpqfqDNYqK7smY/ks2iAudg==}
-    engines: {node: '>=14.18.0', npm: '>=8.0.0'}
-    hasBin: true
-
-  run-applescript@5.0.0:
-    resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==}
-    engines: {node: '>=12'}
-
-  run-async@2.4.1:
-    resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
-    engines: {node: '>=0.12.0'}
-
-  run-parallel@1.2.0:
-    resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
-
-  rust-result@1.0.0:
-    resolution: {integrity: sha512-6cJzSBU+J/RJCF063onnQf0cDUOHs9uZI1oroSGnHOph+CQTIJ5Pp2hK5kEQq1+7yE/EEWfulSNXAQ2jikPthA==}
-
-  rxjs@6.6.7:
-    resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==}
-    engines: {npm: '>=2.0.0'}
-
-  rxjs@7.8.0:
-    resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==}
-
-  safe-buffer@5.1.2:
-    resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
-
-  safe-buffer@5.2.1:
-    resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
-
-  safe-json-parse@4.0.0:
-    resolution: {integrity: sha512-RjZPPHugjK0TOzFrLZ8inw44s9bKox99/0AZW9o/BEQVrJfhI+fIHMErnPyRa89/yRXUUr93q+tiN6zhoVV4wQ==}
-
-  safe-regex-test@1.0.0:
-    resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==}
-
-  safer-buffer@2.1.2:
-    resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
-
-  sass-loader@12.6.0:
-    resolution: {integrity: sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==}
-    engines: {node: '>= 12.13.0'}
-    peerDependencies:
-      fibers: '>= 3.1.0'
-      node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.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
-
-  sass@1.59.3:
-    resolution: {integrity: sha512-QCq98N3hX1jfTCoUAsF3eyGuXLsY7BCnCEg9qAact94Yc21npG2/mVOqoDvE0fCbWDqiM4WlcJQla0gWG2YlxQ==}
-    engines: {node: '>=12.0.0'}
-    hasBin: true
-
-  sax@1.3.0:
-    resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==}
-
-  saxes@5.0.1:
-    resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==}
-    engines: {node: '>=10'}
-
-  sb-promise-queue@2.1.0:
-    resolution: {integrity: sha512-zwq4YuP1FQFkGx2Q7GIkZYZ6PqWpV+bg0nIO1sJhWOyGyhqbj0MsTvK6lCFo5TQwX5pZr6SCQ75e8PCDCuNvkg==}
-    engines: {node: '>= 8'}
-
-  sb-scandir@3.1.0:
-    resolution: {integrity: sha512-70BVm2xz9jn94zSQdpvYrEG101/UV9TVGcfWr9T5iob3QhCK4lYXeculfBqPGFv3XTeKgx4dpWyYIDeZUqo4kg==}
-    engines: {node: '>= 8'}
-
-  schema-utils@2.7.1:
-    resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==}
-    engines: {node: '>= 8.9.0'}
-
-  schema-utils@3.1.1:
-    resolution: {integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==}
-    engines: {node: '>= 10.13.0'}
-
-  schema-utils@4.0.0:
-    resolution: {integrity: sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==}
-    engines: {node: '>= 12.13.0'}
-
-  sdk-base@2.0.1:
-    resolution: {integrity: sha512-eeG26wRwhtwYuKGCDM3LixCaxY27Pa/5lK4rLKhQa7HBjJ3U3Y+f81MMZQRsDw/8SC2Dao/83yJTXJ8aULuN8Q==}
-
-  sdp@3.2.0:
-    resolution: {integrity: sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw==}
-
-  seemly@0.3.9:
-    resolution: {integrity: sha512-bMLcaEqhIViiPbaumjLN8t1y+JpD/N8SiyYOyp0i0W6RgdyLWboIsUWAbZojF//JyerxPZR5Tgda+x3Pdne75A==}
-
-  select-hose@2.0.0:
-    resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==}
-
-  selfsigned@2.1.1:
-    resolution: {integrity: sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==}
-    engines: {node: '>=10'}
-
-  semver@5.7.1:
-    resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==}
-    hasBin: true
-
-  semver@6.3.0:
-    resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
-    hasBin: true
-
-  semver@6.3.1:
-    resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
-    hasBin: true
-
-  semver@7.3.7:
-    resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==}
-    engines: {node: '>=10'}
-    hasBin: true
-
-  semver@7.3.8:
-    resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==}
-    engines: {node: '>=10'}
-    hasBin: true
-
-  semver@7.5.4:
-    resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
-    engines: {node: '>=10'}
-    hasBin: true
-
-  send@0.18.0:
-    resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==}
-    engines: {node: '>= 0.8.0'}
-
-  serialize-javascript@4.0.0:
-    resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==}
-
-  serialize-javascript@5.0.1:
-    resolution: {integrity: sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==}
-
-  serialize-javascript@6.0.1:
-    resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==}
-
-  serve-index@1.9.1:
-    resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==}
-    engines: {node: '>= 0.8.0'}
-
-  serve-static@1.15.0:
-    resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==}
-    engines: {node: '>= 0.8.0'}
-
-  set-blocking@2.0.0:
-    resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
-
-  setimmediate@1.0.5:
-    resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==}
-
-  setprototypeof@1.1.0:
-    resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==}
-
-  setprototypeof@1.2.0:
-    resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
-
-  shallow-clone@3.0.1:
-    resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==}
-    engines: {node: '>=8'}
-
-  shebang-command@2.0.0:
-    resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
-    engines: {node: '>=8'}
-
-  shebang-regex@3.0.0:
-    resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
-    engines: {node: '>=8'}
-
-  shell-escape@0.2.0:
-    resolution: {integrity: sha512-uRRBT2MfEOyxuECseCZd28jC1AJ8hmqqneWQ4VWUTgCAFvb3wKU1jLqj6egC4Exrr88ogg3dp+zroH4wJuaXzw==}
-
-  shell-quote@1.8.0:
-    resolution: {integrity: sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==}
-
-  side-channel@1.0.4:
-    resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
-
-  signal-exit@3.0.7:
-    resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
-
-  simple-concat@1.0.1:
-    resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
-
-  simple-get@3.1.1:
-    resolution: {integrity: sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==}
-
-  sirv@1.0.19:
-    resolution: {integrity: sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==}
-    engines: {node: '>= 10'}
-
-  slash@1.0.0:
-    resolution: {integrity: sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==}
-    engines: {node: '>=0.10.0'}
-
-  slash@3.0.0:
-    resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
-    engines: {node: '>=8'}
-
-  slash@4.0.0:
-    resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==}
-    engines: {node: '>=12'}
-
-  slice-ansi@3.0.0:
-    resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==}
-    engines: {node: '>=8'}
-
-  slice-ansi@4.0.0:
-    resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==}
-    engines: {node: '>=10'}
-
-  slice-ansi@5.0.0:
-    resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==}
-    engines: {node: '>=12'}
-
-  socket.io-client@4.8.0:
-    resolution: {integrity: sha512-C0jdhD5yQahMws9alf/yvtsMGTaIDBnZ8Rb5HU56svyq0l5LIrGzIDZZD5pHQlmzxLuU91Gz+VpQMKgCTNYtkw==}
-    engines: {node: '>=10.0.0'}
-
-  socket.io-msgpack-parser@3.0.2:
-    resolution: {integrity: sha512-1e76bJ1PCKi9H+JiYk+S29PBJvknHjQWM7Mtj0hjF2KxDA6b6rQxv3rTsnwBoz/haZOhlCDIMQvPATbqYeuMxg==}
-
-  socket.io-parser@4.2.4:
-    resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==}
-    engines: {node: '>=10.0.0'}
-
-  sockjs@0.3.24:
-    resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==}
-
-  source-list-map@2.0.1:
-    resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==}
-
-  source-map-js@1.0.2:
-    resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
-    engines: {node: '>=0.10.0'}
-
-  source-map-js@1.2.1:
-    resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
-    engines: {node: '>=0.10.0'}
-
-  source-map-support@0.5.21:
-    resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
-
-  source-map@0.6.1:
-    resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
-    engines: {node: '>=0.10.0'}
-
-  sourcemap-codec@1.4.8:
-    resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
-    deprecated: Please use @jridgewell/sourcemap-codec instead
-
-  spark-md5@3.0.2:
-    resolution: {integrity: sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==}
-
-  spdx-correct@3.2.0:
-    resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
-
-  spdx-exceptions@2.3.0:
-    resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==}
-
-  spdx-expression-parse@3.0.1:
-    resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
-
-  spdx-license-ids@3.0.13:
-    resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==}
-
-  spdy-transport@3.0.0:
-    resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==}
-
-  spdy@4.0.2:
-    resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==}
-    engines: {node: '>=6.0.0'}
-
-  split2@3.2.2:
-    resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==}
-
-  split@1.0.1:
-    resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==}
-
-  ssh2@1.15.0:
-    resolution: {integrity: sha512-C0PHgX4h6lBxYx7hcXwu3QWdh4tg6tZZsTfXcdvc5caW/EMxaB4H9dWsl7qk+F7LAW762hp8VbXOX7x4xUYvEw==}
-    engines: {node: '>=10.16.0'}
-
-  sshpk@1.18.0:
-    resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==}
-    engines: {node: '>=0.10.0'}
-    hasBin: true
-
-  stable@0.1.8:
-    resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==}
-    deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility'
-
-  stackframe@1.3.4:
-    resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==}
-
-  standard-version@9.5.0:
-    resolution: {integrity: sha512-3zWJ/mmZQsOaO+fOlsa0+QK90pwhNd042qEcw6hKFNoLFs7peGyvPffpEBbK/DSGPbyOvli0mUIFv5A4qTjh2Q==}
-    engines: {node: '>=10'}
-    hasBin: true
-
-  statuses@1.5.0:
-    resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
-    engines: {node: '>= 0.6'}
-
-  statuses@2.0.1:
-    resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
-    engines: {node: '>= 0.8'}
-
-  std-env@3.3.2:
-    resolution: {integrity: sha512-uUZI65yrV2Qva5gqE0+A7uVAvO40iPo6jGhs7s8keRfHCmtg+uB2X6EiLGCI9IgL1J17xGhvoOqSz79lzICPTA==}
-
-  stream-http@2.8.2:
-    resolution: {integrity: sha512-QllfrBhqF1DPcz46WxKTs6Mz1Bpc+8Qm6vbqOpVav5odAXwbyzwnEczoWqtxrsmlO+cJqtPrp/8gWKWjaKLLlA==}
-
-  stream-wormhole@1.1.0:
-    resolution: {integrity: sha512-gHFfL3px0Kctd6Po0M8TzEvt3De/xu6cnRrjlfYNhwbhLPLwigI2t1nc6jrzNuaYg5C4YF78PPFuQPzRiqn9ew==}
-    engines: {node: '>=4.0.0'}
-
-  streamroller@3.1.5:
-    resolution: {integrity: sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==}
-    engines: {node: '>=8.0'}
-
-  string-argv@0.3.1:
-    resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==}
-    engines: {node: '>=0.6.19'}
-
-  string-width@2.1.1:
-    resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==}
-    engines: {node: '>=4'}
-
-  string-width@4.2.3:
-    resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
-    engines: {node: '>=8'}
-
-  string-width@5.1.2:
-    resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
-    engines: {node: '>=12'}
-
-  string.prototype.trim@1.2.7:
-    resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==}
-    engines: {node: '>= 0.4'}
-
-  string.prototype.trimend@1.0.6:
-    resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==}
-
-  string.prototype.trimstart@1.0.6:
-    resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==}
-
-  string_decoder@1.1.1:
-    resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
-
-  string_decoder@1.3.0:
-    resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
-
-  stringify-package@1.0.1:
-    resolution: {integrity: sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==}
-    deprecated: This module is not used anymore, and has been replaced by @npmcli/package-json
-
-  strip-ansi@4.0.0:
-    resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==}
-    engines: {node: '>=4'}
-
-  strip-ansi@5.2.0:
-    resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==}
-    engines: {node: '>=6'}
-
-  strip-ansi@6.0.1:
-    resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
-    engines: {node: '>=8'}
-
-  strip-ansi@7.0.1:
-    resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==}
-    engines: {node: '>=12'}
-
-  strip-bom@3.0.0:
-    resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
-    engines: {node: '>=4'}
-
-  strip-bom@4.0.0:
-    resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==}
-    engines: {node: '>=8'}
-
-  strip-final-newline@2.0.0:
-    resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
-    engines: {node: '>=6'}
-
-  strip-final-newline@3.0.0:
-    resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
-    engines: {node: '>=12'}
-
-  strip-indent@3.0.0:
-    resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
-    engines: {node: '>=8'}
-
-  strip-json-comments@3.1.1:
-    resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
-    engines: {node: '>=8'}
-
-  strnum@1.0.5:
-    resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==}
-
-  style-mod@4.1.2:
-    resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==}
-
-  stylehacks@5.1.1:
-    resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==}
-    engines: {node: ^10 || ^12 || >=14.0}
-    peerDependencies:
-      postcss: ^8.2.15
-
-  supports-color@5.5.0:
-    resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
-    engines: {node: '>=4'}
-
-  supports-color@7.2.0:
-    resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
-    engines: {node: '>=8'}
-
-  supports-color@8.1.1:
-    resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
-    engines: {node: '>=10'}
-
-  supports-color@9.3.1:
-    resolution: {integrity: sha512-knBY82pjmnIzK3NifMo3RxEIRD9E0kIzV4BKcyTZ9+9kWgLMxd4PrsTSMoFQUabgRBbF8KOLRDCyKgNV+iK44Q==}
-    engines: {node: '>=12'}
-
-  supports-preserve-symlinks-flag@1.0.0:
-    resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
-    engines: {node: '>= 0.4'}
-
-  svgo@2.8.0:
-    resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==}
-    engines: {node: '>=10.13.0'}
-    hasBin: true
-
-  swc-loader@0.2.3:
-    resolution: {integrity: sha512-D1p6XXURfSPleZZA/Lipb3A8pZ17fP4NObZvFCDjK/OKljroqDpPmsBdTraWhVBqUNpcWBQY1imWdoPScRlQ7A==}
-    peerDependencies:
-      '@swc/core': ^1.2.147
-      webpack: '>=2'
-
-  symbol-tree@3.2.4:
-    resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
-
-  synckit@0.8.5:
-    resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==}
-    engines: {node: ^14.18.0 || >=16.0.0}
-
-  tapable@2.2.1:
-    resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
-    engines: {node: '>=6'}
-
-  tar@6.1.15:
-    resolution: {integrity: sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==}
-    engines: {node: '>=10'}
-
-  temp@0.9.4:
-    resolution: {integrity: sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==}
-    engines: {node: '>=6.0.0'}
-
-  terser-webpack-plugin@5.3.7:
-    resolution: {integrity: sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==}
-    engines: {node: '>= 10.13.0'}
-    peerDependencies:
-      '@swc/core': '*'
-      esbuild: '*'
-      uglify-js: '*'
-      webpack: ^5.1.0
-    peerDependenciesMeta:
-      '@swc/core':
-        optional: true
-      esbuild:
-        optional: true
-      uglify-js:
-        optional: true
-
-  terser@5.16.6:
-    resolution: {integrity: sha512-IBZ+ZQIA9sMaXmRZCUMDjNH0D5AQQfdn4WUjHL0+1lF4TP1IHRJbrhb6fNaXWikrYQTSkb7SLxkeXAiy1p7mbg==}
-    engines: {node: '>=10'}
-    hasBin: true
-
-  text-extensions@1.9.0:
-    resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==}
-    engines: {node: '>=0.10'}
-
-  text-table@0.2.0:
-    resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
-
-  thenify-all@1.6.0:
-    resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
-    engines: {node: '>=0.8'}
-
-  thenify@3.3.1:
-    resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
-
-  thread-loader@3.0.4:
-    resolution: {integrity: sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA==}
-    engines: {node: '>= 10.13.0'}
-    peerDependencies:
-      webpack: ^4.27.0 || ^5.0.0
-
-  through2@2.0.5:
-    resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==}
-
-  through2@4.0.2:
-    resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==}
-
-  through@2.3.8:
-    resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
-
-  thunky@1.1.0:
-    resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==}
-
-  titleize@3.0.0:
-    resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==}
-    engines: {node: '>=12'}
-
-  tmp@0.0.33:
-    resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
-    engines: {node: '>=0.6.0'}
-
-  to-arraybuffer@1.0.1:
-    resolution: {integrity: sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==}
-
-  to-fast-properties@2.0.0:
-    resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
-    engines: {node: '>=4'}
-
-  to-regex-range@5.0.1:
-    resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
-    engines: {node: '>=8.0'}
-
-  toggle-selection@1.0.6:
-    resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==}
-
-  toidentifier@1.0.1:
-    resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
-    engines: {node: '>=0.6'}
-
-  totalist@1.1.0:
-    resolution: {integrity: sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==}
-    engines: {node: '>=6'}
-
-  tough-cookie@2.5.0:
-    resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==}
-    engines: {node: '>=0.8'}
-
-  tough-cookie@4.1.3:
-    resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==}
-    engines: {node: '>=6'}
-
-  tr46@0.0.3:
-    resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
-
-  tr46@3.0.0:
-    resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==}
-    engines: {node: '>=12'}
-
-  trash@8.1.1:
-    resolution: {integrity: sha512-r15NUF+BJpDBKLTyOXaB+PhF8qh53TAOTpu/wCt6bqpu488jamsiOV7VdC//yPwAnyGIv1EJgetEnjLNer5XVw==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
-  treemate@0.3.11:
-    resolution: {integrity: sha512-M8RGFoKtZ8dF+iwJfAJTOH/SM4KluKOKRJpjCMhI8bG3qB74zrFoArKZ62ll0Fr3mqkMJiQOmWYkdYgDeITYQg==}
-
-  trim-newlines@3.0.1:
-    resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==}
-    engines: {node: '>=8'}
-
-  ts-loader@9.4.2:
-    resolution: {integrity: sha512-OmlC4WVmFv5I0PpaxYb+qGeGOdm5giHU7HwDDUjw59emP2UYMHy9fFSDcYgSNoH8sXcj4hGCSEhlDZ9ULeDraA==}
-    engines: {node: '>=12.0.0'}
-    peerDependencies:
-      typescript: '*'
-      webpack: ^5.0.0
-
-  ts-node@10.9.1:
-    resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
-    hasBin: true
-    peerDependencies:
-      '@swc/core': '>=1.2.50'
-      '@swc/wasm': '>=1.2.50'
-      '@types/node': '*'
-      typescript: '>=2.7'
-    peerDependenciesMeta:
-      '@swc/core':
-        optional: true
-      '@swc/wasm':
-        optional: true
-
-  tsconfig-paths@3.14.2:
-    resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==}
-
-  tslib@1.14.1:
-    resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
-
-  tslib@2.6.1:
-    resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==}
-
-  tsutils@3.21.0:
-    resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
-    engines: {node: '>= 6'}
-    peerDependencies:
-      typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
-
-  tunnel-agent@0.6.0:
-    resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
-
-  tweetnacl@0.14.5:
-    resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==}
-
-  type-check@0.4.0:
-    resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
-    engines: {node: '>= 0.8.0'}
-
-  type-fest@0.18.1:
-    resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==}
-    engines: {node: '>=10'}
-
-  type-fest@0.20.2:
-    resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
-    engines: {node: '>=10'}
-
-  type-fest@0.21.3:
-    resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
-    engines: {node: '>=10'}
-
-  type-fest@0.6.0:
-    resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==}
-    engines: {node: '>=8'}
-
-  type-fest@0.8.1:
-    resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==}
-    engines: {node: '>=8'}
-
-  type-is@1.6.18:
-    resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
-    engines: {node: '>= 0.6'}
-
-  typed-array-length@1.0.4:
-    resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==}
-
-  typedarray@0.0.6:
-    resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
-
-  typescript@4.9.5:
-    resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
-    engines: {node: '>=4.2.0'}
-    hasBin: true
-
-  typescript@5.1.6:
-    resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==}
-    engines: {node: '>=14.17'}
-    hasBin: true
-
-  uc.micro@2.1.0:
-    resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==}
-
-  uglify-js@3.17.4:
-    resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==}
-    engines: {node: '>=0.8.0'}
-    hasBin: true
-
-  unbox-primitive@1.0.2:
-    resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
-
-  unescape@1.0.1:
-    resolution: {integrity: sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ==}
-    engines: {node: '>=0.10.0'}
-
-  unicode-canonical-property-names-ecmascript@2.0.0:
-    resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==}
-    engines: {node: '>=4'}
-
-  unicode-match-property-ecmascript@2.0.0:
-    resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==}
-    engines: {node: '>=4'}
-
-  unicode-match-property-value-ecmascript@2.1.0:
-    resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==}
-    engines: {node: '>=4'}
-
-  unicode-property-aliases-ecmascript@2.1.0:
-    resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==}
-    engines: {node: '>=4'}
-
-  universalify@0.1.2:
-    resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
-    engines: {node: '>= 4.0.0'}
-
-  universalify@0.2.0:
-    resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==}
-    engines: {node: '>= 4.0.0'}
-
-  universalify@2.0.0:
-    resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
-    engines: {node: '>= 10.0.0'}
-
-  unpipe@1.0.0:
-    resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
-    engines: {node: '>= 0.8'}
-
-  unplugin-vue-components@0.24.1:
-    resolution: {integrity: sha512-T3A8HkZoIE1Cja95xNqolwza0yD5IVlgZZ1PVAGvVCx8xthmjsv38xWRCtHtwl+rvZyL9uif42SRkDGw9aCfMA==}
-    engines: {node: '>=14'}
-    peerDependencies:
-      '@babel/parser': ^7.15.8
-      '@nuxt/kit': ^3.2.2
-      vue: 2 || 3
-    peerDependenciesMeta:
-      '@babel/parser':
-        optional: true
-      '@nuxt/kit':
-        optional: true
-
-  unplugin@1.3.1:
-    resolution: {integrity: sha512-h4uUTIvFBQRxUKS2Wjys6ivoeofGhxzTe2sRWlooyjHXVttcVfV/JiavNd3d4+jty0SVV0dxGw9AkY9MwiaCEw==}
-
-  untildify@4.0.0:
-    resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==}
-    engines: {node: '>=8'}
-
-  update-browserslist-db@1.0.10:
-    resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==}
-    hasBin: true
-    peerDependencies:
-      browserslist: '>= 4.21.0'
-
-  uri-js@4.4.1:
-    resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
-
-  url-parse@1.5.10:
-    resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==}
-
-  url-toolkit@2.2.5:
-    resolution: {integrity: sha512-mtN6xk+Nac+oyJ/PrI7tzfmomRVNFIWKUbG8jdYFt52hxbiReFAXIjYskvu64/dvuW71IcB7lV8l0HvZMac6Jg==}
-
-  urllib@2.41.0:
-    resolution: {integrity: sha512-pNXdxEv52L67jahLT+/7QE+Fup1y2Gc6EdmrAhQ6OpQIC2rl14oWwv9hvk1GXOZqEnJNwRXHABuwgPOs1CtL7g==}
-    engines: {node: '>= 0.10.0'}
-    peerDependencies:
-      proxy-agent: ^5.0.0
-    peerDependenciesMeta:
-      proxy-agent:
-        optional: true
-
-  user-home@2.0.0:
-    resolution: {integrity: sha512-KMWqdlOcjCYdtIJpicDSFBQ8nFwS2i9sslAd6f4+CBGcU4gist2REnr2fxj2YocvJFxSF3ZOHLYLVZnUxv4BZQ==}
-    engines: {node: '>=0.10.0'}
-
-  util-deprecate@1.0.2:
-    resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
-
-  utila@0.4.0:
-    resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==}
-
-  utility@1.18.0:
-    resolution: {integrity: sha512-PYxZDA+6QtvRvm//++aGdmKG/cI07jNwbROz0Ql+VzFV1+Z0Dy55NI4zZ7RHc9KKpBePNFwoErqIuqQv/cjiTA==}
-    engines: {node: '>= 0.12.0'}
-
-  utils-merge@1.0.1:
-    resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
-    engines: {node: '>= 0.4.0'}
-
-  uuid@3.4.0:
-    resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==}
-    deprecated: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
-    hasBin: true
-
-  uuid@8.3.2:
-    resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
-    hasBin: true
-
-  v8-compile-cache-lib@3.0.1:
-    resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
-
-  validate-npm-package-license@3.0.4:
-    resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
-
-  vary@1.1.2:
-    resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
-    engines: {node: '>= 0.8'}
-
-  vconsole@3.15.0:
-    resolution: {integrity: sha512-8hq7wabPcRucSWQyN7/1tthMawP9JPvM95zgtMHpPknMMMCKj+abpoK7P7oKK4B0qw58C24Mdvo9+raUdpHyVQ==}
-
-  vdirs@0.1.8:
-    resolution: {integrity: sha512-H9V1zGRLQZg9b+GdMk8MXDN2Lva0zx72MPahDKc30v+DtwKjfyOSXWRIX4t2mhDubM1H09gPhWeth/BJWPHGUw==}
-    peerDependencies:
-      vue: ^3.0.11
-
-  verror@1.10.0:
-    resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==}
-    engines: {'0': node >=0.6.0}
-
-  video.js@8.3.0:
-    resolution: {integrity: sha512-Vp3mqMLSUE354t+G8CbZKwcV520VKoS5fow8zjnEEKFuqStmkmnvK7/FurP6zuP/oWGJ1rqlKxML56kmJOrwRw==}
-
-  videojs-contrib-quality-levels@3.0.0:
-    resolution: {integrity: sha512-sNx38EYUx+Q+gmup1gVTv9P9/sPs28rM7gZOx1sedaHoKxEdYB+ysOGfHj6MSELBMNGMj6ZspdrpSiWguGvGxA==}
-    engines: {node: '>=14', npm: '>=6'}
-    peerDependencies:
-      video.js: ^6 || ^7 || ^8
-
-  videojs-font@4.1.0:
-    resolution: {integrity: sha512-X1LuPfLZPisPLrANIAKCknZbZu5obVM/ylfd1CN+SsCmPZQ3UMDPcvLTpPBJxcBuTpHQq2MO1QCFt7p8spnZ/w==}
-
-  videojs-vtt.js@0.15.4:
-    resolution: {integrity: sha512-r6IhM325fcLb1D6pgsMkTQT1PpFdUdYZa1iqk7wJEu+QlibBwATPfPc9Bg8Jiym0GE5yP1AG2rMLu+QMVWkYtA==}
-
-  vite@4.2.0:
-    resolution: {integrity: sha512-AbDTyzzwuKoRtMIRLGNxhLRuv1FpRgdIw+1y6AQG73Q5+vtecmvzKo/yk8X/vrHDpETRTx01ABijqUHIzBXi0g==}
-    engines: {node: ^14.18.0 || >=16.0.0}
-    hasBin: true
-    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
-
-  vooks@0.2.12:
-    resolution: {integrity: sha512-iox0I3RZzxtKlcgYaStQYKEzWWGAduMmq+jS7OrNdQo1FgGfPMubGL3uGHOU9n97NIvfFDBGnpSvkWyb/NSn/Q==}
-    peerDependencies:
-      vue: ^3.0.0
-
-  vue-demi@0.13.11:
-    resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==}
-    engines: {node: '>=12'}
-    hasBin: true
-    peerDependencies:
-      '@vue/composition-api': ^1.0.0-rc.1
-      vue: ^3.0.0-0 || ^2.6.0
-    peerDependenciesMeta:
-      '@vue/composition-api':
-        optional: true
-
-  vue-demi@0.14.10:
-    resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==}
-    engines: {node: '>=12'}
-    hasBin: true
-    peerDependencies:
-      '@vue/composition-api': ^1.0.0-rc.1
-      vue: ^3.0.0-0 || ^2.6.0
-    peerDependenciesMeta:
-      '@vue/composition-api':
-        optional: true
-
-  vue-eslint-parser@9.3.1:
-    resolution: {integrity: sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g==}
-    engines: {node: ^14.17.0 || >=16.0.0}
-    peerDependencies:
-      eslint: '>=6.0.0'
-
-  vue-i18n@9.9.1:
-    resolution: {integrity: sha512-xyQ4VspLdNSPTKBFBPWa1tvtj+9HuockZwgFeD2OhxxXuC2CWeNvV4seu2o9+vbQOyQbhAM5Ez56oxUrrnTWdw==}
-    engines: {node: '>= 16'}
-    peerDependencies:
-      vue: ^3.0.0
-
-  vue-lazyload@3.0.0:
-    resolution: {integrity: sha512-h2keL/Rj550dLgesgOtXJS9qOiSMmuJNeVlfNAYV1/IYwOQYaWk5mFJlwRxmZDK9YC5gECcFLYYj7z1lKSf9ug==}
-
-  vue-loader@17.2.2:
-    resolution: {integrity: sha512-aqNvKJvnz2A/6VWeJZodAo8XLoAlVwBv+2Z6dama+LHsAF+P/xijQ+OfWrxIs0wcGSJduvdzvTuATzXbNKkpiw==}
-    peerDependencies:
-      '@vue/compiler-sfc': '*'
-      vue: '*'
-      webpack: ^4.1.0 || ^5.0.0-0
-    peerDependenciesMeta:
-      '@vue/compiler-sfc':
-        optional: true
-      vue:
-        optional: true
-
-  vue-router@4.1.6:
-    resolution: {integrity: sha512-DYWYwsG6xNPmLq/FmZn8Ip+qrhFEzA14EI12MsMgVxvHFDYvlr4NXpVF5hrRH1wVcDP8fGi5F4rxuJSl8/r+EQ==}
-    peerDependencies:
-      vue: ^3.2.0
-
-  vue-style-loader@4.1.3:
-    resolution: {integrity: sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==}
-
-  vue@3.5.13:
-    resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==}
-    peerDependencies:
-      typescript: '*'
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-
-  vueuc@0.4.64:
-    resolution: {integrity: sha512-wlJQj7fIwKK2pOEoOq4Aro8JdPOGpX8aWQhV8YkTW9OgWD2uj2O8ANzvSsIGjx7LTOc7QbS7sXdxHi6XvRnHPA==}
-    peerDependencies:
-      vue: ^3.0.11
-
-  w3c-hr-time@1.0.2:
-    resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==}
-    deprecated: Use your platform's native performance.now() and performance.timeOrigin.
-
-  w3c-keyname@2.2.8:
-    resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==}
-
-  w3c-xmlserializer@3.0.0:
-    resolution: {integrity: sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==}
-    engines: {node: '>=12'}
-
-  watchpack@2.4.0:
-    resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==}
-    engines: {node: '>=10.13.0'}
-
-  wave-resampler@1.0.0:
-    resolution: {integrity: sha512-bE3rbpZXuKAV52Cd8/BeJvy82ZqEHK8pPWHrZ9JioaVVTBlmWbDC+u4p9blhFcf0Skepb4hlOAHc25XfqLC48g==}
-    engines: {node: '>=8'}
-
-  wbuf@1.7.3:
-    resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==}
-
-  wcwidth@1.0.1:
-    resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
-
-  webidl-conversions@3.0.1:
-    resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
-
-  webidl-conversions@7.0.0:
-    resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
-    engines: {node: '>=12'}
-
-  webpack-bundle-analyzer@4.8.0:
-    resolution: {integrity: sha512-ZzoSBePshOKhr+hd8u6oCkZVwpVaXgpw23ScGLFpR6SjYI7+7iIWYarjN6OEYOfRt8o7ZyZZQk0DuMizJ+LEIg==}
-    engines: {node: '>= 10.13.0'}
-    hasBin: true
-
-  webpack-cli@4.10.0:
-    resolution: {integrity: sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==}
-    engines: {node: '>=10.13.0'}
-    hasBin: true
-    peerDependencies:
-      '@webpack-cli/generators': '*'
-      '@webpack-cli/migrate': '*'
-      webpack: 4.x.x || 5.x.x
-      webpack-bundle-analyzer: '*'
-      webpack-dev-server: '*'
-    peerDependenciesMeta:
-      '@webpack-cli/generators':
-        optional: true
-      '@webpack-cli/migrate':
-        optional: true
-      webpack-bundle-analyzer:
-        optional: true
-      webpack-dev-server:
-        optional: true
-
-  webpack-dev-middleware@5.3.3:
-    resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==}
-    engines: {node: '>= 12.13.0'}
-    peerDependencies:
-      webpack: ^4.0.0 || ^5.0.0
-
-  webpack-dev-server@4.13.1:
-    resolution: {integrity: sha512-5tWg00bnWbYgkN+pd5yISQKDejRBYGEw15RaEEslH+zdbNDxxaZvEAO2WulaSaFKb5n3YG8JXsGaDsut1D0xdA==}
-    engines: {node: '>= 12.13.0'}
-    hasBin: true
-    peerDependencies:
-      webpack: ^4.37.0 || ^5.0.0
-      webpack-cli: '*'
-    peerDependenciesMeta:
-      webpack:
-        optional: true
-      webpack-cli:
-        optional: true
-
-  webpack-merge@5.8.0:
-    resolution: {integrity: sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==}
-    engines: {node: '>=10.0.0'}
-
-  webpack-sources@1.4.3:
-    resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==}
-
-  webpack-sources@3.2.3:
-    resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
-    engines: {node: '>=10.13.0'}
-
-  webpack-virtual-modules@0.5.0:
-    resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==}
-
-  webpack@5.76.2:
-    resolution: {integrity: sha512-Th05ggRm23rVzEOlX8y67NkYCHa9nTNcwHPBhdg+lKG+mtiW7XgggjAeeLnADAe7mLjJ6LUNfgHAuRRh+Z6J7w==}
-    engines: {node: '>=10.13.0'}
-    hasBin: true
-    peerDependencies:
-      webpack-cli: '*'
-    peerDependenciesMeta:
-      webpack-cli:
-        optional: true
-
-  webpackbar@5.0.2:
-    resolution: {integrity: sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==}
-    engines: {node: '>=12'}
-    peerDependencies:
-      webpack: 3 || 4 || 5
-
-  webrtc-adapter@8.2.2:
-    resolution: {integrity: sha512-jQWwqiAEAFZamWliJo0Q+dIC6ZMJ8BgCFvW/oXWVFby1Nw14dOUfPwZ3lVe4nafDXdTyCUT7xfLt5xXiioXUCQ==}
-    engines: {node: '>=6.0.0', npm: '>=3.10.0'}
-
-  websocket-driver@0.7.4:
-    resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==}
-    engines: {node: '>=0.8.0'}
-
-  websocket-extensions@0.1.4:
-    resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==}
-    engines: {node: '>=0.8.0'}
-
-  webworkify-webpack@2.1.5:
-    resolution: {integrity: sha512-2akF8FIyUvbiBBdD+RoHpoTbHMQF2HwjcxfDvgztAX5YwbZNyrtfUMgvfgFVsgDhDPVTlkbb5vyasqDHfIDPQw==}
-
-  whatwg-encoding@2.0.0:
-    resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==}
-    engines: {node: '>=12'}
-
-  whatwg-mimetype@3.0.0:
-    resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==}
-    engines: {node: '>=12'}
-
-  whatwg-url@10.0.0:
-    resolution: {integrity: sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==}
-    engines: {node: '>=12'}
-
-  whatwg-url@11.0.0:
-    resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==}
-    engines: {node: '>=12'}
-
-  whatwg-url@5.0.0:
-    resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
-
-  which-boxed-primitive@1.0.2:
-    resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
-
-  which-module@2.0.1:
-    resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==}
-
-  which-typed-array@1.1.9:
-    resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==}
-    engines: {node: '>= 0.4'}
-
-  which@1.3.1:
-    resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
-    hasBin: true
-
-  which@2.0.2:
-    resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
-    engines: {node: '>= 8'}
-    hasBin: true
-
-  wide-align@1.1.5:
-    resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
-
-  wildcard@2.0.0:
-    resolution: {integrity: sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==}
-
-  win-release@1.1.1:
-    resolution: {integrity: sha512-iCRnKVvGxOQdsKhcQId2PXV1vV3J/sDPXKA4Oe9+Eti2nb2ESEsYHRYls/UjoUW3bIc5ZDO8dTH50A/5iVN+bw==}
-    engines: {node: '>=0.10.0'}
-
-  windicss-webpack-plugin@1.7.8:
-    resolution: {integrity: sha512-wjKczM/20gOaIaDQfdWV1M6dWAKKp/JQDuUmIEvDopmuo3ereUFVFnGxIjyKAu9U4U7RdcZGUwzL/+bJtIn+pA==}
-
-  windicss@3.5.6:
-    resolution: {integrity: sha512-P1mzPEjgFMZLX0ZqfFht4fhV/FX8DTG7ERG1fBLiWvd34pTLVReS5CVsewKn9PApSgXnVfPWwvq+qUsRwpnwFA==}
-    engines: {node: '>= 12'}
-    hasBin: true
-
-  word-wrap@1.2.3:
-    resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==}
-    engines: {node: '>=0.10.0'}
-
-  wordwrap@1.0.0:
-    resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
-
-  wrap-ansi@6.2.0:
-    resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
-    engines: {node: '>=8'}
-
-  wrap-ansi@7.0.0:
-    resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
-    engines: {node: '>=10'}
-
-  wrappy@1.0.2:
-    resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
-
-  ws@7.5.9:
-    resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==}
-    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
-
-  ws@8.13.0:
-    resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==}
-    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
-
-  ws@8.17.1:
-    resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==}
-    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
-
-  xdg-basedir@4.0.0:
-    resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==}
-    engines: {node: '>=8'}
-
-  xdg-trashdir@3.1.0:
-    resolution: {integrity: sha512-N1XQngeqMBoj9wM4ZFadVV2MymImeiFfYD+fJrNlcVcOHsJFFQe7n3b+aBoTPwARuq2HQxukfzVpQmAk1gN4sQ==}
-    engines: {node: '>=10'}
-
-  xml-name-validator@4.0.0:
-    resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
-    engines: {node: '>=12'}
-
-  xml2js@0.6.2:
-    resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==}
-    engines: {node: '>=4.0.0'}
-
-  xmlbuilder@11.0.1:
-    resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==}
-    engines: {node: '>=4.0'}
-
-  xmlchars@2.2.0:
-    resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
-
-  xmlhttprequest-ssl@2.1.1:
-    resolution: {integrity: sha512-ptjR8YSJIXoA3Mbv5po7RtSYHO6mZr8s7i5VGmEk7QY2pQWyT1o0N+W1gKbOyJPUCGXGnuw0wqe8f0L6Y0ny7g==}
-    engines: {node: '>=0.4.0'}
-
-  xss@1.0.15:
-    resolution: {integrity: sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==}
-    engines: {node: '>= 0.10.0'}
-    hasBin: true
-
-  xtend@4.0.2:
-    resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
-    engines: {node: '>=0.4'}
-
-  y18n@4.0.3:
-    resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
-
-  y18n@5.0.8:
-    resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
-    engines: {node: '>=10'}
-
-  yallist@3.1.1:
-    resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
-
-  yallist@4.0.0:
-    resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
-
-  yaml@1.10.2:
-    resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
-    engines: {node: '>= 6'}
-
-  yargs-parser@18.1.3:
-    resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
-    engines: {node: '>=6'}
-
-  yargs-parser@20.2.9:
-    resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
-    engines: {node: '>=10'}
-
-  yargs-parser@21.1.1:
-    resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
-    engines: {node: '>=12'}
-
-  yargs@15.4.1:
-    resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
-    engines: {node: '>=8'}
-
-  yargs@16.2.0:
-    resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
-    engines: {node: '>=10'}
-
-  yargs@17.7.1:
-    resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==}
-    engines: {node: '>=12'}
-
-  yn@3.1.1:
-    resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
-    engines: {node: '>=6'}
-
-  yocto-queue@0.1.0:
-    resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
-    engines: {node: '>=10'}
-
-snapshots:
-
-  '@ampproject/remapping@2.2.0':
-    dependencies:
-      '@jridgewell/gen-mapping': 0.1.1
-      '@jridgewell/trace-mapping': 0.3.17
-
-  '@antfu/utils@0.7.2': {}
-
-  '@babel/code-frame@7.18.6':
-    dependencies:
-      '@babel/highlight': 7.18.6
-
-  '@babel/compat-data@7.21.0': {}
-
-  '@babel/core@7.21.3':
-    dependencies:
-      '@ampproject/remapping': 2.2.0
-      '@babel/code-frame': 7.18.6
-      '@babel/generator': 7.21.3
-      '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3)
-      '@babel/helper-module-transforms': 7.21.2
-      '@babel/helpers': 7.21.0
-      '@babel/parser': 7.21.3
-      '@babel/template': 7.20.7
-      '@babel/traverse': 7.21.3
-      '@babel/types': 7.21.3
-      convert-source-map: 1.9.0
-      debug: 4.3.4(supports-color@9.3.1)
-      gensync: 1.0.0-beta.2
-      json5: 2.2.3
-      semver: 6.3.0
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/generator@7.21.3':
-    dependencies:
-      '@babel/types': 7.21.3
-      '@jridgewell/gen-mapping': 0.3.2
-      '@jridgewell/trace-mapping': 0.3.17
-      jsesc: 2.5.2
-
-  '@babel/helper-annotate-as-pure@7.18.6':
-    dependencies:
-      '@babel/types': 7.21.3
-
-  '@babel/helper-builder-binary-assignment-operator-visitor@7.18.9':
-    dependencies:
-      '@babel/helper-explode-assignable-expression': 7.18.6
-      '@babel/types': 7.21.3
-
-  '@babel/helper-compilation-targets@7.20.7(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/compat-data': 7.21.0
-      '@babel/core': 7.21.3
-      '@babel/helper-validator-option': 7.21.0
-      browserslist: 4.21.5
-      lru-cache: 5.1.1
-      semver: 6.3.0
-
-  '@babel/helper-create-class-features-plugin@7.21.0(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-annotate-as-pure': 7.18.6
-      '@babel/helper-environment-visitor': 7.18.9
-      '@babel/helper-function-name': 7.21.0
-      '@babel/helper-member-expression-to-functions': 7.21.0
-      '@babel/helper-optimise-call-expression': 7.18.6
-      '@babel/helper-replace-supers': 7.20.7
-      '@babel/helper-skip-transparent-expression-wrappers': 7.20.0
-      '@babel/helper-split-export-declaration': 7.18.6
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/helper-create-regexp-features-plugin@7.21.0(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-annotate-as-pure': 7.18.6
-      regexpu-core: 5.3.2
-
-  '@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3)
-      '@babel/helper-plugin-utils': 7.20.2
-      debug: 4.3.4(supports-color@9.3.1)
-      lodash.debounce: 4.0.8
-      resolve: 1.22.4
-      semver: 6.3.1
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/helper-environment-visitor@7.18.9': {}
-
-  '@babel/helper-explode-assignable-expression@7.18.6':
-    dependencies:
-      '@babel/types': 7.21.3
-
-  '@babel/helper-function-name@7.21.0':
-    dependencies:
-      '@babel/template': 7.20.7
-      '@babel/types': 7.21.3
-
-  '@babel/helper-hoist-variables@7.18.6':
-    dependencies:
-      '@babel/types': 7.21.3
-
-  '@babel/helper-member-expression-to-functions@7.21.0':
-    dependencies:
-      '@babel/types': 7.21.3
-
-  '@babel/helper-module-imports@7.18.6':
-    dependencies:
-      '@babel/types': 7.21.3
-
-  '@babel/helper-module-transforms@7.21.2':
-    dependencies:
-      '@babel/helper-environment-visitor': 7.18.9
-      '@babel/helper-module-imports': 7.18.6
-      '@babel/helper-simple-access': 7.20.2
-      '@babel/helper-split-export-declaration': 7.18.6
-      '@babel/helper-validator-identifier': 7.19.1
-      '@babel/template': 7.20.7
-      '@babel/traverse': 7.21.3
-      '@babel/types': 7.21.3
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/helper-optimise-call-expression@7.18.6':
-    dependencies:
-      '@babel/types': 7.21.3
-
-  '@babel/helper-plugin-utils@7.20.2': {}
-
-  '@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-annotate-as-pure': 7.18.6
-      '@babel/helper-environment-visitor': 7.18.9
-      '@babel/helper-wrap-function': 7.20.5
-      '@babel/types': 7.21.3
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/helper-replace-supers@7.20.7':
-    dependencies:
-      '@babel/helper-environment-visitor': 7.18.9
-      '@babel/helper-member-expression-to-functions': 7.21.0
-      '@babel/helper-optimise-call-expression': 7.18.6
-      '@babel/template': 7.20.7
-      '@babel/traverse': 7.21.3
-      '@babel/types': 7.21.3
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/helper-simple-access@7.20.2':
-    dependencies:
-      '@babel/types': 7.21.3
-
-  '@babel/helper-skip-transparent-expression-wrappers@7.20.0':
-    dependencies:
-      '@babel/types': 7.21.3
-
-  '@babel/helper-split-export-declaration@7.18.6':
-    dependencies:
-      '@babel/types': 7.21.3
-
-  '@babel/helper-string-parser@7.19.4': {}
-
-  '@babel/helper-string-parser@7.25.9': {}
-
-  '@babel/helper-validator-identifier@7.19.1': {}
-
-  '@babel/helper-validator-identifier@7.25.9': {}
-
-  '@babel/helper-validator-option@7.21.0': {}
-
-  '@babel/helper-wrap-function@7.20.5':
-    dependencies:
-      '@babel/helper-function-name': 7.21.0
-      '@babel/template': 7.20.7
-      '@babel/traverse': 7.21.3
-      '@babel/types': 7.21.3
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/helpers@7.21.0':
-    dependencies:
-      '@babel/template': 7.20.7
-      '@babel/traverse': 7.21.3
-      '@babel/types': 7.21.3
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/highlight@7.18.6':
-    dependencies:
-      '@babel/helper-validator-identifier': 7.19.1
-      chalk: 2.4.2
-      js-tokens: 4.0.0
-
-  '@babel/parser@7.21.3':
-    dependencies:
-      '@babel/types': 7.21.3
-
-  '@babel/parser@7.26.3':
-    dependencies:
-      '@babel/types': 7.26.3
-
-  '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.20.7(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/helper-skip-transparent-expression-wrappers': 7.20.0
-      '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.3)
-
-  '@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-environment-visitor': 7.18.9
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.3)
-      '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.3)
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.21.3)
-      '@babel/helper-plugin-utils': 7.20.2
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-proposal-class-static-block@7.21.0(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.21.3)
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.3)
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.3)
-
-  '@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.3)
-
-  '@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.3)
-
-  '@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.3)
-
-  '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.3)
-
-  '@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.3)
-
-  '@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/compat-data': 7.21.0
-      '@babel/core': 7.21.3
-      '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3)
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.3)
-      '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.3)
-
-  '@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.3)
-
-  '@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/helper-skip-transparent-expression-wrappers': 7.20.0
-      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.3)
-
-  '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.21.3)
-      '@babel/helper-plugin-utils': 7.20.2
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-proposal-private-property-in-object@7.21.0(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-annotate-as-pure': 7.18.6
-      '@babel/helper-create-class-features-plugin': 7.21.0(@babel/core@7.21.3)
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.3)
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.21.3)
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-transform-arrow-functions@7.20.7(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-module-imports': 7.18.6
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.21.3)
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-transform-classes@7.21.0(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-annotate-as-pure': 7.18.6
-      '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3)
-      '@babel/helper-environment-visitor': 7.18.9
-      '@babel/helper-function-name': 7.21.0
-      '@babel/helper-optimise-call-expression': 7.18.6
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/helper-replace-supers': 7.20.7
-      '@babel/helper-split-export-declaration': 7.18.6
-      globals: 11.12.0
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-transform-computed-properties@7.20.7(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/template': 7.20.7
-
-  '@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.21.3)
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-transform-for-of@7.21.0(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-transform-function-name@7.18.9(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3)
-      '@babel/helper-function-name': 7.21.0
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-transform-literals@7.18.9(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-module-transforms': 7.21.2
-      '@babel/helper-plugin-utils': 7.20.2
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-transform-modules-commonjs@7.21.2(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-module-transforms': 7.21.2
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/helper-simple-access': 7.20.2
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-transform-modules-systemjs@7.20.11(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-hoist-variables': 7.18.6
-      '@babel/helper-module-transforms': 7.21.2
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/helper-validator-identifier': 7.19.1
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-module-transforms': 7.21.2
-      '@babel/helper-plugin-utils': 7.20.2
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-transform-named-capturing-groups-regex@7.20.5(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.21.3)
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-transform-new-target@7.18.6(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-transform-object-super@7.18.6(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/helper-replace-supers': 7.20.7
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-transform-parameters@7.21.3(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-transform-regenerator@7.20.5(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-      regenerator-transform: 0.15.1
-
-  '@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-transform-runtime@7.21.0(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-module-imports': 7.18.6
-      '@babel/helper-plugin-utils': 7.20.2
-      babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.3)
-      babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.3)
-      babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.3)
-      semver: 6.3.1
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/plugin-transform-shorthand-properties@7.18.6(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-transform-spread@7.20.7(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/helper-skip-transparent-expression-wrappers': 7.20.0
-
-  '@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-transform-unicode-escapes@7.18.10(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-create-regexp-features-plugin': 7.21.0(@babel/core@7.21.3)
-      '@babel/helper-plugin-utils': 7.20.2
-
-  '@babel/preset-env@7.20.2(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/compat-data': 7.21.0
-      '@babel/core': 7.21.3
-      '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3)
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/helper-validator-option': 7.21.0
-      '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.21.3)
-      '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7(@babel/core@7.21.3)
-      '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.21.3)
-      '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.21.3)
-      '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.21.3)
-      '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.21.3)
-      '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.21.3)
-      '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.21.3)
-      '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.21.3)
-      '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.21.3)
-      '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.21.3)
-      '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.21.3)
-      '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.21.3)
-      '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.21.3)
-      '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.21.3)
-      '@babel/plugin-proposal-private-property-in-object': 7.21.0(@babel/core@7.21.3)
-      '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.3)
-      '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.21.3)
-      '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.21.3)
-      '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.21.3)
-      '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.21.3)
-      '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.21.3)
-      '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.21.3)
-      '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.21.3)
-      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.21.3)
-      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.21.3)
-      '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.21.3)
-      '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.21.3)
-      '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.21.3)
-      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.21.3)
-      '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.21.3)
-      '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.21.3)
-      '@babel/plugin-transform-arrow-functions': 7.20.7(@babel/core@7.21.3)
-      '@babel/plugin-transform-async-to-generator': 7.20.7(@babel/core@7.21.3)
-      '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.21.3)
-      '@babel/plugin-transform-block-scoping': 7.21.0(@babel/core@7.21.3)
-      '@babel/plugin-transform-classes': 7.21.0(@babel/core@7.21.3)
-      '@babel/plugin-transform-computed-properties': 7.20.7(@babel/core@7.21.3)
-      '@babel/plugin-transform-destructuring': 7.21.3(@babel/core@7.21.3)
-      '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.3)
-      '@babel/plugin-transform-duplicate-keys': 7.18.9(@babel/core@7.21.3)
-      '@babel/plugin-transform-exponentiation-operator': 7.18.6(@babel/core@7.21.3)
-      '@babel/plugin-transform-for-of': 7.21.0(@babel/core@7.21.3)
-      '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.21.3)
-      '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.21.3)
-      '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.21.3)
-      '@babel/plugin-transform-modules-amd': 7.20.11(@babel/core@7.21.3)
-      '@babel/plugin-transform-modules-commonjs': 7.21.2(@babel/core@7.21.3)
-      '@babel/plugin-transform-modules-systemjs': 7.20.11(@babel/core@7.21.3)
-      '@babel/plugin-transform-modules-umd': 7.18.6(@babel/core@7.21.3)
-      '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5(@babel/core@7.21.3)
-      '@babel/plugin-transform-new-target': 7.18.6(@babel/core@7.21.3)
-      '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.21.3)
-      '@babel/plugin-transform-parameters': 7.21.3(@babel/core@7.21.3)
-      '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.21.3)
-      '@babel/plugin-transform-regenerator': 7.20.5(@babel/core@7.21.3)
-      '@babel/plugin-transform-reserved-words': 7.18.6(@babel/core@7.21.3)
-      '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.21.3)
-      '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.21.3)
-      '@babel/plugin-transform-sticky-regex': 7.18.6(@babel/core@7.21.3)
-      '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.21.3)
-      '@babel/plugin-transform-typeof-symbol': 7.18.9(@babel/core@7.21.3)
-      '@babel/plugin-transform-unicode-escapes': 7.18.10(@babel/core@7.21.3)
-      '@babel/plugin-transform-unicode-regex': 7.18.6(@babel/core@7.21.3)
-      '@babel/preset-modules': 0.1.5(@babel/core@7.21.3)
-      '@babel/types': 7.21.3
-      babel-plugin-polyfill-corejs2: 0.3.3(@babel/core@7.21.3)
-      babel-plugin-polyfill-corejs3: 0.6.0(@babel/core@7.21.3)
-      babel-plugin-polyfill-regenerator: 0.4.1(@babel/core@7.21.3)
-      core-js-compat: 3.29.1
-      semver: 6.3.0
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/preset-modules@0.1.5(@babel/core@7.21.3)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-plugin-utils': 7.20.2
-      '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.21.3)
-      '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.21.3)
-      '@babel/types': 7.21.3
-      esutils: 2.0.3
-
-  '@babel/regjsgen@0.8.0': {}
-
-  '@babel/runtime-corejs2@7.23.9':
-    dependencies:
-      core-js: 2.6.12
-      regenerator-runtime: 0.14.1
-
-  '@babel/runtime-corejs3@7.21.0':
-    dependencies:
-      core-js-pure: 3.29.1
-      regenerator-runtime: 0.13.11
-
-  '@babel/runtime@7.21.0':
-    dependencies:
-      regenerator-runtime: 0.13.11
-
-  '@babel/runtime@7.22.6':
-    dependencies:
-      regenerator-runtime: 0.13.11
-
-  '@babel/template@7.20.7':
-    dependencies:
-      '@babel/code-frame': 7.18.6
-      '@babel/parser': 7.21.3
-      '@babel/types': 7.21.3
-
-  '@babel/traverse@7.21.3':
-    dependencies:
-      '@babel/code-frame': 7.18.6
-      '@babel/generator': 7.21.3
-      '@babel/helper-environment-visitor': 7.18.9
-      '@babel/helper-function-name': 7.21.0
-      '@babel/helper-hoist-variables': 7.18.6
-      '@babel/helper-split-export-declaration': 7.18.6
-      '@babel/parser': 7.21.3
-      '@babel/types': 7.21.3
-      debug: 4.3.4(supports-color@9.3.1)
-      globals: 11.12.0
-    transitivePeerDependencies:
-      - supports-color
-
-  '@babel/types@7.21.3':
-    dependencies:
-      '@babel/helper-string-parser': 7.19.4
-      '@babel/helper-validator-identifier': 7.19.1
-      to-fast-properties: 2.0.0
-
-  '@babel/types@7.26.3':
-    dependencies:
-      '@babel/helper-string-parser': 7.25.9
-      '@babel/helper-validator-identifier': 7.25.9
-
-  '@codemirror/autocomplete@6.18.2(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.2)(@lezer/common@1.2.3)':
-    dependencies:
-      '@codemirror/language': 6.10.3
-      '@codemirror/state': 6.4.1
-      '@codemirror/view': 6.34.2
-      '@lezer/common': 1.2.3
-
-  '@codemirror/commands@6.7.1':
-    dependencies:
-      '@codemirror/language': 6.10.3
-      '@codemirror/state': 6.4.1
-      '@codemirror/view': 6.34.2
-      '@lezer/common': 1.2.3
-
-  '@codemirror/lang-angular@0.1.3':
-    dependencies:
-      '@codemirror/lang-html': 6.4.9
-      '@codemirror/lang-javascript': 6.2.2
-      '@codemirror/language': 6.10.3
-      '@lezer/common': 1.2.3
-      '@lezer/highlight': 1.2.1
-      '@lezer/lr': 1.4.2
-
-  '@codemirror/lang-cpp@6.0.2':
-    dependencies:
-      '@codemirror/language': 6.10.3
-      '@lezer/cpp': 1.1.2
-
-  '@codemirror/lang-css@6.3.0(@codemirror/view@6.34.2)':
-    dependencies:
-      '@codemirror/autocomplete': 6.18.2(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.2)(@lezer/common@1.2.3)
-      '@codemirror/language': 6.10.3
-      '@codemirror/state': 6.4.1
-      '@lezer/common': 1.2.3
-      '@lezer/css': 1.1.9
-    transitivePeerDependencies:
-      - '@codemirror/view'
-
-  '@codemirror/lang-go@6.0.1(@codemirror/view@6.34.2)':
-    dependencies:
-      '@codemirror/autocomplete': 6.18.2(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.2)(@lezer/common@1.2.3)
-      '@codemirror/language': 6.10.3
-      '@codemirror/state': 6.4.1
-      '@lezer/common': 1.2.3
-      '@lezer/go': 1.0.0
-    transitivePeerDependencies:
-      - '@codemirror/view'
-
-  '@codemirror/lang-html@6.4.9':
-    dependencies:
-      '@codemirror/autocomplete': 6.18.2(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.2)(@lezer/common@1.2.3)
-      '@codemirror/lang-css': 6.3.0(@codemirror/view@6.34.2)
-      '@codemirror/lang-javascript': 6.2.2
-      '@codemirror/language': 6.10.3
-      '@codemirror/state': 6.4.1
-      '@codemirror/view': 6.34.2
-      '@lezer/common': 1.2.3
-      '@lezer/css': 1.1.9
-      '@lezer/html': 1.3.10
-
-  '@codemirror/lang-java@6.0.1':
-    dependencies:
-      '@codemirror/language': 6.10.3
-      '@lezer/java': 1.1.3
-
-  '@codemirror/lang-javascript@6.2.2':
-    dependencies:
-      '@codemirror/autocomplete': 6.18.2(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.2)(@lezer/common@1.2.3)
-      '@codemirror/language': 6.10.3
-      '@codemirror/lint': 6.8.2
-      '@codemirror/state': 6.4.1
-      '@codemirror/view': 6.34.2
-      '@lezer/common': 1.2.3
-      '@lezer/javascript': 1.4.19
-
-  '@codemirror/lang-json@6.0.1':
-    dependencies:
-      '@codemirror/language': 6.10.3
-      '@lezer/json': 1.0.2
-
-  '@codemirror/lang-less@6.0.2(@codemirror/view@6.34.2)':
-    dependencies:
-      '@codemirror/lang-css': 6.3.0(@codemirror/view@6.34.2)
-      '@codemirror/language': 6.10.3
-      '@lezer/common': 1.2.3
-      '@lezer/highlight': 1.2.1
-      '@lezer/lr': 1.4.2
-    transitivePeerDependencies:
-      - '@codemirror/view'
-
-  '@codemirror/lang-liquid@6.2.1':
-    dependencies:
-      '@codemirror/autocomplete': 6.18.2(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.2)(@lezer/common@1.2.3)
-      '@codemirror/lang-html': 6.4.9
-      '@codemirror/language': 6.10.3
-      '@codemirror/state': 6.4.1
-      '@codemirror/view': 6.34.2
-      '@lezer/common': 1.2.3
-      '@lezer/highlight': 1.2.1
-      '@lezer/lr': 1.4.2
-
-  '@codemirror/lang-markdown@6.3.1':
-    dependencies:
-      '@codemirror/autocomplete': 6.18.2(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.2)(@lezer/common@1.2.3)
-      '@codemirror/lang-html': 6.4.9
-      '@codemirror/language': 6.10.3
-      '@codemirror/state': 6.4.1
-      '@codemirror/view': 6.34.2
-      '@lezer/common': 1.2.3
-      '@lezer/markdown': 1.3.2
-
-  '@codemirror/lang-php@6.0.1':
-    dependencies:
-      '@codemirror/lang-html': 6.4.9
-      '@codemirror/language': 6.10.3
-      '@codemirror/state': 6.4.1
-      '@lezer/common': 1.2.3
-      '@lezer/php': 1.0.2
-
-  '@codemirror/lang-python@6.1.6(@codemirror/view@6.34.2)':
-    dependencies:
-      '@codemirror/autocomplete': 6.18.2(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.2)(@lezer/common@1.2.3)
-      '@codemirror/language': 6.10.3
-      '@codemirror/state': 6.4.1
-      '@lezer/common': 1.2.3
-      '@lezer/python': 1.1.14
-    transitivePeerDependencies:
-      - '@codemirror/view'
-
-  '@codemirror/lang-rust@6.0.1':
-    dependencies:
-      '@codemirror/language': 6.10.3
-      '@lezer/rust': 1.0.2
-
-  '@codemirror/lang-sass@6.0.2(@codemirror/view@6.34.2)':
-    dependencies:
-      '@codemirror/lang-css': 6.3.0(@codemirror/view@6.34.2)
-      '@codemirror/language': 6.10.3
-      '@codemirror/state': 6.4.1
-      '@lezer/common': 1.2.3
-      '@lezer/sass': 1.0.7
-    transitivePeerDependencies:
-      - '@codemirror/view'
-
-  '@codemirror/lang-sql@6.8.0(@codemirror/view@6.34.2)':
-    dependencies:
-      '@codemirror/autocomplete': 6.18.2(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.2)(@lezer/common@1.2.3)
-      '@codemirror/language': 6.10.3
-      '@codemirror/state': 6.4.1
-      '@lezer/common': 1.2.3
-      '@lezer/highlight': 1.2.1
-      '@lezer/lr': 1.4.2
-    transitivePeerDependencies:
-      - '@codemirror/view'
-
-  '@codemirror/lang-vue@0.1.3':
-    dependencies:
-      '@codemirror/lang-html': 6.4.9
-      '@codemirror/lang-javascript': 6.2.2
-      '@codemirror/language': 6.10.3
-      '@lezer/common': 1.2.3
-      '@lezer/highlight': 1.2.1
-      '@lezer/lr': 1.4.2
-
-  '@codemirror/lang-wast@6.0.2':
-    dependencies:
-      '@codemirror/language': 6.10.3
-      '@lezer/common': 1.2.3
-      '@lezer/highlight': 1.2.1
-      '@lezer/lr': 1.4.2
-
-  '@codemirror/lang-xml@6.1.0':
-    dependencies:
-      '@codemirror/autocomplete': 6.18.2(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.2)(@lezer/common@1.2.3)
-      '@codemirror/language': 6.10.3
-      '@codemirror/state': 6.4.1
-      '@codemirror/view': 6.34.2
-      '@lezer/common': 1.2.3
-      '@lezer/xml': 1.0.5
-
-  '@codemirror/lang-yaml@6.1.1(@codemirror/view@6.34.2)':
-    dependencies:
-      '@codemirror/autocomplete': 6.18.2(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.2)(@lezer/common@1.2.3)
-      '@codemirror/language': 6.10.3
-      '@codemirror/state': 6.4.1
-      '@lezer/common': 1.2.3
-      '@lezer/highlight': 1.2.1
-      '@lezer/yaml': 1.0.3
-    transitivePeerDependencies:
-      - '@codemirror/view'
-
-  '@codemirror/language-data@6.5.1(@codemirror/view@6.34.2)':
-    dependencies:
-      '@codemirror/lang-angular': 0.1.3
-      '@codemirror/lang-cpp': 6.0.2
-      '@codemirror/lang-css': 6.3.0(@codemirror/view@6.34.2)
-      '@codemirror/lang-go': 6.0.1(@codemirror/view@6.34.2)
-      '@codemirror/lang-html': 6.4.9
-      '@codemirror/lang-java': 6.0.1
-      '@codemirror/lang-javascript': 6.2.2
-      '@codemirror/lang-json': 6.0.1
-      '@codemirror/lang-less': 6.0.2(@codemirror/view@6.34.2)
-      '@codemirror/lang-liquid': 6.2.1
-      '@codemirror/lang-markdown': 6.3.1
-      '@codemirror/lang-php': 6.0.1
-      '@codemirror/lang-python': 6.1.6(@codemirror/view@6.34.2)
-      '@codemirror/lang-rust': 6.0.1
-      '@codemirror/lang-sass': 6.0.2(@codemirror/view@6.34.2)
-      '@codemirror/lang-sql': 6.8.0(@codemirror/view@6.34.2)
-      '@codemirror/lang-vue': 0.1.3
-      '@codemirror/lang-wast': 6.0.2
-      '@codemirror/lang-xml': 6.1.0
-      '@codemirror/lang-yaml': 6.1.1(@codemirror/view@6.34.2)
-      '@codemirror/language': 6.10.3
-      '@codemirror/legacy-modes': 6.4.2
-    transitivePeerDependencies:
-      - '@codemirror/view'
-
-  '@codemirror/language@6.10.3':
-    dependencies:
-      '@codemirror/state': 6.4.1
-      '@codemirror/view': 6.34.2
-      '@lezer/common': 1.2.3
-      '@lezer/highlight': 1.2.1
-      '@lezer/lr': 1.4.2
-      style-mod: 4.1.2
-
-  '@codemirror/legacy-modes@6.4.2':
-    dependencies:
-      '@codemirror/language': 6.10.3
-
-  '@codemirror/lint@6.8.2':
-    dependencies:
-      '@codemirror/state': 6.4.1
-      '@codemirror/view': 6.34.2
-      crelt: 1.0.6
-
-  '@codemirror/search@6.5.7':
-    dependencies:
-      '@codemirror/state': 6.4.1
-      '@codemirror/view': 6.34.2
-      crelt: 1.0.6
-
-  '@codemirror/state@6.4.1': {}
-
-  '@codemirror/view@6.34.2':
-    dependencies:
-      '@codemirror/state': 6.4.1
-      style-mod: 4.1.2
-      w3c-keyname: 2.2.8
-
-  '@commitlint/cli@16.3.0(@swc/core@1.3.84)':
-    dependencies:
-      '@commitlint/format': 16.2.1
-      '@commitlint/lint': 16.2.4
-      '@commitlint/load': 16.3.0(@swc/core@1.3.84)
-      '@commitlint/read': 16.2.1
-      '@commitlint/types': 16.2.1
-      lodash: 4.17.21
-      resolve-from: 5.0.0
-      resolve-global: 1.0.0
-      yargs: 17.7.1
-    transitivePeerDependencies:
-      - '@swc/core'
-      - '@swc/wasm'
-
-  '@commitlint/config-conventional@16.2.4':
-    dependencies:
-      conventional-changelog-conventionalcommits: 4.6.3
-
-  '@commitlint/config-validator@16.2.1':
-    dependencies:
-      '@commitlint/types': 16.2.1
-      ajv: 6.12.6
-
-  '@commitlint/config-validator@17.4.4':
-    dependencies:
-      '@commitlint/types': 17.4.4
-      ajv: 8.12.0
-    optional: true
-
-  '@commitlint/ensure@16.2.1':
-    dependencies:
-      '@commitlint/types': 16.2.1
-      lodash: 4.17.21
-
-  '@commitlint/execute-rule@16.2.1': {}
-
-  '@commitlint/execute-rule@17.4.0':
-    optional: true
-
-  '@commitlint/format@16.2.1':
-    dependencies:
-      '@commitlint/types': 16.2.1
-      chalk: 4.1.2
-
-  '@commitlint/is-ignored@16.2.4':
-    dependencies:
-      '@commitlint/types': 16.2.1
-      semver: 7.3.7
-
-  '@commitlint/lint@16.2.4':
-    dependencies:
-      '@commitlint/is-ignored': 16.2.4
-      '@commitlint/parse': 16.2.1
-      '@commitlint/rules': 16.2.4
-      '@commitlint/types': 16.2.1
-
-  '@commitlint/load@16.3.0(@swc/core@1.3.84)':
-    dependencies:
-      '@commitlint/config-validator': 16.2.1
-      '@commitlint/execute-rule': 16.2.1
-      '@commitlint/resolve-extends': 16.2.1
-      '@commitlint/types': 16.2.1
-      '@types/node': 18.15.3
-      chalk: 4.1.2
-      cosmiconfig: 7.1.0
-      cosmiconfig-typescript-loader: 2.0.2(@swc/core@1.3.84)(@types/node@18.15.3)(cosmiconfig@7.1.0)(typescript@4.9.5)
-      lodash: 4.17.21
-      resolve-from: 5.0.0
-      typescript: 4.9.5
-    transitivePeerDependencies:
-      - '@swc/core'
-      - '@swc/wasm'
-
-  '@commitlint/load@17.4.4(@swc/core@1.3.84)':
-    dependencies:
-      '@commitlint/config-validator': 17.4.4
-      '@commitlint/execute-rule': 17.4.0
-      '@commitlint/resolve-extends': 17.4.4
-      '@commitlint/types': 17.4.4
-      '@types/node': 18.15.3
-      chalk: 4.1.2
-      cosmiconfig: 8.1.3
-      cosmiconfig-typescript-loader: 4.3.0(@types/node@18.15.3)(cosmiconfig@8.1.3)(ts-node@10.9.1(@swc/core@1.3.84)(@types/node@18.15.3)(typescript@4.9.5))(typescript@4.9.5)
-      lodash.isplainobject: 4.0.6
-      lodash.merge: 4.6.2
-      lodash.uniq: 4.5.0
-      resolve-from: 5.0.0
-      ts-node: 10.9.1(@swc/core@1.3.84)(@types/node@18.15.3)(typescript@4.9.5)
-      typescript: 4.9.5
-    transitivePeerDependencies:
-      - '@swc/core'
-      - '@swc/wasm'
-    optional: true
-
-  '@commitlint/message@16.2.1': {}
-
-  '@commitlint/parse@16.2.1':
-    dependencies:
-      '@commitlint/types': 16.2.1
-      conventional-changelog-angular: 5.0.13
-      conventional-commits-parser: 3.2.4
-
-  '@commitlint/read@16.2.1':
-    dependencies:
-      '@commitlint/top-level': 16.2.1
-      '@commitlint/types': 16.2.1
-      fs-extra: 10.1.0
-      git-raw-commits: 2.0.11
-
-  '@commitlint/resolve-extends@16.2.1':
-    dependencies:
-      '@commitlint/config-validator': 16.2.1
-      '@commitlint/types': 16.2.1
-      import-fresh: 3.3.0
-      lodash: 4.17.21
-      resolve-from: 5.0.0
-      resolve-global: 1.0.0
-
-  '@commitlint/resolve-extends@17.4.4':
-    dependencies:
-      '@commitlint/config-validator': 17.4.4
-      '@commitlint/types': 17.4.4
-      import-fresh: 3.3.0
-      lodash.mergewith: 4.6.2
-      resolve-from: 5.0.0
-      resolve-global: 1.0.0
-    optional: true
-
-  '@commitlint/rules@16.2.4':
-    dependencies:
-      '@commitlint/ensure': 16.2.1
-      '@commitlint/message': 16.2.1
-      '@commitlint/to-lines': 16.2.1
-      '@commitlint/types': 16.2.1
-      execa: 5.1.1
-
-  '@commitlint/to-lines@16.2.1': {}
-
-  '@commitlint/top-level@16.2.1':
-    dependencies:
-      find-up: 5.0.0
-
-  '@commitlint/types@16.2.1':
-    dependencies:
-      chalk: 4.1.2
-
-  '@commitlint/types@17.4.4':
-    dependencies:
-      chalk: 4.1.2
-    optional: true
-
-  '@cspotcode/source-map-support@0.8.1':
-    dependencies:
-      '@jridgewell/trace-mapping': 0.3.9
-
-  '@css-render/plugin-bem@0.15.14(css-render@0.15.14)':
-    dependencies:
-      css-render: 0.15.14
-
-  '@css-render/vue3-ssr@0.15.14(vue@3.5.13(typescript@5.1.6))':
-    dependencies:
-      vue: 3.5.13(typescript@5.1.6)
-
-  '@csstools/postcss-cascade-layers@1.1.1(postcss@8.4.21)':
-    dependencies:
-      '@csstools/selector-specificity': 2.1.1(postcss-selector-parser@6.0.11)(postcss@8.4.21)
-      postcss: 8.4.21
-      postcss-selector-parser: 6.0.11
-
-  '@csstools/postcss-color-function@1.1.1(postcss@8.4.21)':
-    dependencies:
-      '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.21)
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  '@csstools/postcss-font-format-keywords@1.0.1(postcss@8.4.21)':
-    dependencies:
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  '@csstools/postcss-hwb-function@1.0.2(postcss@8.4.21)':
-    dependencies:
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  '@csstools/postcss-ic-unit@1.0.1(postcss@8.4.21)':
-    dependencies:
-      '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.21)
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  '@csstools/postcss-is-pseudo-class@2.0.7(postcss@8.4.21)':
-    dependencies:
-      '@csstools/selector-specificity': 2.1.1(postcss-selector-parser@6.0.11)(postcss@8.4.21)
-      postcss: 8.4.21
-      postcss-selector-parser: 6.0.11
-
-  '@csstools/postcss-nested-calc@1.0.0(postcss@8.4.21)':
-    dependencies:
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  '@csstools/postcss-normalize-display-values@1.0.1(postcss@8.4.21)':
-    dependencies:
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  '@csstools/postcss-oklab-function@1.1.1(postcss@8.4.21)':
-    dependencies:
-      '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.21)
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  '@csstools/postcss-progressive-custom-properties@1.3.0(postcss@8.4.21)':
-    dependencies:
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  '@csstools/postcss-stepped-value-functions@1.0.1(postcss@8.4.21)':
-    dependencies:
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  '@csstools/postcss-text-decoration-shorthand@1.0.0(postcss@8.4.21)':
-    dependencies:
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  '@csstools/postcss-trigonometric-functions@1.0.2(postcss@8.4.21)':
-    dependencies:
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  '@csstools/postcss-unset-value@1.0.2(postcss@8.4.21)':
-    dependencies:
-      postcss: 8.4.21
-
-  '@csstools/selector-specificity@2.1.1(postcss-selector-parser@6.0.11)(postcss@8.4.21)':
-    dependencies:
-      postcss: 8.4.21
-      postcss-selector-parser: 6.0.11
-
-  '@discoveryjs/json-ext@0.5.7': {}
-
-  '@emotion/hash@0.8.0': {}
-
-  '@esbuild/android-arm64@0.17.12':
-    optional: true
-
-  '@esbuild/android-arm64@0.19.3':
-    optional: true
-
-  '@esbuild/android-arm@0.15.18':
-    optional: true
-
-  '@esbuild/android-arm@0.17.12':
-    optional: true
-
-  '@esbuild/android-arm@0.19.3':
-    optional: true
-
-  '@esbuild/android-x64@0.17.12':
-    optional: true
-
-  '@esbuild/android-x64@0.19.3':
-    optional: true
-
-  '@esbuild/darwin-arm64@0.17.12':
-    optional: true
-
-  '@esbuild/darwin-arm64@0.19.3':
-    optional: true
-
-  '@esbuild/darwin-x64@0.17.12':
-    optional: true
-
-  '@esbuild/darwin-x64@0.19.3':
-    optional: true
-
-  '@esbuild/freebsd-arm64@0.17.12':
-    optional: true
-
-  '@esbuild/freebsd-arm64@0.19.3':
-    optional: true
-
-  '@esbuild/freebsd-x64@0.17.12':
-    optional: true
-
-  '@esbuild/freebsd-x64@0.19.3':
-    optional: true
-
-  '@esbuild/linux-arm64@0.17.12':
-    optional: true
-
-  '@esbuild/linux-arm64@0.19.3':
-    optional: true
-
-  '@esbuild/linux-arm@0.17.12':
-    optional: true
-
-  '@esbuild/linux-arm@0.19.3':
-    optional: true
-
-  '@esbuild/linux-ia32@0.17.12':
-    optional: true
-
-  '@esbuild/linux-ia32@0.19.3':
-    optional: true
-
-  '@esbuild/linux-loong64@0.15.18':
-    optional: true
-
-  '@esbuild/linux-loong64@0.17.12':
-    optional: true
-
-  '@esbuild/linux-loong64@0.19.3':
-    optional: true
-
-  '@esbuild/linux-mips64el@0.17.12':
-    optional: true
-
-  '@esbuild/linux-mips64el@0.19.3':
-    optional: true
-
-  '@esbuild/linux-ppc64@0.17.12':
-    optional: true
-
-  '@esbuild/linux-ppc64@0.19.3':
-    optional: true
-
-  '@esbuild/linux-riscv64@0.17.12':
-    optional: true
-
-  '@esbuild/linux-riscv64@0.19.3':
-    optional: true
-
-  '@esbuild/linux-s390x@0.17.12':
-    optional: true
-
-  '@esbuild/linux-s390x@0.19.3':
-    optional: true
-
-  '@esbuild/linux-x64@0.17.12':
-    optional: true
-
-  '@esbuild/linux-x64@0.19.3':
-    optional: true
-
-  '@esbuild/netbsd-x64@0.17.12':
-    optional: true
-
-  '@esbuild/netbsd-x64@0.19.3':
-    optional: true
-
-  '@esbuild/openbsd-x64@0.17.12':
-    optional: true
-
-  '@esbuild/openbsd-x64@0.19.3':
-    optional: true
-
-  '@esbuild/sunos-x64@0.17.12':
-    optional: true
-
-  '@esbuild/sunos-x64@0.19.3':
-    optional: true
-
-  '@esbuild/win32-arm64@0.17.12':
-    optional: true
-
-  '@esbuild/win32-arm64@0.19.3':
-    optional: true
-
-  '@esbuild/win32-ia32@0.17.12':
-    optional: true
-
-  '@esbuild/win32-ia32@0.19.3':
-    optional: true
-
-  '@esbuild/win32-x64@0.17.12':
-    optional: true
-
-  '@esbuild/win32-x64@0.19.3':
-    optional: true
-
-  '@eslint-community/eslint-utils@4.3.0(eslint@8.36.0)':
-    dependencies:
-      eslint: 8.36.0
-      eslint-visitor-keys: 3.3.0
-
-  '@eslint-community/eslint-utils@4.4.0(eslint@8.36.0)':
-    dependencies:
-      eslint: 8.36.0
-      eslint-visitor-keys: 3.3.0
-
-  '@eslint-community/regexpp@4.4.0': {}
-
-  '@eslint/eslintrc@2.0.1':
-    dependencies:
-      ajv: 6.12.6
-      debug: 4.3.4(supports-color@9.3.1)
-      espree: 9.5.0
-      globals: 13.20.0
-      ignore: 5.2.4
-      import-fresh: 3.3.0
-      js-yaml: 4.1.0
-      minimatch: 3.1.2
-      strip-json-comments: 3.1.1
-    transitivePeerDependencies:
-      - supports-color
-
-  '@eslint/js@8.36.0': {}
-
-  '@humanwhocodes/config-array@0.11.8':
-    dependencies:
-      '@humanwhocodes/object-schema': 1.2.1
-      debug: 4.3.4(supports-color@9.3.1)
-      minimatch: 3.1.2
-    transitivePeerDependencies:
-      - supports-color
-
-  '@humanwhocodes/module-importer@1.0.1': {}
-
-  '@humanwhocodes/object-schema@1.2.1': {}
-
-  '@hutson/parse-repository-url@3.0.2': {}
-
-  '@intlify/core-base@9.9.1':
-    dependencies:
-      '@intlify/message-compiler': 9.9.1
-      '@intlify/shared': 9.9.1
-
-  '@intlify/message-compiler@9.9.1':
-    dependencies:
-      '@intlify/shared': 9.9.1
-      source-map-js: 1.0.2
-
-  '@intlify/shared@9.9.1': {}
-
-  '@jridgewell/gen-mapping@0.1.1':
-    dependencies:
-      '@jridgewell/set-array': 1.1.2
-      '@jridgewell/sourcemap-codec': 1.4.14
-
-  '@jridgewell/gen-mapping@0.3.2':
-    dependencies:
-      '@jridgewell/set-array': 1.1.2
-      '@jridgewell/sourcemap-codec': 1.4.14
-      '@jridgewell/trace-mapping': 0.3.17
-
-  '@jridgewell/resolve-uri@3.1.0': {}
-
-  '@jridgewell/set-array@1.1.2': {}
-
-  '@jridgewell/source-map@0.3.2':
-    dependencies:
-      '@jridgewell/gen-mapping': 0.3.2
-      '@jridgewell/trace-mapping': 0.3.17
-
-  '@jridgewell/sourcemap-codec@1.4.14': {}
-
-  '@jridgewell/sourcemap-codec@1.5.0': {}
-
-  '@jridgewell/trace-mapping@0.3.17':
-    dependencies:
-      '@jridgewell/resolve-uri': 3.1.0
-      '@jridgewell/sourcemap-codec': 1.4.14
-
-  '@jridgewell/trace-mapping@0.3.9':
-    dependencies:
-      '@jridgewell/resolve-uri': 3.1.0
-      '@jridgewell/sourcemap-codec': 1.4.14
-
-  '@juggle/resize-observer@3.4.0': {}
-
-  '@leichtgewicht/ip-codec@2.0.4': {}
-
-  '@lezer/common@1.2.3': {}
-
-  '@lezer/cpp@1.1.2':
-    dependencies:
-      '@lezer/common': 1.2.3
-      '@lezer/highlight': 1.2.1
-      '@lezer/lr': 1.4.2
-
-  '@lezer/css@1.1.9':
-    dependencies:
-      '@lezer/common': 1.2.3
-      '@lezer/highlight': 1.2.1
-      '@lezer/lr': 1.4.2
-
-  '@lezer/go@1.0.0':
-    dependencies:
-      '@lezer/common': 1.2.3
-      '@lezer/highlight': 1.2.1
-      '@lezer/lr': 1.4.2
-
-  '@lezer/highlight@1.2.1':
-    dependencies:
-      '@lezer/common': 1.2.3
-
-  '@lezer/html@1.3.10':
-    dependencies:
-      '@lezer/common': 1.2.3
-      '@lezer/highlight': 1.2.1
-      '@lezer/lr': 1.4.2
-
-  '@lezer/java@1.1.3':
-    dependencies:
-      '@lezer/common': 1.2.3
-      '@lezer/highlight': 1.2.1
-      '@lezer/lr': 1.4.2
-
-  '@lezer/javascript@1.4.19':
-    dependencies:
-      '@lezer/common': 1.2.3
-      '@lezer/highlight': 1.2.1
-      '@lezer/lr': 1.4.2
-
-  '@lezer/json@1.0.2':
-    dependencies:
-      '@lezer/common': 1.2.3
-      '@lezer/highlight': 1.2.1
-      '@lezer/lr': 1.4.2
-
-  '@lezer/lr@1.4.2':
-    dependencies:
-      '@lezer/common': 1.2.3
-
-  '@lezer/markdown@1.3.2':
-    dependencies:
-      '@lezer/common': 1.2.3
-      '@lezer/highlight': 1.2.1
-
-  '@lezer/php@1.0.2':
-    dependencies:
-      '@lezer/common': 1.2.3
-      '@lezer/highlight': 1.2.1
-      '@lezer/lr': 1.4.2
-
-  '@lezer/python@1.1.14':
-    dependencies:
-      '@lezer/common': 1.2.3
-      '@lezer/highlight': 1.2.1
-      '@lezer/lr': 1.4.2
-
-  '@lezer/rust@1.0.2':
-    dependencies:
-      '@lezer/common': 1.2.3
-      '@lezer/highlight': 1.2.1
-      '@lezer/lr': 1.4.2
-
-  '@lezer/sass@1.0.7':
-    dependencies:
-      '@lezer/common': 1.2.3
-      '@lezer/highlight': 1.2.1
-      '@lezer/lr': 1.4.2
-
-  '@lezer/xml@1.0.5':
-    dependencies:
-      '@lezer/common': 1.2.3
-      '@lezer/highlight': 1.2.1
-      '@lezer/lr': 1.4.2
-
-  '@lezer/yaml@1.0.3':
-    dependencies:
-      '@lezer/common': 1.2.3
-      '@lezer/highlight': 1.2.1
-      '@lezer/lr': 1.4.2
-
-  '@mapbox/node-pre-gyp@1.0.11':
-    dependencies:
-      detect-libc: 2.0.2
-      https-proxy-agent: 5.0.1
-      make-dir: 3.1.0
-      node-fetch: 2.6.12
-      nopt: 5.0.0
-      npmlog: 5.0.1
-      rimraf: 3.0.2
-      semver: 7.5.4
-      tar: 6.1.15
-    transitivePeerDependencies:
-      - encoding
-      - supports-color
-    optional: true
-
-  '@nodelib/fs.scandir@2.1.5':
-    dependencies:
-      '@nodelib/fs.stat': 2.0.5
-      run-parallel: 1.2.0
-
-  '@nodelib/fs.stat@2.0.5': {}
-
-  '@nodelib/fs.walk@1.2.8':
-    dependencies:
-      '@nodelib/fs.scandir': 2.1.5
-      fastq: 1.15.0
-
-  '@oxlint/darwin-arm64@0.13.0':
-    optional: true
-
-  '@oxlint/darwin-x64@0.13.0':
-    optional: true
-
-  '@oxlint/linux-arm64-gnu@0.13.0':
-    optional: true
-
-  '@oxlint/linux-arm64-musl@0.13.0':
-    optional: true
-
-  '@oxlint/linux-x64-gnu@0.13.0':
-    optional: true
-
-  '@oxlint/linux-x64-musl@0.13.0':
-    optional: true
-
-  '@oxlint/win32-arm64@0.13.0':
-    optional: true
-
-  '@oxlint/win32-x64@0.13.0':
-    optional: true
-
-  '@pkgr/utils@2.4.2':
-    dependencies:
-      cross-spawn: 7.0.3
-      fast-glob: 3.3.1
-      is-glob: 4.0.3
-      open: 9.1.0
-      picocolors: 1.0.0
-      tslib: 2.6.1
-
-  '@polka/url@1.0.0-next.21': {}
-
-  '@rollup/plugin-babel@5.3.1(@babel/core@7.21.3)(rollup@2.79.1)':
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-module-imports': 7.18.6
-      '@rollup/pluginutils': 3.1.0(rollup@2.79.1)
-      rollup: 2.79.1
-
-  '@rollup/plugin-commonjs@22.0.2(rollup@2.79.1)':
-    dependencies:
-      '@rollup/pluginutils': 3.1.0(rollup@2.79.1)
-      commondir: 1.0.1
-      estree-walker: 2.0.2
-      glob: 7.2.3
-      is-reference: 1.2.1
-      magic-string: 0.25.9
-      resolve: 1.22.4
-      rollup: 2.79.1
-
-  '@rollup/plugin-json@4.1.0(rollup@2.79.1)':
-    dependencies:
-      '@rollup/pluginutils': 3.1.0(rollup@2.79.1)
-      rollup: 2.79.1
-
-  '@rollup/plugin-node-resolve@13.3.0(rollup@2.79.1)':
-    dependencies:
-      '@rollup/pluginutils': 3.1.0(rollup@2.79.1)
-      '@types/resolve': 1.17.1
-      deepmerge: 4.3.1
-      is-builtin-module: 3.2.1
-      is-module: 1.0.0
-      resolve: 1.22.4
-      rollup: 2.79.1
-
-  '@rollup/plugin-typescript@8.5.0(rollup@2.79.1)(tslib@2.6.1)(typescript@5.1.6)':
-    dependencies:
-      '@rollup/pluginutils': 3.1.0(rollup@2.79.1)
-      resolve: 1.22.4
-      rollup: 2.79.1
-      typescript: 5.1.6
-    optionalDependencies:
-      tslib: 2.6.1
-
-  '@rollup/pluginutils@3.1.0(rollup@2.79.1)':
-    dependencies:
-      '@types/estree': 0.0.39
-      estree-walker: 1.0.1
-      picomatch: 2.3.1
-      rollup: 2.79.1
-
-  '@rollup/pluginutils@4.2.1':
-    dependencies:
-      estree-walker: 2.0.2
-      picomatch: 2.3.1
-
-  '@rollup/pluginutils@5.0.2(rollup@2.79.1)':
-    dependencies:
-      '@types/estree': 1.0.0
-      estree-walker: 2.0.2
-      picomatch: 2.3.1
-    optionalDependencies:
-      rollup: 2.79.1
-
-  '@rushstack/eslint-patch@1.2.0': {}
-
-  '@sindresorhus/chunkify@0.2.0': {}
-
-  '@sindresorhus/df@1.0.1': {}
-
-  '@sindresorhus/df@3.1.1':
-    dependencies:
-      execa: 2.1.0
-
-  '@socket.io/component-emitter@3.1.0': {}
-
-  '@soda/friendly-errors-webpack-plugin@1.8.1(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))':
-    dependencies:
-      chalk: 3.0.0
-      error-stack-parser: 2.1.4
-      string-width: 4.2.3
-      strip-ansi: 6.0.1
-      webpack: 5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)
-
-  '@stroncium/procfs@1.2.1': {}
-
-  '@swc/core-darwin-arm64@1.3.84':
-    optional: true
-
-  '@swc/core-darwin-x64@1.3.84':
-    optional: true
-
-  '@swc/core-linux-arm-gnueabihf@1.3.84':
-    optional: true
-
-  '@swc/core-linux-arm64-gnu@1.3.84':
-    optional: true
-
-  '@swc/core-linux-arm64-musl@1.3.84':
-    optional: true
-
-  '@swc/core-linux-x64-gnu@1.3.84':
-    optional: true
-
-  '@swc/core-linux-x64-musl@1.3.84':
-    optional: true
-
-  '@swc/core-win32-arm64-msvc@1.3.84':
-    optional: true
-
-  '@swc/core-win32-ia32-msvc@1.3.84':
-    optional: true
-
-  '@swc/core-win32-x64-msvc@1.3.84':
-    optional: true
-
-  '@swc/core@1.3.84':
-    dependencies:
-      '@swc/types': 0.1.4
-    optionalDependencies:
-      '@swc/core-darwin-arm64': 1.3.84
-      '@swc/core-darwin-x64': 1.3.84
-      '@swc/core-linux-arm-gnueabihf': 1.3.84
-      '@swc/core-linux-arm64-gnu': 1.3.84
-      '@swc/core-linux-arm64-musl': 1.3.84
-      '@swc/core-linux-x64-gnu': 1.3.84
-      '@swc/core-linux-x64-musl': 1.3.84
-      '@swc/core-win32-arm64-msvc': 1.3.84
-      '@swc/core-win32-ia32-msvc': 1.3.84
-      '@swc/core-win32-x64-msvc': 1.3.84
-
-  '@swc/types@0.1.4': {}
-
-  '@tootallnate/once@2.0.0':
-    optional: true
-
-  '@trysound/sax@0.2.0': {}
-
-  '@tsconfig/node10@1.0.9': {}
-
-  '@tsconfig/node12@1.0.11': {}
-
-  '@tsconfig/node14@1.0.3': {}
-
-  '@tsconfig/node16@1.0.3': {}
-
-  '@types/body-parser@1.19.2':
-    dependencies:
-      '@types/connect': 3.4.35
-      '@types/node': 18.15.3
-
-  '@types/bonjour@3.5.10':
-    dependencies:
-      '@types/node': 18.15.3
-
-  '@types/connect-history-api-fallback@1.3.5':
-    dependencies:
-      '@types/express-serve-static-core': 4.17.33
-      '@types/node': 18.15.3
-
-  '@types/connect@3.4.35':
-    dependencies:
-      '@types/node': 18.15.3
-
-  '@types/eslint-scope@3.7.4':
-    dependencies:
-      '@types/eslint': 8.21.2
-      '@types/estree': 1.0.0
-
-  '@types/eslint@8.21.2':
-    dependencies:
-      '@types/estree': 1.0.0
-      '@types/json-schema': 7.0.11
-
-  '@types/estree@0.0.39': {}
-
-  '@types/estree@0.0.51': {}
-
-  '@types/estree@1.0.0': {}
-
-  '@types/express-serve-static-core@4.17.33':
-    dependencies:
-      '@types/node': 18.15.3
-      '@types/qs': 6.9.7
-      '@types/range-parser': 1.2.4
-
-  '@types/express@4.17.17':
-    dependencies:
-      '@types/body-parser': 1.19.2
-      '@types/express-serve-static-core': 4.17.33
-      '@types/qs': 6.9.7
-      '@types/serve-static': 1.15.1
-
-  '@types/fabric@5.3.3': {}
-
-  '@types/html-minifier-terser@6.1.0': {}
-
-  '@types/http-proxy@1.17.10':
-    dependencies:
-      '@types/node': 18.15.3
-
-  '@types/json-schema@7.0.11': {}
-
-  '@types/json5@0.0.29': {}
-
-  '@types/katex@0.16.7': {}
-
-  '@types/linkify-it@5.0.0': {}
-
-  '@types/lodash-es@4.17.12':
-    dependencies:
-      '@types/lodash': 4.17.13
-
-  '@types/lodash@4.17.13': {}
-
-  '@types/markdown-it@14.1.2':
-    dependencies:
-      '@types/linkify-it': 5.0.0
-      '@types/mdurl': 2.0.0
-
-  '@types/mdurl@2.0.0': {}
-
-  '@types/mime@3.0.1': {}
-
-  '@types/minimist@1.2.2': {}
-
-  '@types/node@18.15.3': {}
-
-  '@types/normalize-package-data@2.4.1': {}
-
-  '@types/parse-json@4.0.0': {}
-
-  '@types/qs@6.9.7': {}
-
-  '@types/range-parser@1.2.4': {}
-
-  '@types/resolve@1.17.1':
-    dependencies:
-      '@types/node': 18.15.3
-
-  '@types/retry@0.12.0': {}
-
-  '@types/semver@7.3.13': {}
-
-  '@types/serve-index@1.9.1':
-    dependencies:
-      '@types/express': 4.17.17
-
-  '@types/serve-static@1.15.1':
-    dependencies:
-      '@types/mime': 3.0.1
-      '@types/node': 18.15.3
-
-  '@types/sockjs@0.3.33':
-    dependencies:
-      '@types/node': 18.15.3
-
-  '@types/ssh2@1.11.19':
-    dependencies:
-      '@types/node': 18.15.3
-
-  '@types/video.js@7.3.52': {}
-
-  '@types/web-bluetooth@0.0.20': {}
-
-  '@types/ws@8.5.4':
-    dependencies:
-      '@types/node': 18.15.3
-
-  '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.36.0)(typescript@5.1.6))(eslint@8.36.0)(typescript@5.1.6)':
-    dependencies:
-      '@eslint-community/regexpp': 4.4.0
-      '@typescript-eslint/parser': 5.62.0(eslint@8.36.0)(typescript@5.1.6)
-      '@typescript-eslint/scope-manager': 5.62.0
-      '@typescript-eslint/type-utils': 5.62.0(eslint@8.36.0)(typescript@5.1.6)
-      '@typescript-eslint/utils': 5.62.0(eslint@8.36.0)(typescript@5.1.6)
-      debug: 4.3.4(supports-color@9.3.1)
-      eslint: 8.36.0
-      graphemer: 1.4.0
-      ignore: 5.2.4
-      natural-compare-lite: 1.4.0
-      semver: 7.5.4
-      tsutils: 3.21.0(typescript@5.1.6)
-    optionalDependencies:
-      typescript: 5.1.6
-    transitivePeerDependencies:
-      - supports-color
-
-  '@typescript-eslint/parser@5.62.0(eslint@8.36.0)(typescript@5.1.6)':
-    dependencies:
-      '@typescript-eslint/scope-manager': 5.62.0
-      '@typescript-eslint/types': 5.62.0
-      '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.1.6)
-      debug: 4.3.4(supports-color@9.3.1)
-      eslint: 8.36.0
-    optionalDependencies:
-      typescript: 5.1.6
-    transitivePeerDependencies:
-      - supports-color
-
-  '@typescript-eslint/scope-manager@5.62.0':
-    dependencies:
-      '@typescript-eslint/types': 5.62.0
-      '@typescript-eslint/visitor-keys': 5.62.0
-
-  '@typescript-eslint/type-utils@5.62.0(eslint@8.36.0)(typescript@5.1.6)':
-    dependencies:
-      '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.1.6)
-      '@typescript-eslint/utils': 5.62.0(eslint@8.36.0)(typescript@5.1.6)
-      debug: 4.3.4(supports-color@9.3.1)
-      eslint: 8.36.0
-      tsutils: 3.21.0(typescript@5.1.6)
-    optionalDependencies:
-      typescript: 5.1.6
-    transitivePeerDependencies:
-      - supports-color
-
-  '@typescript-eslint/types@5.62.0': {}
-
-  '@typescript-eslint/typescript-estree@5.62.0(typescript@5.1.6)':
-    dependencies:
-      '@typescript-eslint/types': 5.62.0
-      '@typescript-eslint/visitor-keys': 5.62.0
-      debug: 4.3.4(supports-color@9.3.1)
-      globby: 11.1.0
-      is-glob: 4.0.3
-      semver: 7.5.4
-      tsutils: 3.21.0(typescript@5.1.6)
-    optionalDependencies:
-      typescript: 5.1.6
-    transitivePeerDependencies:
-      - supports-color
-
-  '@typescript-eslint/utils@5.62.0(eslint@8.36.0)(typescript@5.1.6)':
-    dependencies:
-      '@eslint-community/eslint-utils': 4.3.0(eslint@8.36.0)
-      '@types/json-schema': 7.0.11
-      '@types/semver': 7.3.13
-      '@typescript-eslint/scope-manager': 5.62.0
-      '@typescript-eslint/types': 5.62.0
-      '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.1.6)
-      eslint: 8.36.0
-      eslint-scope: 5.1.1
-      semver: 7.5.4
-    transitivePeerDependencies:
-      - supports-color
-      - typescript
-
-  '@typescript-eslint/visitor-keys@5.62.0':
-    dependencies:
-      '@typescript-eslint/types': 5.62.0
-      eslint-visitor-keys: 3.3.0
-
-  '@vavt/util@2.1.0': {}
-
-  '@vicons/ionicons5@0.12.0': {}
-
-  '@videojs/http-streaming@3.0.2(video.js@8.3.0)':
-    dependencies:
-      '@babel/runtime': 7.22.6
-      '@videojs/vhs-utils': 4.0.0
-      aes-decrypter: 4.0.1
-      global: 4.4.0
-      m3u8-parser: 6.2.0
-      mpd-parser: 1.1.1
-      mux.js: 6.3.0
-      video.js: 8.3.0
-
-  '@videojs/vhs-utils@3.0.5':
-    dependencies:
-      '@babel/runtime': 7.22.6
-      global: 4.4.0
-      url-toolkit: 2.2.5
-
-  '@videojs/vhs-utils@4.0.0':
-    dependencies:
-      '@babel/runtime': 7.22.6
-      global: 4.4.0
-      url-toolkit: 2.2.5
-
-  '@videojs/xhr@2.6.0':
-    dependencies:
-      '@babel/runtime': 7.22.6
-      global: 4.4.0
-      is-function: 1.0.2
-
-  '@vue/compiler-core@3.3.4':
-    dependencies:
-      '@babel/parser': 7.21.3
-      '@vue/shared': 3.3.4
-      estree-walker: 2.0.2
-      source-map-js: 1.0.2
-
-  '@vue/compiler-core@3.5.13':
-    dependencies:
-      '@babel/parser': 7.26.3
-      '@vue/shared': 3.5.13
-      entities: 4.5.0
-      estree-walker: 2.0.2
-      source-map-js: 1.2.1
-
-  '@vue/compiler-dom@3.3.4':
-    dependencies:
-      '@vue/compiler-core': 3.3.4
-      '@vue/shared': 3.3.4
-
-  '@vue/compiler-dom@3.5.13':
-    dependencies:
-      '@vue/compiler-core': 3.5.13
-      '@vue/shared': 3.5.13
-
-  '@vue/compiler-sfc@3.3.4':
-    dependencies:
-      '@babel/parser': 7.21.3
-      '@vue/compiler-core': 3.3.4
-      '@vue/compiler-dom': 3.3.4
-      '@vue/compiler-ssr': 3.3.4
-      '@vue/reactivity-transform': 3.3.4
-      '@vue/shared': 3.3.4
-      estree-walker: 2.0.2
-      magic-string: 0.30.0
-      postcss: 8.4.21
-      source-map-js: 1.0.2
-
-  '@vue/compiler-sfc@3.5.13':
-    dependencies:
-      '@babel/parser': 7.26.3
-      '@vue/compiler-core': 3.5.13
-      '@vue/compiler-dom': 3.5.13
-      '@vue/compiler-ssr': 3.5.13
-      '@vue/shared': 3.5.13
-      estree-walker: 2.0.2
-      magic-string: 0.30.15
-      postcss: 8.4.49
-      source-map-js: 1.2.1
-
-  '@vue/compiler-ssr@3.3.4':
-    dependencies:
-      '@vue/compiler-dom': 3.3.4
-      '@vue/shared': 3.3.4
-
-  '@vue/compiler-ssr@3.5.13':
-    dependencies:
-      '@vue/compiler-dom': 3.5.13
-      '@vue/shared': 3.5.13
-
-  '@vue/devtools-api@6.5.0': {}
-
-  '@vue/eslint-config-prettier@8.0.0(@types/eslint@8.21.2)(eslint@8.36.0)(prettier@3.0.1)':
-    dependencies:
-      eslint: 8.36.0
-      eslint-config-prettier: 8.10.0(eslint@8.36.0)
-      eslint-plugin-prettier: 5.0.0(@types/eslint@8.21.2)(eslint-config-prettier@8.10.0(eslint@8.36.0))(eslint@8.36.0)(prettier@3.0.1)
-      prettier: 3.0.1
-    transitivePeerDependencies:
-      - '@types/eslint'
-
-  '@vue/eslint-config-typescript@11.0.3(eslint-plugin-vue@9.16.1(eslint@8.36.0))(eslint@8.36.0)(typescript@5.1.6)':
-    dependencies:
-      '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.36.0)(typescript@5.1.6))(eslint@8.36.0)(typescript@5.1.6)
-      '@typescript-eslint/parser': 5.62.0(eslint@8.36.0)(typescript@5.1.6)
-      eslint: 8.36.0
-      eslint-plugin-vue: 9.16.1(eslint@8.36.0)
-      vue-eslint-parser: 9.3.1(eslint@8.36.0)
-    optionalDependencies:
-      typescript: 5.1.6
-    transitivePeerDependencies:
-      - supports-color
-
-  '@vue/preload-webpack-plugin@2.0.0(html-webpack-plugin@5.5.0(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)))(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))':
-    dependencies:
-      html-webpack-plugin: 5.5.0(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))
-      webpack: 5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)
-
-  '@vue/reactivity-transform@3.3.4':
-    dependencies:
-      '@babel/parser': 7.21.3
-      '@vue/compiler-core': 3.3.4
-      '@vue/shared': 3.3.4
-      estree-walker: 2.0.2
-      magic-string: 0.30.0
-
-  '@vue/reactivity@3.5.13':
-    dependencies:
-      '@vue/shared': 3.5.13
-
-  '@vue/runtime-core@3.5.13':
-    dependencies:
-      '@vue/reactivity': 3.5.13
-      '@vue/shared': 3.5.13
-
-  '@vue/runtime-dom@3.5.13':
-    dependencies:
-      '@vue/reactivity': 3.5.13
-      '@vue/runtime-core': 3.5.13
-      '@vue/shared': 3.5.13
-      csstype: 3.1.3
-
-  '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.1.6))':
-    dependencies:
-      '@vue/compiler-ssr': 3.5.13
-      '@vue/shared': 3.5.13
-      vue: 3.5.13(typescript@5.1.6)
-
-  '@vue/shared@3.3.4': {}
-
-  '@vue/shared@3.5.13': {}
-
-  '@vueuse/core@10.11.1(vue@3.5.13(typescript@5.1.6))':
-    dependencies:
-      '@types/web-bluetooth': 0.0.20
-      '@vueuse/metadata': 10.11.1
-      '@vueuse/shared': 10.11.1(vue@3.5.13(typescript@5.1.6))
-      vue-demi: 0.14.10(vue@3.5.13(typescript@5.1.6))
-    transitivePeerDependencies:
-      - '@vue/composition-api'
-      - vue
-
-  '@vueuse/metadata@10.11.1': {}
-
-  '@vueuse/shared@10.11.1(vue@3.5.13(typescript@5.1.6))':
-    dependencies:
-      vue-demi: 0.14.10(vue@3.5.13(typescript@5.1.6))
-    transitivePeerDependencies:
-      - '@vue/composition-api'
-      - vue
-
-  '@webassemblyjs/ast@1.11.1':
-    dependencies:
-      '@webassemblyjs/helper-numbers': 1.11.1
-      '@webassemblyjs/helper-wasm-bytecode': 1.11.1
-
-  '@webassemblyjs/floating-point-hex-parser@1.11.1': {}
-
-  '@webassemblyjs/helper-api-error@1.11.1': {}
-
-  '@webassemblyjs/helper-buffer@1.11.1': {}
-
-  '@webassemblyjs/helper-numbers@1.11.1':
-    dependencies:
-      '@webassemblyjs/floating-point-hex-parser': 1.11.1
-      '@webassemblyjs/helper-api-error': 1.11.1
-      '@xtuc/long': 4.2.2
-
-  '@webassemblyjs/helper-wasm-bytecode@1.11.1': {}
-
-  '@webassemblyjs/helper-wasm-section@1.11.1':
-    dependencies:
-      '@webassemblyjs/ast': 1.11.1
-      '@webassemblyjs/helper-buffer': 1.11.1
-      '@webassemblyjs/helper-wasm-bytecode': 1.11.1
-      '@webassemblyjs/wasm-gen': 1.11.1
-
-  '@webassemblyjs/ieee754@1.11.1':
-    dependencies:
-      '@xtuc/ieee754': 1.2.0
-
-  '@webassemblyjs/leb128@1.11.1':
-    dependencies:
-      '@xtuc/long': 4.2.2
-
-  '@webassemblyjs/utf8@1.11.1': {}
-
-  '@webassemblyjs/wasm-edit@1.11.1':
-    dependencies:
-      '@webassemblyjs/ast': 1.11.1
-      '@webassemblyjs/helper-buffer': 1.11.1
-      '@webassemblyjs/helper-wasm-bytecode': 1.11.1
-      '@webassemblyjs/helper-wasm-section': 1.11.1
-      '@webassemblyjs/wasm-gen': 1.11.1
-      '@webassemblyjs/wasm-opt': 1.11.1
-      '@webassemblyjs/wasm-parser': 1.11.1
-      '@webassemblyjs/wast-printer': 1.11.1
-
-  '@webassemblyjs/wasm-gen@1.11.1':
-    dependencies:
-      '@webassemblyjs/ast': 1.11.1
-      '@webassemblyjs/helper-wasm-bytecode': 1.11.1
-      '@webassemblyjs/ieee754': 1.11.1
-      '@webassemblyjs/leb128': 1.11.1
-      '@webassemblyjs/utf8': 1.11.1
-
-  '@webassemblyjs/wasm-opt@1.11.1':
-    dependencies:
-      '@webassemblyjs/ast': 1.11.1
-      '@webassemblyjs/helper-buffer': 1.11.1
-      '@webassemblyjs/wasm-gen': 1.11.1
-      '@webassemblyjs/wasm-parser': 1.11.1
-
-  '@webassemblyjs/wasm-parser@1.11.1':
-    dependencies:
-      '@webassemblyjs/ast': 1.11.1
-      '@webassemblyjs/helper-api-error': 1.11.1
-      '@webassemblyjs/helper-wasm-bytecode': 1.11.1
-      '@webassemblyjs/ieee754': 1.11.1
-      '@webassemblyjs/leb128': 1.11.1
-      '@webassemblyjs/utf8': 1.11.1
-
-  '@webassemblyjs/wast-printer@1.11.1':
-    dependencies:
-      '@webassemblyjs/ast': 1.11.1
-      '@xtuc/long': 4.2.2
-
-  '@webav/av-cliper@1.0.6':
-    dependencies:
-      '@webav/internal-utils': 1.0.6
-      '@webav/mp4box.js': 0.5.4-fenghen
-      opfs-tools: 0.6.1
-      wave-resampler: 1.0.0
-
-  '@webav/av-recorder@1.0.6':
-    dependencies:
-      '@webav/av-cliper': 1.0.6
-      '@webav/internal-utils': 1.0.6
-
-  '@webav/internal-utils@1.0.6':
-    dependencies:
-      '@webav/mp4box.js': 0.5.4-fenghen
-
-  '@webav/mp4box.js@0.5.4-fenghen': {}
-
-  '@webpack-cli/configtest@1.2.0(webpack-cli@4.10.0(webpack-bundle-analyzer@4.8.0)(webpack-dev-server@4.13.1)(webpack@5.76.2))(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))':
-    dependencies:
-      webpack: 5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)
-      webpack-cli: 4.10.0(webpack-bundle-analyzer@4.8.0)(webpack-dev-server@4.13.1)(webpack@5.76.2)
-
-  '@webpack-cli/info@1.5.0(webpack-cli@4.10.0(webpack-bundle-analyzer@4.8.0)(webpack-dev-server@4.13.1)(webpack@5.76.2))':
-    dependencies:
-      envinfo: 7.8.1
-      webpack-cli: 4.10.0(webpack-bundle-analyzer@4.8.0)(webpack-dev-server@4.13.1)(webpack@5.76.2)
-
-  '@webpack-cli/serve@1.7.0(webpack-cli@4.10.0(webpack-bundle-analyzer@4.8.0)(webpack-dev-server@4.13.1)(webpack@5.76.2))(webpack-dev-server@4.13.1(webpack-cli@4.10.0)(webpack@5.76.2))':
-    dependencies:
-      webpack-cli: 4.10.0(webpack-bundle-analyzer@4.8.0)(webpack-dev-server@4.13.1)(webpack@5.76.2)
-    optionalDependencies:
-      webpack-dev-server: 4.13.1(webpack-cli@4.10.0)(webpack@5.76.2)
-
-  '@windicss/config@1.8.10':
-    dependencies:
-      debug: 4.3.4(supports-color@9.3.1)
-      jiti: 1.18.2
-      windicss: 3.5.6
-    transitivePeerDependencies:
-      - supports-color
-
-  '@windicss/plugin-utils@1.8.10':
-    dependencies:
-      '@antfu/utils': 0.7.2
-      '@windicss/config': 1.8.10
-      debug: 4.3.4(supports-color@9.3.1)
-      fast-glob: 3.3.1
-      magic-string: 0.27.0
-      micromatch: 4.0.5
-      windicss: 3.5.6
-    transitivePeerDependencies:
-      - supports-color
-
-  '@xmldom/xmldom@0.8.8': {}
-
-  '@xtuc/ieee754@1.2.0': {}
-
-  '@xtuc/long@4.2.2': {}
-
-  JSONStream@1.3.5:
-    dependencies:
-      jsonparse: 1.3.1
-      through: 2.3.8
-
-  abab@2.0.6:
-    optional: true
-
-  abbrev@1.1.1:
-    optional: true
-
-  accepts@1.3.8:
-    dependencies:
-      mime-types: 2.1.35
-      negotiator: 0.6.3
-
-  acorn-globals@6.0.0:
-    dependencies:
-      acorn: 7.4.1
-      acorn-walk: 7.2.0
-    optional: true
-
-  acorn-import-assertions@1.8.0(acorn@8.8.2):
-    dependencies:
-      acorn: 8.8.2
-
-  acorn-jsx@5.3.2(acorn@8.8.2):
-    dependencies:
-      acorn: 8.8.2
-
-  acorn-walk@7.2.0:
-    optional: true
-
-  acorn-walk@8.2.0: {}
-
-  acorn@7.4.1:
-    optional: true
-
-  acorn@8.8.2: {}
-
-  add-stream@1.0.0: {}
-
-  address@1.2.2: {}
-
-  aes-decrypter@4.0.1:
-    dependencies:
-      '@babel/runtime': 7.22.6
-      '@videojs/vhs-utils': 3.0.5
-      global: 4.4.0
-      pkcs7: 1.0.4
-
-  agent-base@6.0.2:
-    dependencies:
-      debug: 4.3.4(supports-color@9.3.1)
-    transitivePeerDependencies:
-      - supports-color
-    optional: true
-
-  agentkeepalive@3.5.2:
-    dependencies:
-      humanize-ms: 1.2.1
-
-  agentkeepalive@4.5.0:
-    dependencies:
-      humanize-ms: 1.2.1
-
-  aggregate-error@3.1.0:
-    dependencies:
-      clean-stack: 2.2.0
-      indent-string: 4.0.0
-
-  aggregate-error@4.0.1:
-    dependencies:
-      clean-stack: 4.2.0
-      indent-string: 5.0.0
-
-  ajv-formats@1.6.1(ajv@7.2.4):
-    optionalDependencies:
-      ajv: 7.2.4
-
-  ajv-formats@2.1.1(ajv@8.12.0):
-    optionalDependencies:
-      ajv: 8.12.0
-
-  ajv-keywords@3.5.2(ajv@6.12.6):
-    dependencies:
-      ajv: 6.12.6
-
-  ajv-keywords@5.1.0(ajv@8.12.0):
-    dependencies:
-      ajv: 8.12.0
-      fast-deep-equal: 3.1.3
-
-  ajv@6.12.6:
-    dependencies:
-      fast-deep-equal: 3.1.3
-      fast-json-stable-stringify: 2.1.0
-      json-schema-traverse: 0.4.1
-      uri-js: 4.4.1
-
-  ajv@7.2.4:
-    dependencies:
-      fast-deep-equal: 3.1.3
-      json-schema-traverse: 1.0.0
-      require-from-string: 2.0.2
-      uri-js: 4.4.1
-
-  ajv@8.12.0:
-    dependencies:
-      fast-deep-equal: 3.1.3
-      json-schema-traverse: 1.0.0
-      require-from-string: 2.0.2
-      uri-js: 4.4.1
-
-  ali-oss@6.20.0:
-    dependencies:
-      address: 1.2.2
-      agentkeepalive: 3.5.2
-      bowser: 1.9.4
-      copy-to: 2.0.1
-      dateformat: 2.2.0
-      debug: 4.3.4(supports-color@9.3.1)
-      destroy: 1.2.0
-      end-or-error: 1.0.1
-      get-ready: 1.0.0
-      humanize-ms: 1.2.1
-      is-type-of: 1.4.0
-      js-base64: 2.6.4
-      jstoxml: 2.2.9
-      lodash: 4.17.21
-      merge-descriptors: 1.0.1
-      mime: 2.6.0
-      platform: 1.3.6
-      pump: 3.0.0
-      qs: 6.11.0
-      sdk-base: 2.0.1
-      stream-http: 2.8.2
-      stream-wormhole: 1.1.0
-      urllib: 2.41.0
-      utility: 1.18.0
-      xml2js: 0.6.2
-    transitivePeerDependencies:
-      - proxy-agent
-      - supports-color
-
-  ansi-escapes@3.2.0: {}
-
-  ansi-escapes@4.3.2:
-    dependencies:
-      type-fest: 0.21.3
-
-  ansi-html-community@0.0.8: {}
-
-  ansi-regex@3.0.1: {}
-
-  ansi-regex@4.1.1: {}
-
-  ansi-regex@5.0.1: {}
-
-  ansi-regex@6.0.1: {}
-
-  ansi-styles@3.2.1:
-    dependencies:
-      color-convert: 1.9.3
-
-  ansi-styles@4.3.0:
-    dependencies:
-      color-convert: 2.0.1
-
-  ansi-styles@6.2.1: {}
-
-  any-promise@1.3.0: {}
-
-  anymatch@3.1.3:
-    dependencies:
-      normalize-path: 3.0.0
-      picomatch: 2.3.1
-
-  aproba@2.0.0:
-    optional: true
-
-  are-we-there-yet@2.0.0:
-    dependencies:
-      delegates: 1.0.0
-      readable-stream: 3.6.2
-    optional: true
-
-  arg@4.1.3: {}
-
-  argparse@2.0.1: {}
-
-  array-buffer-byte-length@1.0.0:
-    dependencies:
-      call-bind: 1.0.2
-      is-array-buffer: 3.0.2
-
-  array-flatten@1.1.1: {}
-
-  array-flatten@2.1.2: {}
-
-  array-ify@1.0.0: {}
-
-  array-includes@3.1.6:
-    dependencies:
-      call-bind: 1.0.2
-      define-properties: 1.2.0
-      es-abstract: 1.21.2
-      get-intrinsic: 1.2.0
-      is-string: 1.0.7
-
-  array-union@1.0.2:
-    dependencies:
-      array-uniq: 1.0.3
-
-  array-union@2.1.0: {}
-
-  array-uniq@1.0.3: {}
-
-  array.prototype.findlastindex@1.2.2:
-    dependencies:
-      call-bind: 1.0.2
-      define-properties: 1.2.0
-      es-abstract: 1.21.2
-      es-shim-unscopables: 1.0.0
-      get-intrinsic: 1.2.0
-
-  array.prototype.flat@1.3.1:
-    dependencies:
-      call-bind: 1.0.2
-      define-properties: 1.2.0
-      es-abstract: 1.21.2
-      es-shim-unscopables: 1.0.0
-
-  array.prototype.flatmap@1.3.1:
-    dependencies:
-      call-bind: 1.0.2
-      define-properties: 1.2.0
-      es-abstract: 1.21.2
-      es-shim-unscopables: 1.0.0
-
-  arrify@1.0.1: {}
-
-  asn1@0.2.6:
-    dependencies:
-      safer-buffer: 2.1.2
-
-  assert-plus@1.0.0: {}
-
-  astral-regex@2.0.0: {}
-
-  async-validator@4.2.5: {}
-
-  async@2.6.4:
-    dependencies:
-      lodash: 4.17.21
-
-  asynckit@0.4.0: {}
-
-  at-least-node@1.0.0: {}
-
-  atomically@1.7.0: {}
-
-  autoprefixer@10.4.14(postcss@8.4.21):
-    dependencies:
-      browserslist: 4.21.5
-      caniuse-lite: 1.0.30001467
-      fraction.js: 4.2.0
-      normalize-range: 0.1.2
-      picocolors: 1.0.0
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  available-typed-arrays@1.0.5: {}
-
-  aws-sign2@0.7.0: {}
-
-  aws4@1.12.0: {}
-
-  axios@1.3.4:
-    dependencies:
-      follow-redirects: 1.15.2
-      form-data: 4.0.0
-      proxy-from-env: 1.1.0
-    transitivePeerDependencies:
-      - debug
-
-  babel-loader@8.3.0(@babel/core@7.21.3)(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)):
-    dependencies:
-      '@babel/core': 7.21.3
-      find-cache-dir: 3.3.2
-      loader-utils: 2.0.4
-      make-dir: 3.1.0
-      schema-utils: 2.7.1
-      webpack: 5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)
-
-  babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.21.3):
-    dependencies:
-      '@babel/compat-data': 7.21.0
-      '@babel/core': 7.21.3
-      '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.3)
-      semver: 6.3.1
-    transitivePeerDependencies:
-      - supports-color
-
-  babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.21.3):
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.3)
-      core-js-compat: 3.29.1
-    transitivePeerDependencies:
-      - supports-color
-
-  babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.21.3):
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.21.3)
-    transitivePeerDependencies:
-      - supports-color
-
-  balanced-match@1.0.2: {}
-
-  base64-js@1.5.1: {}
-
-  batch@0.6.1: {}
-
-  bcrypt-pbkdf@1.0.2:
-    dependencies:
-      tweetnacl: 0.14.5
-
-  before@0.0.1: {}
-
-  big-integer@1.6.51: {}
-
-  big.js@5.2.2: {}
-
-  billd-deploy@1.1.0(@swc/core@1.3.84)(@types/node@18.15.3)(esbuild@0.15.18)(sass@1.59.3)(terser@5.16.6)(webpack-cli@4.10.0(webpack-bundle-analyzer@4.8.0)(webpack-dev-server@4.13.1)(webpack@5.76.2)):
-    dependencies:
-      ali-oss: 6.20.0
-      billd-html-webpack-plugin: 1.0.6(@swc/core@1.3.84)(@types/node@18.15.3)(esbuild@0.15.18)(sass@1.59.3)(terser@5.16.6)(webpack-cli@4.10.0(webpack-bundle-analyzer@4.8.0)(webpack-dev-server@4.13.1)(webpack@5.76.2))
-      cos-nodejs-sdk-v5: 2.13.1
-      esdk-obs-nodejs: 3.23.11
-      inquirer: 8.2.5
-      node-ssh: 13.1.0
-      qiniu: 7.11.0
-      semver: 7.5.4
-    transitivePeerDependencies:
-      - '@swc/core'
-      - '@types/node'
-      - esbuild
-      - less
-      - proxy-agent
-      - sass
-      - stylus
-      - sugarss
-      - supports-color
-      - terser
-      - uglify-js
-      - webpack-cli
-
-  billd-html-webpack-plugin@1.0.6(@swc/core@1.3.84)(@types/node@18.15.3)(esbuild@0.15.18)(sass@1.59.3)(terser@5.16.6)(webpack-cli@4.10.0(webpack-bundle-analyzer@4.8.0)(webpack-dev-server@4.13.1)(webpack@5.76.2)):
-    dependencies:
-      vite: 4.2.0(@types/node@18.15.3)(sass@1.59.3)(terser@5.16.6)
-      webpack: 5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)
-    transitivePeerDependencies:
-      - '@swc/core'
-      - '@types/node'
-      - esbuild
-      - less
-      - sass
-      - stylus
-      - sugarss
-      - terser
-      - uglify-js
-      - webpack-cli
-
-  billd-scss@0.0.8: {}
-
-  billd-utils@0.0.25(tslib@2.6.1)(typescript@5.1.6):
-    dependencies:
-      '@babel/core': 7.21.3
-      '@babel/plugin-transform-runtime': 7.21.0(@babel/core@7.21.3)
-      '@babel/preset-env': 7.20.2(@babel/core@7.21.3)
-      '@babel/runtime-corejs3': 7.21.0
-      '@rollup/plugin-babel': 5.3.1(@babel/core@7.21.3)(rollup@2.79.1)
-      '@rollup/plugin-commonjs': 22.0.2(rollup@2.79.1)
-      '@rollup/plugin-json': 4.1.0(rollup@2.79.1)
-      '@rollup/plugin-node-resolve': 13.3.0(rollup@2.79.1)
-      '@rollup/plugin-typescript': 8.5.0(rollup@2.79.1)(tslib@2.6.1)(typescript@5.1.6)
-      esbuild: 0.15.18
-      rollup: 2.79.1
-      rollup-plugin-dts: 4.2.3(rollup@2.79.1)(typescript@5.1.6)
-      rollup-plugin-esbuild: 4.10.3(esbuild@0.15.18)(rollup@2.79.1)
-      rollup-plugin-terser: 7.0.2(rollup@2.79.1)
-      rollup-plugin-typescript2: 0.32.1(rollup@2.79.1)(typescript@5.1.6)
-    transitivePeerDependencies:
-      - '@types/babel__core'
-      - supports-color
-      - tslib
-      - typescript
-
-  binary-extensions@2.2.0: {}
-
-  bl@4.1.0:
-    dependencies:
-      buffer: 5.7.1
-      inherits: 2.0.4
-      readable-stream: 3.6.2
-
-  block-stream2@2.1.0:
-    dependencies:
-      readable-stream: 3.6.2
-
-  body-parser@1.20.1:
-    dependencies:
-      bytes: 3.1.2
-      content-type: 1.0.5
-      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
-    transitivePeerDependencies:
-      - supports-color
-
-  bonjour-service@1.1.0:
-    dependencies:
-      array-flatten: 2.1.2
-      dns-equal: 1.0.0
-      fast-deep-equal: 3.1.3
-      multicast-dns: 7.2.5
-
-  boolbase@1.0.0: {}
-
-  bowser@1.9.4: {}
-
-  bplist-parser@0.2.0:
-    dependencies:
-      big-integer: 1.6.51
-
-  brace-expansion@1.1.11:
-    dependencies:
-      balanced-match: 1.0.2
-      concat-map: 0.0.1
-
-  brace-expansion@2.0.1:
-    dependencies:
-      balanced-match: 1.0.2
-
-  braces@3.0.2:
-    dependencies:
-      fill-range: 7.0.1
-
-  browser-process-hrtime@1.0.0:
-    optional: true
-
-  browserslist@4.21.5:
-    dependencies:
-      caniuse-lite: 1.0.30001467
-      electron-to-chromium: 1.4.333
-      node-releases: 2.0.10
-      update-browserslist-db: 1.0.10(browserslist@4.21.5)
-
-  buffer-from@1.1.2: {}
-
-  buffer@5.7.1:
-    dependencies:
-      base64-js: 1.5.1
-      ieee754: 1.2.1
-
-  buildcheck@0.0.6:
-    optional: true
-
-  builtin-modules@3.3.0: {}
-
-  builtin-status-codes@3.0.0: {}
-
-  bundle-name@3.0.0:
-    dependencies:
-      run-applescript: 5.0.0
-
-  bytes@3.0.0: {}
-
-  bytes@3.1.2: {}
-
-  cachedir@2.3.0: {}
-
-  call-bind@1.0.2:
-    dependencies:
-      function-bind: 1.1.1
-      get-intrinsic: 1.2.0
-
-  callsites@3.1.0: {}
-
-  camel-case@4.1.2:
-    dependencies:
-      pascal-case: 3.1.2
-      tslib: 2.6.1
-
-  camelcase-keys@6.2.2:
-    dependencies:
-      camelcase: 5.3.1
-      map-obj: 4.3.0
-      quick-lru: 4.0.1
-
-  camelcase@5.3.1: {}
-
-  caniuse-api@3.0.0:
-    dependencies:
-      browserslist: 4.21.5
-      caniuse-lite: 1.0.30001467
-      lodash.memoize: 4.1.2
-      lodash.uniq: 4.5.0
-
-  caniuse-lite@1.0.30001467: {}
-
-  canvas@2.11.2:
-    dependencies:
-      '@mapbox/node-pre-gyp': 1.0.11
-      nan: 2.17.0
-      simple-get: 3.1.1
-    transitivePeerDependencies:
-      - encoding
-      - supports-color
-    optional: true
-
-  caseless@0.12.0: {}
-
-  chalk@2.4.2:
-    dependencies:
-      ansi-styles: 3.2.1
-      escape-string-regexp: 1.0.5
-      supports-color: 5.5.0
-
-  chalk@3.0.0:
-    dependencies:
-      ansi-styles: 4.3.0
-      supports-color: 7.2.0
-
-  chalk@4.1.2:
-    dependencies:
-      ansi-styles: 4.3.0
-      supports-color: 7.2.0
-
-  chardet@0.7.0: {}
-
-  chokidar@3.5.3:
-    dependencies:
-      anymatch: 3.1.3
-      braces: 3.0.2
-      glob-parent: 5.1.2
-      is-binary-path: 2.1.0
-      is-glob: 4.0.3
-      normalize-path: 3.0.0
-      readdirp: 3.6.0
-    optionalDependencies:
-      fsevents: 2.3.2
-
-  chownr@2.0.0:
-    optional: true
-
-  chrome-trace-event@1.0.3: {}
-
-  clean-css@5.3.2:
-    dependencies:
-      source-map: 0.6.1
-
-  clean-stack@2.2.0: {}
-
-  clean-stack@4.2.0:
-    dependencies:
-      escape-string-regexp: 5.0.0
-
-  cli-cursor@2.1.0:
-    dependencies:
-      restore-cursor: 2.0.0
-
-  cli-cursor@3.1.0:
-    dependencies:
-      restore-cursor: 3.1.0
-
-  cli-spinners@2.7.0: {}
-
-  cli-truncate@2.1.0:
-    dependencies:
-      slice-ansi: 3.0.0
-      string-width: 4.2.3
-
-  cli-truncate@3.1.0:
-    dependencies:
-      slice-ansi: 5.0.0
-      string-width: 5.1.2
-
-  cli-width@2.2.1: {}
-
-  cli-width@3.0.0: {}
-
-  cliui@6.0.0:
-    dependencies:
-      string-width: 4.2.3
-      strip-ansi: 6.0.1
-      wrap-ansi: 6.2.0
-
-  cliui@7.0.4:
-    dependencies:
-      string-width: 4.2.3
-      strip-ansi: 6.0.1
-      wrap-ansi: 7.0.0
-
-  cliui@8.0.1:
-    dependencies:
-      string-width: 4.2.3
-      strip-ansi: 6.0.1
-      wrap-ansi: 7.0.0
-
-  clone-deep@4.0.1:
-    dependencies:
-      is-plain-object: 2.0.4
-      kind-of: 6.0.3
-      shallow-clone: 3.0.1
-
-  clone@1.0.4: {}
-
-  codemirror@6.0.1(@lezer/common@1.2.3):
-    dependencies:
-      '@codemirror/autocomplete': 6.18.2(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.2)(@lezer/common@1.2.3)
-      '@codemirror/commands': 6.7.1
-      '@codemirror/language': 6.10.3
-      '@codemirror/lint': 6.8.2
-      '@codemirror/search': 6.5.7
-      '@codemirror/state': 6.4.1
-      '@codemirror/view': 6.34.2
-    transitivePeerDependencies:
-      - '@lezer/common'
-
-  color-convert@1.9.3:
-    dependencies:
-      color-name: 1.1.3
-
-  color-convert@2.0.1:
-    dependencies:
-      color-name: 1.1.4
-
-  color-name@1.1.3: {}
-
-  color-name@1.1.4: {}
-
-  color-support@1.1.3:
-    optional: true
-
-  colord@2.9.3: {}
-
-  colorette@2.0.19: {}
-
-  combined-stream@1.0.8:
-    dependencies:
-      delayed-stream: 1.0.0
-
-  commander@2.20.3: {}
-
-  commander@7.2.0: {}
-
-  commander@8.3.0: {}
-
-  commander@9.5.0: {}
-
-  commitizen@4.3.0(@swc/core@1.3.84):
-    dependencies:
-      cachedir: 2.3.0
-      cz-conventional-changelog: 3.3.0(@swc/core@1.3.84)
-      dedent: 0.7.0
-      detect-indent: 6.1.0
-      find-node-modules: 2.1.3
-      find-root: 1.1.0
-      fs-extra: 9.1.0
-      glob: 7.2.3
-      inquirer: 8.2.5
-      is-utf8: 0.2.1
-      lodash: 4.17.21
-      minimist: 1.2.7
-      strip-bom: 4.0.0
-      strip-json-comments: 3.1.1
-    transitivePeerDependencies:
-      - '@swc/core'
-      - '@swc/wasm'
-
-  commondir@1.0.1: {}
-
-  compare-func@2.0.0:
-    dependencies:
-      array-ify: 1.0.0
-      dot-prop: 5.3.0
-
-  component-emitter@1.3.1: {}
-
-  compressible@2.0.18:
-    dependencies:
-      mime-db: 1.52.0
-
-  compression-webpack-plugin@9.2.0(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)):
-    dependencies:
-      schema-utils: 4.0.0
-      serialize-javascript: 6.0.1
-      webpack: 5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)
-
-  compression@1.7.4:
-    dependencies:
-      accepts: 1.3.8
-      bytes: 3.0.0
-      compressible: 2.0.18
-      debug: 2.6.9
-      on-headers: 1.0.2
-      safe-buffer: 5.1.2
-      vary: 1.1.2
-    transitivePeerDependencies:
-      - supports-color
-
-  concat-map@0.0.1: {}
-
-  concat-stream@2.0.0:
-    dependencies:
-      buffer-from: 1.1.2
-      inherits: 2.0.4
-      readable-stream: 3.6.2
-      typedarray: 0.0.6
-
-  conf@9.0.2:
-    dependencies:
-      ajv: 7.2.4
-      ajv-formats: 1.6.1(ajv@7.2.4)
-      atomically: 1.7.0
-      debounce-fn: 4.0.0
-      dot-prop: 6.0.1
-      env-paths: 2.2.1
-      json-schema-typed: 7.0.3
-      make-dir: 3.1.0
-      onetime: 5.1.2
-      pkg-up: 3.1.0
-      semver: 7.5.4
-
-  connect-history-api-fallback@2.0.0: {}
-
-  consola@2.15.3: {}
-
-  console-control-strings@1.1.0:
-    optional: true
-
-  content-disposition@0.5.4:
-    dependencies:
-      safe-buffer: 5.2.1
-
-  content-type@1.0.5: {}
-
-  conventional-changelog-angular@5.0.13:
-    dependencies:
-      compare-func: 2.0.0
-      q: 1.5.1
-
-  conventional-changelog-atom@2.0.8:
-    dependencies:
-      q: 1.5.1
-
-  conventional-changelog-codemirror@2.0.8:
-    dependencies:
-      q: 1.5.1
-
-  conventional-changelog-config-spec@2.1.0: {}
-
-  conventional-changelog-conventionalcommits@4.6.3:
-    dependencies:
-      compare-func: 2.0.0
-      lodash: 4.17.21
-      q: 1.5.1
-
-  conventional-changelog-core@4.2.4:
-    dependencies:
-      add-stream: 1.0.0
-      conventional-changelog-writer: 5.0.1
-      conventional-commits-parser: 3.2.4
-      dateformat: 3.0.3
-      get-pkg-repo: 4.2.1
-      git-raw-commits: 2.0.11
-      git-remote-origin-url: 2.0.0
-      git-semver-tags: 4.1.1
-      lodash: 4.17.21
-      normalize-package-data: 3.0.3
-      q: 1.5.1
-      read-pkg: 3.0.0
-      read-pkg-up: 3.0.0
-      through2: 4.0.2
-
-  conventional-changelog-ember@2.0.9:
-    dependencies:
-      q: 1.5.1
-
-  conventional-changelog-eslint@3.0.9:
-    dependencies:
-      q: 1.5.1
-
-  conventional-changelog-express@2.0.6:
-    dependencies:
-      q: 1.5.1
-
-  conventional-changelog-jquery@3.0.11:
-    dependencies:
-      q: 1.5.1
-
-  conventional-changelog-jshint@2.0.9:
-    dependencies:
-      compare-func: 2.0.0
-      q: 1.5.1
-
-  conventional-changelog-preset-loader@2.3.4: {}
-
-  conventional-changelog-writer@5.0.1:
-    dependencies:
-      conventional-commits-filter: 2.0.7
-      dateformat: 3.0.3
-      handlebars: 4.7.7
-      json-stringify-safe: 5.0.1
-      lodash: 4.17.21
-      meow: 8.1.2
-      semver: 6.3.1
-      split: 1.0.1
-      through2: 4.0.2
-
-  conventional-changelog@3.1.25:
-    dependencies:
-      conventional-changelog-angular: 5.0.13
-      conventional-changelog-atom: 2.0.8
-      conventional-changelog-codemirror: 2.0.8
-      conventional-changelog-conventionalcommits: 4.6.3
-      conventional-changelog-core: 4.2.4
-      conventional-changelog-ember: 2.0.9
-      conventional-changelog-eslint: 3.0.9
-      conventional-changelog-express: 2.0.6
-      conventional-changelog-jquery: 3.0.11
-      conventional-changelog-jshint: 2.0.9
-      conventional-changelog-preset-loader: 2.3.4
-
-  conventional-commit-types@3.0.0: {}
-
-  conventional-commits-filter@2.0.7:
-    dependencies:
-      lodash.ismatch: 4.4.0
-      modify-values: 1.0.1
-
-  conventional-commits-parser@3.2.4:
-    dependencies:
-      JSONStream: 1.3.5
-      is-text-path: 1.0.1
-      lodash: 4.17.21
-      meow: 8.1.2
-      split2: 3.2.2
-      through2: 4.0.2
-
-  conventional-recommended-bump@6.1.0:
-    dependencies:
-      concat-stream: 2.0.0
-      conventional-changelog-preset-loader: 2.3.4
-      conventional-commits-filter: 2.0.7
-      conventional-commits-parser: 3.2.4
-      git-raw-commits: 2.0.11
-      git-semver-tags: 4.1.1
-      meow: 8.1.2
-      q: 1.5.1
-
-  convert-source-map@1.9.0: {}
-
-  cookie-signature@1.0.6: {}
-
-  cookie@0.5.0: {}
-
-  copy-text-to-clipboard@3.1.0: {}
-
-  copy-to-clipboard@3.3.3:
-    dependencies:
-      toggle-selection: 1.0.6
-
-  copy-to@2.0.1: {}
-
-  copy-webpack-plugin@8.1.1(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)):
-    dependencies:
-      fast-glob: 3.2.12
-      glob-parent: 5.1.2
-      globby: 11.1.0
-      normalize-path: 3.0.0
-      p-limit: 3.1.0
-      schema-utils: 3.1.1
-      serialize-javascript: 5.0.1
-      webpack: 5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)
-
-  core-js-compat@3.29.1:
-    dependencies:
-      browserslist: 4.21.5
-
-  core-js-pure@3.29.1: {}
-
-  core-js@2.6.12: {}
-
-  core-js@3.29.1: {}
-
-  core-util-is@1.0.2: {}
-
-  core-util-is@1.0.3: {}
-
-  cos-js-sdk-v5@1.8.6:
-    dependencies:
-      fast-xml-parser: 4.5.0
-
-  cos-nodejs-sdk-v5@2.13.1:
-    dependencies:
-      conf: 9.0.2
-      fast-xml-parser: 4.2.5
-      mime-types: 2.1.35
-      request: 2.88.2
-
-  cosmiconfig-typescript-loader@2.0.2(@swc/core@1.3.84)(@types/node@18.15.3)(cosmiconfig@7.1.0)(typescript@4.9.5):
-    dependencies:
-      '@types/node': 18.15.3
-      cosmiconfig: 7.1.0
-      ts-node: 10.9.1(@swc/core@1.3.84)(@types/node@18.15.3)(typescript@4.9.5)
-      typescript: 4.9.5
-    transitivePeerDependencies:
-      - '@swc/core'
-      - '@swc/wasm'
-
-  cosmiconfig-typescript-loader@4.3.0(@types/node@18.15.3)(cosmiconfig@8.1.3)(ts-node@10.9.1(@swc/core@1.3.84)(@types/node@18.15.3)(typescript@4.9.5))(typescript@4.9.5):
-    dependencies:
-      '@types/node': 18.15.3
-      cosmiconfig: 8.1.3
-      ts-node: 10.9.1(@swc/core@1.3.84)(@types/node@18.15.3)(typescript@4.9.5)
-      typescript: 4.9.5
-    optional: true
-
-  cosmiconfig@7.1.0:
-    dependencies:
-      '@types/parse-json': 4.0.0
-      import-fresh: 3.3.0
-      parse-json: 5.2.0
-      path-type: 4.0.0
-      yaml: 1.10.2
-
-  cosmiconfig@8.1.3:
-    dependencies:
-      import-fresh: 3.3.0
-      js-yaml: 4.1.0
-      parse-json: 5.2.0
-      path-type: 4.0.0
-    optional: true
-
-  cpu-features@0.0.9:
-    dependencies:
-      buildcheck: 0.0.6
-      nan: 2.18.0
-    optional: true
-
-  crc32@0.2.2: {}
-
-  create-require@1.1.1: {}
-
-  crelt@1.0.6: {}
-
-  cross-env@7.0.3:
-    dependencies:
-      cross-spawn: 7.0.3
-
-  cross-spawn@7.0.3:
-    dependencies:
-      path-key: 3.1.1
-      shebang-command: 2.0.0
-      which: 2.0.2
-
-  crypto-js@4.2.0: {}
-
-  css-blank-pseudo@3.0.3(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-selector-parser: 6.0.11
-
-  css-declaration-sorter@6.3.1(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-
-  css-has-pseudo@3.0.4(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-selector-parser: 6.0.11
-
-  css-loader@6.7.3(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)):
-    dependencies:
-      icss-utils: 5.1.0(postcss@8.4.21)
-      postcss: 8.4.21
-      postcss-modules-extract-imports: 3.0.0(postcss@8.4.21)
-      postcss-modules-local-by-default: 4.0.0(postcss@8.4.21)
-      postcss-modules-scope: 3.0.0(postcss@8.4.21)
-      postcss-modules-values: 4.0.0(postcss@8.4.21)
-      postcss-value-parser: 4.2.0
-      semver: 7.3.8
-      webpack: 5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)
-
-  css-minimizer-webpack-plugin@3.4.1(esbuild@0.15.18)(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)):
-    dependencies:
-      cssnano: 5.1.15(postcss@8.4.21)
-      jest-worker: 27.5.1
-      postcss: 8.4.21
-      schema-utils: 4.0.0
-      serialize-javascript: 6.0.1
-      source-map: 0.6.1
-      webpack: 5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)
-    optionalDependencies:
-      esbuild: 0.15.18
-
-  css-prefers-color-scheme@6.0.3(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-
-  css-render@0.15.14:
-    dependencies:
-      '@emotion/hash': 0.8.0
-      csstype: 3.0.11
-
-  css-select@4.3.0:
-    dependencies:
-      boolbase: 1.0.0
-      css-what: 6.1.0
-      domhandler: 4.3.1
-      domutils: 2.8.0
-      nth-check: 2.1.1
-
-  css-tree@1.1.3:
-    dependencies:
-      mdn-data: 2.0.14
-      source-map: 0.6.1
-
-  css-what@6.1.0: {}
-
-  cssdb@7.4.1: {}
-
-  cssesc@3.0.0: {}
-
-  cssfilter@0.0.10: {}
-
-  cssnano-preset-default@5.2.14(postcss@8.4.21):
-    dependencies:
-      css-declaration-sorter: 6.3.1(postcss@8.4.21)
-      cssnano-utils: 3.1.0(postcss@8.4.21)
-      postcss: 8.4.21
-      postcss-calc: 8.2.4(postcss@8.4.21)
-      postcss-colormin: 5.3.1(postcss@8.4.21)
-      postcss-convert-values: 5.1.3(postcss@8.4.21)
-      postcss-discard-comments: 5.1.2(postcss@8.4.21)
-      postcss-discard-duplicates: 5.1.0(postcss@8.4.21)
-      postcss-discard-empty: 5.1.1(postcss@8.4.21)
-      postcss-discard-overridden: 5.1.0(postcss@8.4.21)
-      postcss-merge-longhand: 5.1.7(postcss@8.4.21)
-      postcss-merge-rules: 5.1.4(postcss@8.4.21)
-      postcss-minify-font-values: 5.1.0(postcss@8.4.21)
-      postcss-minify-gradients: 5.1.1(postcss@8.4.21)
-      postcss-minify-params: 5.1.4(postcss@8.4.21)
-      postcss-minify-selectors: 5.2.1(postcss@8.4.21)
-      postcss-normalize-charset: 5.1.0(postcss@8.4.21)
-      postcss-normalize-display-values: 5.1.0(postcss@8.4.21)
-      postcss-normalize-positions: 5.1.1(postcss@8.4.21)
-      postcss-normalize-repeat-style: 5.1.1(postcss@8.4.21)
-      postcss-normalize-string: 5.1.0(postcss@8.4.21)
-      postcss-normalize-timing-functions: 5.1.0(postcss@8.4.21)
-      postcss-normalize-unicode: 5.1.1(postcss@8.4.21)
-      postcss-normalize-url: 5.1.0(postcss@8.4.21)
-      postcss-normalize-whitespace: 5.1.1(postcss@8.4.21)
-      postcss-ordered-values: 5.1.3(postcss@8.4.21)
-      postcss-reduce-initial: 5.1.2(postcss@8.4.21)
-      postcss-reduce-transforms: 5.1.0(postcss@8.4.21)
-      postcss-svgo: 5.1.0(postcss@8.4.21)
-      postcss-unique-selectors: 5.1.1(postcss@8.4.21)
-
-  cssnano-utils@3.1.0(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-
-  cssnano@5.1.15(postcss@8.4.21):
-    dependencies:
-      cssnano-preset-default: 5.2.14(postcss@8.4.21)
-      lilconfig: 2.1.0
-      postcss: 8.4.21
-      yaml: 1.10.2
-
-  csso@4.2.0:
-    dependencies:
-      css-tree: 1.1.3
-
-  cssom@0.3.8:
-    optional: true
-
-  cssom@0.5.0:
-    optional: true
-
-  cssstyle@2.3.0:
-    dependencies:
-      cssom: 0.3.8
-    optional: true
-
-  csstype@3.0.11: {}
-
-  csstype@3.1.3: {}
-
-  cz-conventional-changelog@3.3.0(@swc/core@1.3.84):
-    dependencies:
-      chalk: 2.4.2
-      commitizen: 4.3.0(@swc/core@1.3.84)
-      conventional-commit-types: 3.0.0
-      lodash.map: 4.6.0
-      longest: 2.0.1
-      word-wrap: 1.2.3
-    optionalDependencies:
-      '@commitlint/load': 17.4.4(@swc/core@1.3.84)
-    transitivePeerDependencies:
-      - '@swc/core'
-      - '@swc/wasm'
-
-  cz-customizable@7.0.0:
-    dependencies:
-      editor: 1.0.0
-      find-config: 1.0.0
-      inquirer: 6.5.2
-      lodash: 4.17.21
-      temp: 0.9.4
-      word-wrap: 1.2.3
-
-  dargs@7.0.0: {}
-
-  dashdash@1.14.1:
-    dependencies:
-      assert-plus: 1.0.0
-
-  data-urls@3.0.2:
-    dependencies:
-      abab: 2.0.6
-      whatwg-mimetype: 3.0.0
-      whatwg-url: 11.0.0
-    optional: true
-
-  date-fns-tz@3.2.0(date-fns@3.6.0):
-    dependencies:
-      date-fns: 3.6.0
-
-  date-fns@3.6.0: {}
-
-  date-format@4.0.14: {}
-
-  dateformat@2.2.0: {}
-
-  dateformat@3.0.3: {}
-
-  debounce-fn@4.0.0:
-    dependencies:
-      mimic-fn: 3.1.0
-
-  debug@2.6.9:
-    dependencies:
-      ms: 2.0.0
-
-  debug@3.2.7:
-    dependencies:
-      ms: 2.1.3
-
-  debug@4.3.4(supports-color@9.3.1):
-    dependencies:
-      ms: 2.1.2
-    optionalDependencies:
-      supports-color: 9.3.1
-
-  decamelize-keys@1.1.1:
-    dependencies:
-      decamelize: 1.2.0
-      map-obj: 1.0.1
-
-  decamelize@1.2.0: {}
-
-  decimal.js@10.4.3:
-    optional: true
-
-  decompress-response@4.2.1:
-    dependencies:
-      mimic-response: 2.1.0
-    optional: true
-
-  dedent@0.7.0: {}
-
-  deep-is@0.1.4: {}
-
-  deepmerge@4.3.1: {}
-
-  default-browser-id@3.0.0:
-    dependencies:
-      bplist-parser: 0.2.0
-      untildify: 4.0.0
-
-  default-browser@4.0.0:
-    dependencies:
-      bundle-name: 3.0.0
-      default-browser-id: 3.0.0
-      execa: 7.2.0
-      titleize: 3.0.0
-
-  default-gateway@6.0.3:
-    dependencies:
-      execa: 5.1.1
-
-  default-user-agent@1.0.0:
-    dependencies:
-      os-name: 1.0.3
-
-  defaults@1.0.4:
-    dependencies:
-      clone: 1.0.4
-
-  define-lazy-prop@2.0.0: {}
-
-  define-lazy-prop@3.0.0: {}
-
-  define-properties@1.2.0:
-    dependencies:
-      has-property-descriptors: 1.0.0
-      object-keys: 1.1.1
-
-  delayed-stream@1.0.0: {}
-
-  delegates@1.0.0:
-    optional: true
-
-  depd@1.1.2: {}
-
-  depd@2.0.0: {}
-
-  destroy@1.2.0: {}
-
-  detect-file@1.0.0: {}
-
-  detect-indent@6.1.0: {}
-
-  detect-libc@2.0.2:
-    optional: true
-
-  detect-newline@3.1.0: {}
-
-  detect-node@2.1.0: {}
-
-  diff@4.0.2: {}
-
-  digest-header@1.1.0: {}
-
-  dijkstrajs@1.0.3: {}
-
-  dir-glob@2.2.2:
-    dependencies:
-      path-type: 3.0.0
-
-  dir-glob@3.0.1:
-    dependencies:
-      path-type: 4.0.0
-
-  dns-equal@1.0.0: {}
-
-  dns-packet@5.4.0:
-    dependencies:
-      '@leichtgewicht/ip-codec': 2.0.4
-
-  doctrine@2.1.0:
-    dependencies:
-      esutils: 2.0.3
-
-  doctrine@3.0.0:
-    dependencies:
-      esutils: 2.0.3
-
-  dom-converter@0.2.0:
-    dependencies:
-      utila: 0.4.0
-
-  dom-serializer@1.4.1:
-    dependencies:
-      domelementtype: 2.3.0
-      domhandler: 4.3.1
-      entities: 2.2.0
-
-  dom-walk@0.1.2: {}
-
-  domelementtype@2.3.0: {}
-
-  domexception@4.0.0:
-    dependencies:
-      webidl-conversions: 7.0.0
-    optional: true
-
-  domhandler@4.3.1:
-    dependencies:
-      domelementtype: 2.3.0
-
-  domutils@2.8.0:
-    dependencies:
-      dom-serializer: 1.4.1
-      domelementtype: 2.3.0
-      domhandler: 4.3.1
-
-  dot-case@3.0.4:
-    dependencies:
-      no-case: 3.0.4
-      tslib: 2.6.1
-
-  dot-prop@5.3.0:
-    dependencies:
-      is-obj: 2.0.0
-
-  dot-prop@6.0.1:
-    dependencies:
-      is-obj: 2.0.0
-
-  dotgitignore@2.1.0:
-    dependencies:
-      find-up: 3.0.0
-      minimatch: 3.1.2
-
-  duplexer@0.1.2: {}
-
-  eastasianwidth@0.2.0: {}
-
-  ecc-jsbn@0.1.2:
-    dependencies:
-      jsbn: 0.1.1
-      safer-buffer: 2.1.2
-
-  editor@1.0.0: {}
-
-  ee-first@1.1.1: {}
-
-  electron-to-chromium@1.4.333: {}
-
-  emoji-regex@8.0.0: {}
-
-  emoji-regex@9.2.2: {}
-
-  emojis-list@3.0.0: {}
-
-  encode-utf8@1.0.3: {}
-
-  encodeurl@1.0.2: {}
-
-  end-of-stream@1.4.4:
-    dependencies:
-      once: 1.4.0
-
-  end-or-error@1.0.1: {}
-
-  engine.io-client@6.6.1:
-    dependencies:
-      '@socket.io/component-emitter': 3.1.0
-      debug: 4.3.4(supports-color@9.3.1)
-      engine.io-parser: 5.2.1
-      ws: 8.17.1
-      xmlhttprequest-ssl: 2.1.1
-    transitivePeerDependencies:
-      - bufferutil
-      - supports-color
-      - utf-8-validate
-
-  engine.io-parser@5.2.1: {}
-
-  enhanced-resolve@5.12.0:
-    dependencies:
-      graceful-fs: 4.2.11
-      tapable: 2.2.1
-
-  entities@2.2.0: {}
-
-  entities@4.5.0: {}
-
-  env-paths@2.2.1: {}
-
-  envinfo@7.8.1: {}
-
-  error-ex@1.3.2:
-    dependencies:
-      is-arrayish: 0.2.1
-
-  error-stack-parser@2.1.4:
-    dependencies:
-      stackframe: 1.3.4
-
-  es-abstract@1.21.2:
-    dependencies:
-      array-buffer-byte-length: 1.0.0
-      available-typed-arrays: 1.0.5
-      call-bind: 1.0.2
-      es-set-tostringtag: 2.0.1
-      es-to-primitive: 1.2.1
-      function.prototype.name: 1.1.5
-      get-intrinsic: 1.2.1
-      get-symbol-description: 1.0.0
-      globalthis: 1.0.3
-      gopd: 1.0.1
-      has: 1.0.3
-      has-property-descriptors: 1.0.0
-      has-proto: 1.0.1
-      has-symbols: 1.0.3
-      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.10
-      is-weakref: 1.0.2
-      object-inspect: 1.12.3
-      object-keys: 1.1.1
-      object.assign: 4.1.4
-      regexp.prototype.flags: 1.4.3
-      safe-regex-test: 1.0.0
-      string.prototype.trim: 1.2.7
-      string.prototype.trimend: 1.0.6
-      string.prototype.trimstart: 1.0.6
-      typed-array-length: 1.0.4
-      unbox-primitive: 1.0.2
-      which-typed-array: 1.1.9
-
-  es-module-lexer@0.9.3: {}
-
-  es-set-tostringtag@2.0.1:
-    dependencies:
-      get-intrinsic: 1.2.1
-      has: 1.0.3
-      has-tostringtag: 1.0.0
-
-  es-shim-unscopables@1.0.0:
-    dependencies:
-      has: 1.0.3
-
-  es-to-primitive@1.2.1:
-    dependencies:
-      is-callable: 1.2.7
-      is-date-object: 1.0.5
-      is-symbol: 1.0.4
-
-  es6-promise@4.2.8: {}
-
-  esbuild-android-64@0.15.18:
-    optional: true
-
-  esbuild-android-arm64@0.15.18:
-    optional: true
-
-  esbuild-darwin-64@0.15.18:
-    optional: true
-
-  esbuild-darwin-arm64@0.15.18:
-    optional: true
-
-  esbuild-freebsd-64@0.15.18:
-    optional: true
-
-  esbuild-freebsd-arm64@0.15.18:
-    optional: true
-
-  esbuild-linux-32@0.15.18:
-    optional: true
-
-  esbuild-linux-64@0.15.18:
-    optional: true
-
-  esbuild-linux-arm64@0.15.18:
-    optional: true
-
-  esbuild-linux-arm@0.15.18:
-    optional: true
-
-  esbuild-linux-mips64le@0.15.18:
-    optional: true
-
-  esbuild-linux-ppc64le@0.15.18:
-    optional: true
-
-  esbuild-linux-riscv64@0.15.18:
-    optional: true
-
-  esbuild-linux-s390x@0.15.18:
-    optional: true
-
-  esbuild-loader@4.0.2(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)):
-    dependencies:
-      esbuild: 0.19.3
-      get-tsconfig: 4.7.0
-      loader-utils: 2.0.4
-      webpack: 5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)
-      webpack-sources: 1.4.3
-
-  esbuild-netbsd-64@0.15.18:
-    optional: true
-
-  esbuild-openbsd-64@0.15.18:
-    optional: true
-
-  esbuild-sunos-64@0.15.18:
-    optional: true
-
-  esbuild-windows-32@0.15.18:
-    optional: true
-
-  esbuild-windows-64@0.15.18:
-    optional: true
-
-  esbuild-windows-arm64@0.15.18:
-    optional: true
-
-  esbuild@0.15.18:
-    optionalDependencies:
-      '@esbuild/android-arm': 0.15.18
-      '@esbuild/linux-loong64': 0.15.18
-      esbuild-android-64: 0.15.18
-      esbuild-android-arm64: 0.15.18
-      esbuild-darwin-64: 0.15.18
-      esbuild-darwin-arm64: 0.15.18
-      esbuild-freebsd-64: 0.15.18
-      esbuild-freebsd-arm64: 0.15.18
-      esbuild-linux-32: 0.15.18
-      esbuild-linux-64: 0.15.18
-      esbuild-linux-arm: 0.15.18
-      esbuild-linux-arm64: 0.15.18
-      esbuild-linux-mips64le: 0.15.18
-      esbuild-linux-ppc64le: 0.15.18
-      esbuild-linux-riscv64: 0.15.18
-      esbuild-linux-s390x: 0.15.18
-      esbuild-netbsd-64: 0.15.18
-      esbuild-openbsd-64: 0.15.18
-      esbuild-sunos-64: 0.15.18
-      esbuild-windows-32: 0.15.18
-      esbuild-windows-64: 0.15.18
-      esbuild-windows-arm64: 0.15.18
-
-  esbuild@0.17.12:
-    optionalDependencies:
-      '@esbuild/android-arm': 0.17.12
-      '@esbuild/android-arm64': 0.17.12
-      '@esbuild/android-x64': 0.17.12
-      '@esbuild/darwin-arm64': 0.17.12
-      '@esbuild/darwin-x64': 0.17.12
-      '@esbuild/freebsd-arm64': 0.17.12
-      '@esbuild/freebsd-x64': 0.17.12
-      '@esbuild/linux-arm': 0.17.12
-      '@esbuild/linux-arm64': 0.17.12
-      '@esbuild/linux-ia32': 0.17.12
-      '@esbuild/linux-loong64': 0.17.12
-      '@esbuild/linux-mips64el': 0.17.12
-      '@esbuild/linux-ppc64': 0.17.12
-      '@esbuild/linux-riscv64': 0.17.12
-      '@esbuild/linux-s390x': 0.17.12
-      '@esbuild/linux-x64': 0.17.12
-      '@esbuild/netbsd-x64': 0.17.12
-      '@esbuild/openbsd-x64': 0.17.12
-      '@esbuild/sunos-x64': 0.17.12
-      '@esbuild/win32-arm64': 0.17.12
-      '@esbuild/win32-ia32': 0.17.12
-      '@esbuild/win32-x64': 0.17.12
-
-  esbuild@0.19.3:
-    optionalDependencies:
-      '@esbuild/android-arm': 0.19.3
-      '@esbuild/android-arm64': 0.19.3
-      '@esbuild/android-x64': 0.19.3
-      '@esbuild/darwin-arm64': 0.19.3
-      '@esbuild/darwin-x64': 0.19.3
-      '@esbuild/freebsd-arm64': 0.19.3
-      '@esbuild/freebsd-x64': 0.19.3
-      '@esbuild/linux-arm': 0.19.3
-      '@esbuild/linux-arm64': 0.19.3
-      '@esbuild/linux-ia32': 0.19.3
-      '@esbuild/linux-loong64': 0.19.3
-      '@esbuild/linux-mips64el': 0.19.3
-      '@esbuild/linux-ppc64': 0.19.3
-      '@esbuild/linux-riscv64': 0.19.3
-      '@esbuild/linux-s390x': 0.19.3
-      '@esbuild/linux-x64': 0.19.3
-      '@esbuild/netbsd-x64': 0.19.3
-      '@esbuild/openbsd-x64': 0.19.3
-      '@esbuild/sunos-x64': 0.19.3
-      '@esbuild/win32-arm64': 0.19.3
-      '@esbuild/win32-ia32': 0.19.3
-      '@esbuild/win32-x64': 0.19.3
-
-  escalade@3.1.1: {}
-
-  escape-html@1.0.3: {}
-
-  escape-string-regexp@1.0.5: {}
-
-  escape-string-regexp@4.0.0: {}
-
-  escape-string-regexp@5.0.0: {}
-
-  escodegen@2.1.0:
-    dependencies:
-      esprima: 4.0.1
-      estraverse: 5.3.0
-      esutils: 2.0.3
-    optionalDependencies:
-      source-map: 0.6.1
-    optional: true
-
-  esdk-obs-nodejs@3.23.11:
-    dependencies:
-      fast-xml-parser: 4.5.0
-      log4js: 6.9.1
-    transitivePeerDependencies:
-      - supports-color
-
-  eslint-config-prettier@8.10.0(eslint@8.36.0):
-    dependencies:
-      eslint: 8.36.0
-
-  eslint-import-resolver-node@0.3.7:
-    dependencies:
-      debug: 3.2.7
-      is-core-module: 2.13.0
-      resolve: 1.22.4
-    transitivePeerDependencies:
-      - supports-color
-
-  eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.62.0(eslint@8.36.0)(typescript@5.1.6))(eslint-plugin-import@2.28.0)(eslint@8.36.0):
-    dependencies:
-      debug: 4.3.4(supports-color@9.3.1)
-      enhanced-resolve: 5.12.0
-      eslint: 8.36.0
-      eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0(eslint@8.36.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.62.0(eslint@8.36.0)(typescript@5.1.6))(eslint-plugin-import@2.28.0)(eslint@8.36.0))(eslint@8.36.0)
-      eslint-plugin-import: 2.28.0(@typescript-eslint/parser@5.62.0(eslint@8.36.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.5.5)(eslint@8.36.0)
-      get-tsconfig: 4.6.2
-      globby: 13.2.2
-      is-core-module: 2.13.0
-      is-glob: 4.0.3
-      synckit: 0.8.5
-    transitivePeerDependencies:
-      - '@typescript-eslint/parser'
-      - eslint-import-resolver-node
-      - eslint-import-resolver-webpack
-      - supports-color
-
-  eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0(eslint@8.36.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.62.0(eslint@8.36.0)(typescript@5.1.6))(eslint-plugin-import@2.28.0)(eslint@8.36.0))(eslint@8.36.0):
-    dependencies:
-      debug: 3.2.7
-    optionalDependencies:
-      '@typescript-eslint/parser': 5.62.0(eslint@8.36.0)(typescript@5.1.6)
-      eslint: 8.36.0
-      eslint-import-resolver-node: 0.3.7
-      eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.62.0(eslint@8.36.0)(typescript@5.1.6))(eslint-plugin-import@2.28.0)(eslint@8.36.0)
-    transitivePeerDependencies:
-      - supports-color
-
-  eslint-plugin-import@2.28.0(@typescript-eslint/parser@5.62.0(eslint@8.36.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.5.5)(eslint@8.36.0):
-    dependencies:
-      array-includes: 3.1.6
-      array.prototype.findlastindex: 1.2.2
-      array.prototype.flat: 1.3.1
-      array.prototype.flatmap: 1.3.1
-      debug: 3.2.7
-      doctrine: 2.1.0
-      eslint: 8.36.0
-      eslint-import-resolver-node: 0.3.7
-      eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0(eslint@8.36.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.62.0(eslint@8.36.0)(typescript@5.1.6))(eslint-plugin-import@2.28.0)(eslint@8.36.0))(eslint@8.36.0)
-      has: 1.0.3
-      is-core-module: 2.13.0
-      is-glob: 4.0.3
-      minimatch: 3.1.2
-      object.fromentries: 2.0.6
-      object.groupby: 1.0.0
-      object.values: 1.1.6
-      resolve: 1.22.4
-      semver: 6.3.1
-      tsconfig-paths: 3.14.2
-    optionalDependencies:
-      '@typescript-eslint/parser': 5.62.0(eslint@8.36.0)(typescript@5.1.6)
-    transitivePeerDependencies:
-      - eslint-import-resolver-typescript
-      - eslint-import-resolver-webpack
-      - supports-color
-
-  eslint-plugin-prettier@5.0.0(@types/eslint@8.21.2)(eslint-config-prettier@8.10.0(eslint@8.36.0))(eslint@8.36.0)(prettier@3.0.1):
-    dependencies:
-      eslint: 8.36.0
-      prettier: 3.0.1
-      prettier-linter-helpers: 1.0.0
-      synckit: 0.8.5
-    optionalDependencies:
-      '@types/eslint': 8.21.2
-      eslint-config-prettier: 8.10.0(eslint@8.36.0)
-
-  eslint-plugin-vue@9.16.1(eslint@8.36.0):
-    dependencies:
-      '@eslint-community/eslint-utils': 4.4.0(eslint@8.36.0)
-      eslint: 8.36.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.3.1(eslint@8.36.0)
-      xml-name-validator: 4.0.0
-    transitivePeerDependencies:
-      - supports-color
-
-  eslint-scope@5.1.1:
-    dependencies:
-      esrecurse: 4.3.0
-      estraverse: 4.3.0
-
-  eslint-scope@7.1.1:
-    dependencies:
-      esrecurse: 4.3.0
-      estraverse: 5.3.0
-
-  eslint-visitor-keys@3.3.0: {}
-
-  eslint-webpack-plugin@3.2.0(eslint@8.36.0)(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)):
-    dependencies:
-      '@types/eslint': 8.21.2
-      eslint: 8.36.0
-      jest-worker: 28.1.3
-      micromatch: 4.0.5
-      normalize-path: 3.0.0
-      schema-utils: 4.0.0
-      webpack: 5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)
-
-  eslint@8.36.0:
-    dependencies:
-      '@eslint-community/eslint-utils': 4.3.0(eslint@8.36.0)
-      '@eslint-community/regexpp': 4.4.0
-      '@eslint/eslintrc': 2.0.1
-      '@eslint/js': 8.36.0
-      '@humanwhocodes/config-array': 0.11.8
-      '@humanwhocodes/module-importer': 1.0.1
-      '@nodelib/fs.walk': 1.2.8
-      ajv: 6.12.6
-      chalk: 4.1.2
-      cross-spawn: 7.0.3
-      debug: 4.3.4(supports-color@9.3.1)
-      doctrine: 3.0.0
-      escape-string-regexp: 4.0.0
-      eslint-scope: 7.1.1
-      eslint-visitor-keys: 3.3.0
-      espree: 9.5.0
-      esquery: 1.5.0
-      esutils: 2.0.3
-      fast-deep-equal: 3.1.3
-      file-entry-cache: 6.0.1
-      find-up: 5.0.0
-      glob-parent: 6.0.2
-      globals: 13.20.0
-      grapheme-splitter: 1.0.4
-      ignore: 5.2.4
-      import-fresh: 3.3.0
-      imurmurhash: 0.1.4
-      is-glob: 4.0.3
-      is-path-inside: 3.0.3
-      js-sdsl: 4.3.0
-      js-yaml: 4.1.0
-      json-stable-stringify-without-jsonify: 1.0.1
-      levn: 0.4.1
-      lodash.merge: 4.6.2
-      minimatch: 3.1.2
-      natural-compare: 1.4.0
-      optionator: 0.9.1
-      strip-ansi: 6.0.1
-      strip-json-comments: 3.1.1
-      text-table: 0.2.0
-    transitivePeerDependencies:
-      - supports-color
-
-  espree@9.5.0:
-    dependencies:
-      acorn: 8.8.2
-      acorn-jsx: 5.3.2(acorn@8.8.2)
-      eslint-visitor-keys: 3.3.0
-
-  esprima@4.0.1:
-    optional: true
-
-  esquery@1.5.0:
-    dependencies:
-      estraverse: 5.3.0
-
-  esrecurse@4.3.0:
-    dependencies:
-      estraverse: 5.3.0
-
-  estraverse@4.3.0: {}
-
-  estraverse@5.3.0: {}
-
-  estree-walker@1.0.1: {}
-
-  estree-walker@2.0.2: {}
-
-  esutils@2.0.3: {}
-
-  etag@1.8.1: {}
-
-  eventemitter3@4.0.7: {}
-
-  events@3.3.0: {}
-
-  evtd@0.2.4: {}
-
-  execa@2.1.0:
-    dependencies:
-      cross-spawn: 7.0.3
-      get-stream: 5.2.0
-      is-stream: 2.0.1
-      merge-stream: 2.0.0
-      npm-run-path: 3.1.0
-      onetime: 5.1.2
-      p-finally: 2.0.1
-      signal-exit: 3.0.7
-      strip-final-newline: 2.0.0
-
-  execa@5.1.1:
-    dependencies:
-      cross-spawn: 7.0.3
-      get-stream: 6.0.1
-      human-signals: 2.1.0
-      is-stream: 2.0.1
-      merge-stream: 2.0.0
-      npm-run-path: 4.0.1
-      onetime: 5.1.2
-      signal-exit: 3.0.7
-      strip-final-newline: 2.0.0
-
-  execa@7.2.0:
-    dependencies:
-      cross-spawn: 7.0.3
-      get-stream: 6.0.1
-      human-signals: 4.3.1
-      is-stream: 3.0.0
-      merge-stream: 2.0.0
-      npm-run-path: 5.1.0
-      onetime: 6.0.0
-      signal-exit: 3.0.7
-      strip-final-newline: 3.0.0
-
-  expand-tilde@2.0.2:
-    dependencies:
-      homedir-polyfill: 1.0.3
-
-  express@4.18.2:
-    dependencies:
-      accepts: 1.3.8
-      array-flatten: 1.1.1
-      body-parser: 1.20.1
-      content-disposition: 0.5.4
-      content-type: 1.0.5
-      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
-    transitivePeerDependencies:
-      - supports-color
-
-  extend-shallow@2.0.1:
-    dependencies:
-      is-extendable: 0.1.1
-
-  extend@3.0.2: {}
-
-  external-editor@3.1.0:
-    dependencies:
-      chardet: 0.7.0
-      iconv-lite: 0.4.24
-      tmp: 0.0.33
-
-  extsprintf@1.3.0: {}
-
-  fabric@5.3.0:
-    optionalDependencies:
-      canvas: 2.11.2
-      jsdom: 19.0.0(canvas@2.11.2)
-    transitivePeerDependencies:
-      - bufferutil
-      - encoding
-      - supports-color
-      - utf-8-validate
-
-  fast-deep-equal@3.1.3: {}
-
-  fast-diff@1.2.0: {}
-
-  fast-glob@3.2.12:
-    dependencies:
-      '@nodelib/fs.stat': 2.0.5
-      '@nodelib/fs.walk': 1.2.8
-      glob-parent: 5.1.2
-      merge2: 1.4.1
-      micromatch: 4.0.5
-
-  fast-glob@3.3.1:
-    dependencies:
-      '@nodelib/fs.stat': 2.0.5
-      '@nodelib/fs.walk': 1.2.8
-      glob-parent: 5.1.2
-      merge2: 1.4.1
-      micromatch: 4.0.5
-
-  fast-json-stable-stringify@2.1.0: {}
-
-  fast-levenshtein@2.0.6: {}
-
-  fast-xml-parser@4.2.5:
-    dependencies:
-      strnum: 1.0.5
-
-  fast-xml-parser@4.5.0:
-    dependencies:
-      strnum: 1.0.5
-
-  fastest-levenshtein@1.0.16: {}
-
-  fastq@1.15.0:
-    dependencies:
-      reusify: 1.0.4
-
-  faye-websocket@0.11.4:
-    dependencies:
-      websocket-driver: 0.7.4
-
-  figures@2.0.0:
-    dependencies:
-      escape-string-regexp: 1.0.5
-
-  figures@3.2.0:
-    dependencies:
-      escape-string-regexp: 1.0.5
-
-  file-entry-cache@6.0.1:
-    dependencies:
-      flat-cache: 3.0.4
-
-  file-loader@6.2.0(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)):
-    dependencies:
-      loader-utils: 2.0.4
-      schema-utils: 3.1.1
-      webpack: 5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)
-
-  fill-range@7.0.1:
-    dependencies:
-      to-regex-range: 5.0.1
-
-  finalhandler@1.2.0:
-    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
-    transitivePeerDependencies:
-      - supports-color
-
-  find-cache-dir@3.3.2:
-    dependencies:
-      commondir: 1.0.1
-      make-dir: 3.1.0
-      pkg-dir: 4.2.0
-
-  find-config@1.0.0:
-    dependencies:
-      user-home: 2.0.0
-
-  find-node-modules@2.1.3:
-    dependencies:
-      findup-sync: 4.0.0
-      merge: 2.1.1
-
-  find-root@1.1.0: {}
-
-  find-up@2.1.0:
-    dependencies:
-      locate-path: 2.0.0
-
-  find-up@3.0.0:
-    dependencies:
-      locate-path: 3.0.0
-
-  find-up@4.1.0:
-    dependencies:
-      locate-path: 5.0.0
-      path-exists: 4.0.0
-
-  find-up@5.0.0:
-    dependencies:
-      locate-path: 6.0.0
-      path-exists: 4.0.0
-
-  findup-sync@4.0.0:
-    dependencies:
-      detect-file: 1.0.0
-      is-glob: 4.0.3
-      micromatch: 4.0.5
-      resolve-dir: 1.0.1
-
-  flat-cache@3.0.4:
-    dependencies:
-      flatted: 3.2.7
-      rimraf: 3.0.2
-
-  flatted@3.2.7: {}
-
-  flv.js@1.6.2:
-    dependencies:
-      es6-promise: 4.2.8
-      webworkify-webpack: 2.1.5
-
-  follow-redirects@1.15.2: {}
-
-  for-each@0.3.3:
-    dependencies:
-      is-callable: 1.2.7
-
-  forever-agent@0.6.1: {}
-
-  fork-ts-checker-webpack-plugin@7.3.0(typescript@5.1.6)(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)):
-    dependencies:
-      '@babel/code-frame': 7.18.6
-      chalk: 4.1.2
-      chokidar: 3.5.3
-      cosmiconfig: 7.1.0
-      deepmerge: 4.3.1
-      fs-extra: 10.1.0
-      memfs: 3.4.13
-      minimatch: 3.1.2
-      node-abort-controller: 3.1.1
-      schema-utils: 3.1.1
-      semver: 7.3.8
-      tapable: 2.2.1
-      typescript: 5.1.6
-      webpack: 5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)
-
-  form-data@2.3.3:
-    dependencies:
-      asynckit: 0.4.0
-      combined-stream: 1.0.8
-      mime-types: 2.1.35
-
-  form-data@4.0.0:
-    dependencies:
-      asynckit: 0.4.0
-      combined-stream: 1.0.8
-      mime-types: 2.1.35
-
-  formstream@1.3.1:
-    dependencies:
-      destroy: 1.2.0
-      mime: 2.6.0
-      pause-stream: 0.0.11
-
-  forwarded@0.2.0: {}
-
-  fraction.js@4.2.0: {}
-
-  fresh@0.5.2: {}
-
-  fs-extra@10.1.0:
-    dependencies:
-      graceful-fs: 4.2.11
-      jsonfile: 6.1.0
-      universalify: 2.0.0
-
-  fs-extra@8.1.0:
-    dependencies:
-      graceful-fs: 4.2.11
-      jsonfile: 4.0.0
-      universalify: 0.1.2
-
-  fs-extra@9.1.0:
-    dependencies:
-      at-least-node: 1.0.0
-      graceful-fs: 4.2.11
-      jsonfile: 6.1.0
-      universalify: 2.0.0
-
-  fs-minipass@2.1.0:
-    dependencies:
-      minipass: 3.3.6
-    optional: true
-
-  fs-monkey@1.0.3: {}
-
-  fs.realpath@1.0.0: {}
-
-  fsevents@2.3.2:
-    optional: true
-
-  function-bind@1.1.1: {}
-
-  function.prototype.name@1.1.5:
-    dependencies:
-      call-bind: 1.0.2
-      define-properties: 1.2.0
-      es-abstract: 1.21.2
-      functions-have-names: 1.2.3
-
-  functions-have-names@1.2.3: {}
-
-  gauge@3.0.2:
-    dependencies:
-      aproba: 2.0.0
-      color-support: 1.1.3
-      console-control-strings: 1.1.0
-      has-unicode: 2.0.1
-      object-assign: 4.1.1
-      signal-exit: 3.0.7
-      string-width: 4.2.3
-      strip-ansi: 6.0.1
-      wide-align: 1.1.5
-    optional: true
-
-  gensync@1.0.0-beta.2: {}
-
-  get-caller-file@2.0.5: {}
-
-  get-intrinsic@1.2.0:
-    dependencies:
-      function-bind: 1.1.1
-      has: 1.0.3
-      has-symbols: 1.0.3
-
-  get-intrinsic@1.2.1:
-    dependencies:
-      function-bind: 1.1.1
-      has: 1.0.3
-      has-proto: 1.0.1
-      has-symbols: 1.0.3
-
-  get-pkg-repo@4.2.1:
-    dependencies:
-      '@hutson/parse-repository-url': 3.0.2
-      hosted-git-info: 4.1.0
-      through2: 2.0.5
-      yargs: 16.2.0
-
-  get-port@6.1.2: {}
-
-  get-ready@1.0.0: {}
-
-  get-stream@5.2.0:
-    dependencies:
-      pump: 3.0.0
-
-  get-stream@6.0.1: {}
-
-  get-symbol-description@1.0.0:
-    dependencies:
-      call-bind: 1.0.2
-      get-intrinsic: 1.2.1
-
-  get-tsconfig@4.6.2:
-    dependencies:
-      resolve-pkg-maps: 1.0.0
-
-  get-tsconfig@4.7.0:
-    dependencies:
-      resolve-pkg-maps: 1.0.0
-
-  getpass@0.1.7:
-    dependencies:
-      assert-plus: 1.0.0
-
-  git-raw-commits@2.0.11:
-    dependencies:
-      dargs: 7.0.0
-      lodash: 4.17.21
-      meow: 8.1.2
-      split2: 3.2.2
-      through2: 4.0.2
-
-  git-remote-origin-url@2.0.0:
-    dependencies:
-      gitconfiglocal: 1.0.0
-      pify: 2.3.0
-
-  git-semver-tags@4.1.1:
-    dependencies:
-      meow: 8.1.2
-      semver: 6.3.1
-
-  gitconfiglocal@1.0.0:
-    dependencies:
-      ini: 1.3.8
-
-  glob-parent@5.1.2:
-    dependencies:
-      is-glob: 4.0.3
-
-  glob-parent@6.0.2:
-    dependencies:
-      is-glob: 4.0.3
-
-  glob-to-regexp@0.4.1: {}
-
-  glob@7.2.3:
-    dependencies:
-      fs.realpath: 1.0.0
-      inflight: 1.0.6
-      inherits: 2.0.4
-      minimatch: 3.1.2
-      once: 1.4.0
-      path-is-absolute: 1.0.1
-
-  global-dirs@0.1.1:
-    dependencies:
-      ini: 1.3.8
-
-  global-modules@1.0.0:
-    dependencies:
-      global-prefix: 1.0.2
-      is-windows: 1.0.2
-      resolve-dir: 1.0.1
-
-  global-prefix@1.0.2:
-    dependencies:
-      expand-tilde: 2.0.2
-      homedir-polyfill: 1.0.3
-      ini: 1.3.8
-      is-windows: 1.0.2
-      which: 1.3.1
-
-  global@4.4.0:
-    dependencies:
-      min-document: 2.19.0
-      process: 0.11.10
-
-  globals@11.12.0: {}
-
-  globals@13.20.0:
-    dependencies:
-      type-fest: 0.20.2
-
-  globalthis@1.0.3:
-    dependencies:
-      define-properties: 1.2.0
-
-  globby@11.1.0:
-    dependencies:
-      array-union: 2.1.0
-      dir-glob: 3.0.1
-      fast-glob: 3.3.1
-      ignore: 5.2.4
-      merge2: 1.4.1
-      slash: 3.0.0
-
-  globby@13.2.2:
-    dependencies:
-      dir-glob: 3.0.1
-      fast-glob: 3.3.1
-      ignore: 5.2.4
-      merge2: 1.4.1
-      slash: 4.0.0
-
-  globby@7.1.1:
-    dependencies:
-      array-union: 1.0.2
-      dir-glob: 2.2.2
-      glob: 7.2.3
-      ignore: 3.3.10
-      pify: 3.0.0
-      slash: 1.0.0
-
-  gopd@1.0.1:
-    dependencies:
-      get-intrinsic: 1.2.1
-
-  graceful-fs@4.2.11: {}
-
-  grapheme-splitter@1.0.4: {}
-
-  graphemer@1.4.0: {}
-
-  gzip-size@6.0.0:
-    dependencies:
-      duplexer: 0.1.2
-
-  handle-thing@2.0.1: {}
-
-  handlebars@4.7.7:
-    dependencies:
-      minimist: 1.2.8
-      neo-async: 2.6.2
-      source-map: 0.6.1
-      wordwrap: 1.0.0
-    optionalDependencies:
-      uglify-js: 3.17.4
-
-  har-schema@2.0.0: {}
-
-  har-validator@5.1.5:
-    dependencies:
-      ajv: 6.12.6
-      har-schema: 2.0.0
-
-  hard-rejection@2.1.0: {}
-
-  has-bigints@1.0.2: {}
-
-  has-flag@3.0.0: {}
-
-  has-flag@4.0.0: {}
-
-  has-property-descriptors@1.0.0:
-    dependencies:
-      get-intrinsic: 1.2.1
-
-  has-proto@1.0.1: {}
-
-  has-symbols@1.0.3: {}
-
-  has-tostringtag@1.0.0:
-    dependencies:
-      has-symbols: 1.0.3
-
-  has-unicode@2.0.1:
-    optional: true
-
-  has@1.0.3:
-    dependencies:
-      function-bind: 1.1.1
-
-  hash-sum@1.0.2: {}
-
-  hash-sum@2.0.0: {}
-
-  he@1.2.0: {}
-
-  highlight.js@11.8.0: {}
-
-  homedir-polyfill@1.0.3:
-    dependencies:
-      parse-passwd: 1.0.0
-
-  hosted-git-info@2.8.9: {}
-
-  hosted-git-info@4.1.0:
-    dependencies:
-      lru-cache: 6.0.0
-
-  hpack.js@2.1.6:
-    dependencies:
-      inherits: 2.0.4
-      obuf: 1.1.2
-      readable-stream: 2.3.8
-      wbuf: 1.7.3
-
-  html-encoding-sniffer@3.0.0:
-    dependencies:
-      whatwg-encoding: 2.0.0
-    optional: true
-
-  html-entities@2.3.3: {}
-
-  html-minifier-terser@6.1.0:
-    dependencies:
-      camel-case: 4.1.2
-      clean-css: 5.3.2
-      commander: 8.3.0
-      he: 1.2.0
-      param-case: 3.0.4
-      relateurl: 0.2.7
-      terser: 5.16.6
-
-  html-webpack-plugin@5.5.0(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)):
-    dependencies:
-      '@types/html-minifier-terser': 6.1.0
-      html-minifier-terser: 6.1.0
-      lodash: 4.17.21
-      pretty-error: 4.0.0
-      tapable: 2.2.1
-      webpack: 5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)
-
-  html-webpack-tags-plugin@3.0.2(html-webpack-plugin@5.5.0(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)))(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)):
-    dependencies:
-      glob: 7.2.3
-      html-webpack-plugin: 5.5.0(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))
-      minimatch: 3.1.2
-      slash: 3.0.0
-      webpack: 5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)
-
-  htmlparser2@6.1.0:
-    dependencies:
-      domelementtype: 2.3.0
-      domhandler: 4.3.1
-      domutils: 2.8.0
-      entities: 2.2.0
-
-  http-deceiver@1.2.7: {}
-
-  http-errors@1.6.3:
-    dependencies:
-      depd: 1.1.2
-      inherits: 2.0.3
-      setprototypeof: 1.1.0
-      statuses: 1.5.0
-
-  http-errors@2.0.0:
-    dependencies:
-      depd: 2.0.0
-      inherits: 2.0.4
-      setprototypeof: 1.2.0
-      statuses: 2.0.1
-      toidentifier: 1.0.1
-
-  http-parser-js@0.5.8: {}
-
-  http-proxy-agent@5.0.0:
-    dependencies:
-      '@tootallnate/once': 2.0.0
-      agent-base: 6.0.2
-      debug: 4.3.4(supports-color@9.3.1)
-    transitivePeerDependencies:
-      - supports-color
-    optional: true
-
-  http-proxy-middleware@2.0.6(@types/express@4.17.17):
-    dependencies:
-      '@types/http-proxy': 1.17.10
-      http-proxy: 1.18.1
-      is-glob: 4.0.3
-      is-plain-obj: 3.0.0
-      micromatch: 4.0.5
-    optionalDependencies:
-      '@types/express': 4.17.17
-    transitivePeerDependencies:
-      - debug
-
-  http-proxy@1.18.1:
-    dependencies:
-      eventemitter3: 4.0.7
-      follow-redirects: 1.15.2
-      requires-port: 1.0.0
-    transitivePeerDependencies:
-      - debug
-
-  http-signature@1.2.0:
-    dependencies:
-      assert-plus: 1.0.0
-      jsprim: 1.4.2
-      sshpk: 1.18.0
-
-  https-proxy-agent@5.0.1:
-    dependencies:
-      agent-base: 6.0.2
-      debug: 4.3.4(supports-color@9.3.1)
-    transitivePeerDependencies:
-      - supports-color
-    optional: true
-
-  human-signals@2.1.0: {}
-
-  human-signals@4.3.1: {}
-
-  humanize-ms@1.2.1:
-    dependencies:
-      ms: 2.1.3
-
-  husky@7.0.4: {}
-
-  iconv-lite@0.4.24:
-    dependencies:
-      safer-buffer: 2.1.2
-
-  iconv-lite@0.6.3:
-    dependencies:
-      safer-buffer: 2.1.2
-    optional: true
-
-  icss-utils@5.1.0(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-
-  ieee754@1.2.1: {}
-
-  ignore@3.3.10: {}
-
-  ignore@5.2.4: {}
-
-  immediate@3.0.6: {}
-
-  immutable@4.3.0: {}
-
-  import-fresh@3.3.0:
-    dependencies:
-      parent-module: 1.0.1
-      resolve-from: 4.0.0
-
-  import-local@3.1.0:
-    dependencies:
-      pkg-dir: 4.2.0
-      resolve-cwd: 3.0.0
-
-  imurmurhash@0.1.4: {}
-
-  indent-string@4.0.0: {}
-
-  indent-string@5.0.0: {}
-
-  individual@2.0.0: {}
-
-  inflight@1.0.6:
-    dependencies:
-      once: 1.4.0
-      wrappy: 1.0.2
-
-  inherits@2.0.3: {}
-
-  inherits@2.0.4: {}
-
-  ini@1.3.8: {}
-
-  inquirer@6.5.2:
-    dependencies:
-      ansi-escapes: 3.2.0
-      chalk: 2.4.2
-      cli-cursor: 2.1.0
-      cli-width: 2.2.1
-      external-editor: 3.1.0
-      figures: 2.0.0
-      lodash: 4.17.21
-      mute-stream: 0.0.7
-      run-async: 2.4.1
-      rxjs: 6.6.7
-      string-width: 2.1.1
-      strip-ansi: 5.2.0
-      through: 2.3.8
-
-  inquirer@8.2.5:
-    dependencies:
-      ansi-escapes: 4.3.2
-      chalk: 4.1.2
-      cli-cursor: 3.1.0
-      cli-width: 3.0.0
-      external-editor: 3.1.0
-      figures: 3.2.0
-      lodash: 4.17.21
-      mute-stream: 0.0.8
-      ora: 5.4.1
-      run-async: 2.4.1
-      rxjs: 7.8.0
-      string-width: 4.2.3
-      strip-ansi: 6.0.1
-      through: 2.3.8
-      wrap-ansi: 7.0.0
-
-  internal-slot@1.0.5:
-    dependencies:
-      get-intrinsic: 1.2.1
-      has: 1.0.3
-      side-channel: 1.0.4
-
-  interpret@2.2.0: {}
-
-  ip@1.1.9: {}
-
-  ipaddr.js@1.9.1: {}
-
-  ipaddr.js@2.0.1: {}
-
-  is-array-buffer@3.0.2:
-    dependencies:
-      call-bind: 1.0.2
-      get-intrinsic: 1.2.1
-      is-typed-array: 1.1.10
-
-  is-arrayish@0.2.1: {}
-
-  is-bigint@1.0.4:
-    dependencies:
-      has-bigints: 1.0.2
-
-  is-binary-path@2.1.0:
-    dependencies:
-      binary-extensions: 2.2.0
-
-  is-boolean-object@1.1.2:
-    dependencies:
-      call-bind: 1.0.2
-      has-tostringtag: 1.0.0
-
-  is-builtin-module@3.2.1:
-    dependencies:
-      builtin-modules: 3.3.0
-
-  is-callable@1.2.7: {}
-
-  is-class-hotfix@0.0.6: {}
-
-  is-core-module@2.13.0:
-    dependencies:
-      has: 1.0.3
-
-  is-date-object@1.0.5:
-    dependencies:
-      has-tostringtag: 1.0.0
-
-  is-docker@2.2.1: {}
-
-  is-docker@3.0.0: {}
-
-  is-extendable@0.1.1: {}
-
-  is-extglob@2.1.1: {}
-
-  is-fullwidth-code-point@2.0.0: {}
-
-  is-fullwidth-code-point@3.0.0: {}
-
-  is-fullwidth-code-point@4.0.0: {}
-
-  is-function@1.0.2: {}
-
-  is-glob@4.0.3:
-    dependencies:
-      is-extglob: 2.1.1
-
-  is-inside-container@1.0.0:
-    dependencies:
-      is-docker: 3.0.0
-
-  is-interactive@1.0.0: {}
-
-  is-module@1.0.0: {}
-
-  is-negative-zero@2.0.2: {}
-
-  is-number-object@1.0.7:
-    dependencies:
-      has-tostringtag: 1.0.0
-
-  is-number@7.0.0: {}
-
-  is-obj@2.0.0: {}
-
-  is-path-inside@3.0.3: {}
-
-  is-path-inside@4.0.0: {}
-
-  is-plain-obj@1.1.0: {}
-
-  is-plain-obj@3.0.0: {}
-
-  is-plain-object@2.0.4:
-    dependencies:
-      isobject: 3.0.1
-
-  is-potential-custom-element-name@1.0.1:
-    optional: true
-
-  is-reference@1.2.1:
-    dependencies:
-      '@types/estree': 1.0.0
-
-  is-regex@1.1.4:
-    dependencies:
-      call-bind: 1.0.2
-      has-tostringtag: 1.0.0
-
-  is-shared-array-buffer@1.0.2:
-    dependencies:
-      call-bind: 1.0.2
-
-  is-stream@2.0.1: {}
-
-  is-stream@3.0.0: {}
-
-  is-string@1.0.7:
-    dependencies:
-      has-tostringtag: 1.0.0
-
-  is-symbol@1.0.4:
-    dependencies:
-      has-symbols: 1.0.3
-
-  is-text-path@1.0.1:
-    dependencies:
-      text-extensions: 1.9.0
-
-  is-type-of@1.4.0:
-    dependencies:
-      core-util-is: 1.0.3
-      is-class-hotfix: 0.0.6
-      isstream: 0.1.2
-
-  is-typed-array@1.1.10:
-    dependencies:
-      available-typed-arrays: 1.0.5
-      call-bind: 1.0.2
-      for-each: 0.3.3
-      gopd: 1.0.1
-      has-tostringtag: 1.0.0
-
-  is-typedarray@1.0.0: {}
-
-  is-unicode-supported@0.1.0: {}
-
-  is-utf8@0.2.1: {}
-
-  is-weakref@1.0.2:
-    dependencies:
-      call-bind: 1.0.2
-
-  is-windows@1.0.2: {}
-
-  is-wsl@2.2.0:
-    dependencies:
-      is-docker: 2.2.1
-
-  isarray@1.0.0: {}
-
-  isexe@2.0.0: {}
-
-  isobject@3.0.1: {}
-
-  isstream@0.1.2: {}
-
-  jest-worker@26.6.2:
-    dependencies:
-      '@types/node': 18.15.3
-      merge-stream: 2.0.0
-      supports-color: 7.2.0
-
-  jest-worker@27.5.1:
-    dependencies:
-      '@types/node': 18.15.3
-      merge-stream: 2.0.0
-      supports-color: 8.1.1
-
-  jest-worker@28.1.3:
-    dependencies:
-      '@types/node': 18.15.3
-      merge-stream: 2.0.0
-      supports-color: 8.1.1
-
-  jiti@1.18.2: {}
-
-  joycon@3.1.1: {}
-
-  js-base64@2.6.4: {}
-
-  js-cookie@3.0.5: {}
-
-  js-sdsl@4.3.0: {}
-
-  js-tokens@4.0.0: {}
-
-  js-yaml@4.1.0:
-    dependencies:
-      argparse: 2.0.1
-
-  jsbn@0.1.1: {}
-
-  jsdom@19.0.0(canvas@2.11.2):
-    dependencies:
-      abab: 2.0.6
-      acorn: 8.8.2
-      acorn-globals: 6.0.0
-      cssom: 0.5.0
-      cssstyle: 2.3.0
-      data-urls: 3.0.2
-      decimal.js: 10.4.3
-      domexception: 4.0.0
-      escodegen: 2.1.0
-      form-data: 4.0.0
-      html-encoding-sniffer: 3.0.0
-      http-proxy-agent: 5.0.0
-      https-proxy-agent: 5.0.1
-      is-potential-custom-element-name: 1.0.1
-      nwsapi: 2.2.7
-      parse5: 6.0.1
-      saxes: 5.0.1
-      symbol-tree: 3.2.4
-      tough-cookie: 4.1.3
-      w3c-hr-time: 1.0.2
-      w3c-xmlserializer: 3.0.0
-      webidl-conversions: 7.0.0
-      whatwg-encoding: 2.0.0
-      whatwg-mimetype: 3.0.0
-      whatwg-url: 10.0.0
-      ws: 8.13.0
-      xml-name-validator: 4.0.0
-    optionalDependencies:
-      canvas: 2.11.2
-    transitivePeerDependencies:
-      - bufferutil
-      - supports-color
-      - utf-8-validate
-    optional: true
-
-  jsesc@0.5.0: {}
-
-  jsesc@2.5.2: {}
-
-  json-parse-better-errors@1.0.2: {}
-
-  json-parse-even-better-errors@2.3.1: {}
-
-  json-schema-traverse@0.4.1: {}
-
-  json-schema-traverse@1.0.0: {}
-
-  json-schema-typed@7.0.3: {}
-
-  json-schema@0.4.0: {}
-
-  json-stable-stringify-without-jsonify@1.0.1: {}
-
-  json-stringify-safe@5.0.1: {}
-
-  json5@1.0.2:
-    dependencies:
-      minimist: 1.2.8
-
-  json5@2.2.3: {}
-
-  jsonc-parser@3.2.0: {}
-
-  jsonfile@4.0.0:
-    optionalDependencies:
-      graceful-fs: 4.2.11
-
-  jsonfile@6.1.0:
-    dependencies:
-      universalify: 2.0.0
-    optionalDependencies:
-      graceful-fs: 4.2.11
-
-  jsonparse@1.3.1: {}
-
-  jsprim@1.4.2:
-    dependencies:
-      assert-plus: 1.0.0
-      extsprintf: 1.3.0
-      json-schema: 0.4.0
-      verror: 1.10.0
-
-  jstoxml@2.2.9: {}
-
-  jszip@3.10.1:
-    dependencies:
-      lie: 3.3.0
-      pako: 1.0.11
-      readable-stream: 2.3.8
-      setimmediate: 1.0.5
-
-  keycode@2.2.0: {}
-
-  kind-of@6.0.3: {}
-
-  klona@2.0.6: {}
-
-  launch-editor@2.6.0:
-    dependencies:
-      picocolors: 1.0.0
-      shell-quote: 1.8.0
-
-  levn@0.4.1:
-    dependencies:
-      prelude-ls: 1.2.1
-      type-check: 0.4.0
-
-  lie@3.3.0:
-    dependencies:
-      immediate: 3.0.6
-
-  lilconfig@2.0.5: {}
-
-  lilconfig@2.1.0: {}
-
-  lines-and-columns@1.2.4: {}
-
-  linkify-it@5.0.0:
-    dependencies:
-      uc.micro: 2.1.0
-
-  lint-staged@12.5.0:
-    dependencies:
-      cli-truncate: 3.1.0
-      colorette: 2.0.19
-      commander: 9.5.0
-      debug: 4.3.4(supports-color@9.3.1)
-      execa: 5.1.1
-      lilconfig: 2.0.5
-      listr2: 4.0.5
-      micromatch: 4.0.5
-      normalize-path: 3.0.0
-      object-inspect: 1.12.3
-      pidtree: 0.5.0
-      string-argv: 0.3.1
-      supports-color: 9.3.1
-      yaml: 1.10.2
-    transitivePeerDependencies:
-      - enquirer
-
-  listr2@4.0.5:
-    dependencies:
-      cli-truncate: 2.1.0
-      colorette: 2.0.19
-      log-update: 4.0.0
-      p-map: 4.0.0
-      rfdc: 1.3.0
-      rxjs: 7.8.0
-      through: 2.3.8
-      wrap-ansi: 7.0.0
-
-  load-json-file@4.0.0:
-    dependencies:
-      graceful-fs: 4.2.11
-      parse-json: 4.0.0
-      pify: 3.0.0
-      strip-bom: 3.0.0
-
-  loader-runner@4.3.0: {}
-
-  loader-utils@1.4.2:
-    dependencies:
-      big.js: 5.2.2
-      emojis-list: 3.0.0
-      json5: 1.0.2
-
-  loader-utils@2.0.4:
-    dependencies:
-      big.js: 5.2.2
-      emojis-list: 3.0.0
-      json5: 2.2.3
-
-  local-pkg@0.4.3: {}
-
-  locate-path@2.0.0:
-    dependencies:
-      p-locate: 2.0.0
-      path-exists: 3.0.0
-
-  locate-path@3.0.0:
-    dependencies:
-      p-locate: 3.0.0
-      path-exists: 3.0.0
-
-  locate-path@5.0.0:
-    dependencies:
-      p-locate: 4.1.0
-
-  locate-path@6.0.0:
-    dependencies:
-      p-locate: 5.0.0
-
-  lodash-es@4.17.21: {}
-
-  lodash.debounce@4.0.8: {}
-
-  lodash.ismatch@4.4.0: {}
-
-  lodash.isplainobject@4.0.6:
-    optional: true
-
-  lodash.map@4.6.0: {}
-
-  lodash.memoize@4.1.2: {}
-
-  lodash.merge@4.6.2: {}
-
-  lodash.mergewith@4.6.2:
-    optional: true
-
-  lodash.uniq@4.5.0: {}
-
-  lodash@4.17.21: {}
-
-  log-symbols@4.1.0:
-    dependencies:
-      chalk: 4.1.2
-      is-unicode-supported: 0.1.0
-
-  log-update@4.0.0:
-    dependencies:
-      ansi-escapes: 4.3.2
-      cli-cursor: 3.1.0
-      slice-ansi: 4.0.0
-      wrap-ansi: 6.2.0
-
-  log4js@6.9.1:
-    dependencies:
-      date-format: 4.0.14
-      debug: 4.3.4(supports-color@9.3.1)
-      flatted: 3.2.7
-      rfdc: 1.3.0
-      streamroller: 3.1.5
-    transitivePeerDependencies:
-      - supports-color
-
-  longest@2.0.1: {}
-
-  lower-case@2.0.2:
-    dependencies:
-      tslib: 2.6.1
-
-  lru-cache@10.4.3: {}
-
-  lru-cache@5.1.1:
-    dependencies:
-      yallist: 3.1.1
-
-  lru-cache@6.0.0:
-    dependencies:
-      yallist: 4.0.0
-
-  m3u8-parser@6.2.0:
-    dependencies:
-      '@babel/runtime': 7.22.6
-      '@videojs/vhs-utils': 3.0.5
-      global: 4.4.0
-
-  magic-string@0.25.9:
-    dependencies:
-      sourcemap-codec: 1.4.8
-
-  magic-string@0.26.7:
-    dependencies:
-      sourcemap-codec: 1.4.8
-
-  magic-string@0.27.0:
-    dependencies:
-      '@jridgewell/sourcemap-codec': 1.4.14
-
-  magic-string@0.30.0:
-    dependencies:
-      '@jridgewell/sourcemap-codec': 1.4.14
-
-  magic-string@0.30.15:
-    dependencies:
-      '@jridgewell/sourcemap-codec': 1.5.0
-
-  make-dir@3.1.0:
-    dependencies:
-      semver: 6.3.1
-
-  make-error@1.3.6: {}
-
-  map-obj@1.0.1: {}
-
-  map-obj@4.3.0: {}
-
-  markdown-it-image-figures@2.1.1(markdown-it@14.1.0):
-    dependencies:
-      markdown-it: 14.1.0
-
-  markdown-it-sub@2.0.0: {}
-
-  markdown-it-sup@2.0.0: {}
-
-  markdown-it@14.1.0:
-    dependencies:
-      argparse: 2.0.1
-      entities: 4.5.0
-      linkify-it: 5.0.0
-      mdurl: 2.0.0
-      punycode.js: 2.3.1
-      uc.micro: 2.1.0
-
-  md-editor-v3@4.21.3(@codemirror/view@6.34.2)(@lezer/common@1.2.3)(vue@3.5.13(typescript@5.1.6)):
-    dependencies:
-      '@codemirror/lang-markdown': 6.3.1
-      '@codemirror/language-data': 6.5.1(@codemirror/view@6.34.2)
-      '@types/markdown-it': 14.1.2
-      '@vavt/util': 2.1.0
-      codemirror: 6.0.1(@lezer/common@1.2.3)
-      copy-to-clipboard: 3.3.3
-      lru-cache: 10.4.3
-      markdown-it: 14.1.0
-      markdown-it-image-figures: 2.1.1(markdown-it@14.1.0)
-      markdown-it-sub: 2.0.0
-      markdown-it-sup: 2.0.0
-      medium-zoom: 1.1.0
-      vue: 3.5.13(typescript@5.1.6)
-      xss: 1.0.15
-    transitivePeerDependencies:
-      - '@codemirror/view'
-      - '@lezer/common'
-
-  mdn-data@2.0.14: {}
-
-  mdurl@2.0.0: {}
-
-  media-typer@0.3.0: {}
-
-  medium-zoom@1.1.0: {}
-
-  memfs@3.4.13:
-    dependencies:
-      fs-monkey: 1.0.3
-
-  meow@8.1.2:
-    dependencies:
-      '@types/minimist': 1.2.2
-      camelcase-keys: 6.2.2
-      decamelize-keys: 1.1.1
-      hard-rejection: 2.1.0
-      minimist-options: 4.1.0
-      normalize-package-data: 3.0.3
-      read-pkg-up: 7.0.1
-      redent: 3.0.0
-      trim-newlines: 3.0.1
-      type-fest: 0.18.1
-      yargs-parser: 20.2.9
-
-  merge-descriptors@1.0.1: {}
-
-  merge-stream@2.0.0: {}
-
-  merge2@1.4.1: {}
-
-  merge@2.1.1: {}
-
-  methods@1.1.2: {}
-
-  micromatch@4.0.5:
-    dependencies:
-      braces: 3.0.2
-      picomatch: 2.3.1
-
-  mime-db@1.52.0: {}
-
-  mime-types@2.1.35:
-    dependencies:
-      mime-db: 1.52.0
-
-  mime@1.6.0: {}
-
-  mime@2.6.0: {}
-
-  mimic-fn@1.2.0: {}
-
-  mimic-fn@2.1.0: {}
-
-  mimic-fn@3.1.0: {}
-
-  mimic-fn@4.0.0: {}
-
-  mimic-response@2.1.0:
-    optional: true
-
-  min-document@2.19.0:
-    dependencies:
-      dom-walk: 0.1.2
-
-  min-indent@1.0.1: {}
-
-  mini-css-extract-plugin@2.7.5(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)):
-    dependencies:
-      schema-utils: 4.0.0
-      webpack: 5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)
-
-  minimalistic-assert@1.0.1: {}
-
-  minimatch@3.1.2:
-    dependencies:
-      brace-expansion: 1.1.11
-
-  minimatch@7.4.6:
-    dependencies:
-      brace-expansion: 2.0.1
-
-  minimist-options@4.1.0:
-    dependencies:
-      arrify: 1.0.1
-      is-plain-obj: 1.1.0
-      kind-of: 6.0.3
-
-  minimist@1.2.7: {}
-
-  minimist@1.2.8: {}
-
-  minipass@3.3.6:
-    dependencies:
-      yallist: 4.0.0
-    optional: true
-
-  minipass@5.0.0:
-    optional: true
-
-  minizlib@2.1.2:
-    dependencies:
-      minipass: 3.3.6
-      yallist: 4.0.0
-    optional: true
-
-  mkdirp@0.5.6:
-    dependencies:
-      minimist: 1.2.8
-
-  mkdirp@1.0.4:
-    optional: true
-
-  mockdate@3.0.5: {}
-
-  modify-values@1.0.1: {}
-
-  mount-point@3.0.0:
-    dependencies:
-      '@sindresorhus/df': 1.0.1
-      pify: 2.3.0
-      pinkie-promise: 2.0.1
-
-  move-file@3.1.0:
-    dependencies:
-      path-exists: 5.0.0
-
-  mp4box@0.5.2: {}
-
-  mpd-parser@1.1.1:
-    dependencies:
-      '@babel/runtime': 7.22.6
-      '@videojs/vhs-utils': 3.0.5
-      '@xmldom/xmldom': 0.8.8
-      global: 4.4.0
-
-  mpegts.js@1.7.3:
-    dependencies:
-      es6-promise: 4.2.8
-      webworkify-webpack: 2.1.5
-
-  mrmime@1.0.1: {}
-
-  ms@2.0.0: {}
-
-  ms@2.1.2: {}
-
-  ms@2.1.3: {}
-
-  multicast-dns@7.2.5:
-    dependencies:
-      dns-packet: 5.4.0
-      thunky: 1.1.0
-
-  mutation-observer@1.0.3: {}
-
-  mute-stream@0.0.7: {}
-
-  mute-stream@0.0.8: {}
-
-  mux.js@6.3.0:
-    dependencies:
-      '@babel/runtime': 7.22.6
-      global: 4.4.0
-
-  mz@2.7.0:
-    dependencies:
-      any-promise: 1.3.0
-      object-assign: 4.1.1
-      thenify-all: 1.6.0
-
-  naive-ui@2.40.2(vue@3.5.13(typescript@5.1.6)):
-    dependencies:
-      '@css-render/plugin-bem': 0.15.14(css-render@0.15.14)
-      '@css-render/vue3-ssr': 0.15.14(vue@3.5.13(typescript@5.1.6))
-      '@types/katex': 0.16.7
-      '@types/lodash': 4.17.13
-      '@types/lodash-es': 4.17.12
-      async-validator: 4.2.5
-      css-render: 0.15.14
-      csstype: 3.1.3
-      date-fns: 3.6.0
-      date-fns-tz: 3.2.0(date-fns@3.6.0)
-      evtd: 0.2.4
-      highlight.js: 11.8.0
-      lodash: 4.17.21
-      lodash-es: 4.17.21
-      seemly: 0.3.9
-      treemate: 0.3.11
-      vdirs: 0.1.8(vue@3.5.13(typescript@5.1.6))
-      vooks: 0.2.12(vue@3.5.13(typescript@5.1.6))
-      vue: 3.5.13(typescript@5.1.6)
-      vueuc: 0.4.64(vue@3.5.13(typescript@5.1.6))
-
-  nan@2.17.0:
-    optional: true
-
-  nan@2.18.0:
-    optional: true
-
-  nanoid@3.3.4: {}
-
-  nanoid@3.3.8: {}
-
-  natural-compare-lite@1.4.0: {}
-
-  natural-compare@1.4.0: {}
-
-  negotiator@0.6.3: {}
-
-  neo-async@2.6.2: {}
-
-  no-case@3.0.4:
-    dependencies:
-      lower-case: 2.0.2
-      tslib: 2.6.1
-
-  node-abort-controller@3.1.1: {}
-
-  node-emoji@1.11.0:
-    dependencies:
-      lodash: 4.17.21
-
-  node-fetch@2.6.12:
-    dependencies:
-      whatwg-url: 5.0.0
-    optional: true
-
-  node-forge@1.3.1: {}
-
-  node-releases@2.0.10: {}
-
-  node-ssh@13.1.0:
-    dependencies:
-      '@types/ssh2': 1.11.19
-      is-stream: 2.0.1
-      make-dir: 3.1.0
-      sb-promise-queue: 2.1.0
-      sb-scandir: 3.1.0
-      shell-escape: 0.2.0
-      ssh2: 1.15.0
-
-  nopt@5.0.0:
-    dependencies:
-      abbrev: 1.1.1
-    optional: true
-
-  normalize-package-data@2.5.0:
-    dependencies:
-      hosted-git-info: 2.8.9
-      resolve: 1.22.4
-      semver: 5.7.1
-      validate-npm-package-license: 3.0.4
-
-  normalize-package-data@3.0.3:
-    dependencies:
-      hosted-git-info: 4.1.0
-      is-core-module: 2.13.0
-      semver: 7.5.4
-      validate-npm-package-license: 3.0.4
-
-  normalize-path@3.0.0: {}
-
-  normalize-range@0.1.2: {}
-
-  normalize-url@6.1.0: {}
-
-  notepack.io@2.2.0: {}
-
-  npm-run-path@3.1.0:
-    dependencies:
-      path-key: 3.1.1
-
-  npm-run-path@4.0.1:
-    dependencies:
-      path-key: 3.1.1
-
-  npm-run-path@5.1.0:
-    dependencies:
-      path-key: 4.0.0
-
-  npmlog@5.0.1:
-    dependencies:
-      are-we-there-yet: 2.0.0
-      console-control-strings: 1.1.0
-      gauge: 3.0.2
-      set-blocking: 2.0.0
-    optional: true
-
-  nth-check@2.1.1:
-    dependencies:
-      boolbase: 1.0.0
-
-  nwsapi@2.2.7:
-    optional: true
-
-  oauth-sign@0.9.0: {}
-
-  object-assign@4.1.1: {}
-
-  object-inspect@1.12.3: {}
-
-  object-keys@1.1.1: {}
-
-  object.assign@4.1.4:
-    dependencies:
-      call-bind: 1.0.2
-      define-properties: 1.2.0
-      has-symbols: 1.0.3
-      object-keys: 1.1.1
-
-  object.fromentries@2.0.6:
-    dependencies:
-      call-bind: 1.0.2
-      define-properties: 1.2.0
-      es-abstract: 1.21.2
-
-  object.groupby@1.0.0:
-    dependencies:
-      call-bind: 1.0.2
-      define-properties: 1.2.0
-      es-abstract: 1.21.2
-      get-intrinsic: 1.2.1
-
-  object.values@1.1.6:
-    dependencies:
-      call-bind: 1.0.2
-      define-properties: 1.2.0
-      es-abstract: 1.21.2
-
-  obuf@1.1.2: {}
-
-  on-finished@2.4.1:
-    dependencies:
-      ee-first: 1.1.1
-
-  on-headers@1.0.2: {}
-
-  once@1.4.0:
-    dependencies:
-      wrappy: 1.0.2
-
-  onetime@2.0.1:
-    dependencies:
-      mimic-fn: 1.2.0
-
-  onetime@5.1.2:
-    dependencies:
-      mimic-fn: 2.1.0
-
-  onetime@6.0.0:
-    dependencies:
-      mimic-fn: 4.0.0
-
-  open@8.4.2:
-    dependencies:
-      define-lazy-prop: 2.0.0
-      is-docker: 2.2.1
-      is-wsl: 2.2.0
-
-  open@9.1.0:
-    dependencies:
-      default-browser: 4.0.0
-      define-lazy-prop: 3.0.0
-      is-inside-container: 1.0.0
-      is-wsl: 2.2.0
-
-  opener@1.5.2: {}
-
-  opfs-tools@0.6.1: {}
-
-  optionator@0.9.1:
-    dependencies:
-      deep-is: 0.1.4
-      fast-levenshtein: 2.0.6
-      levn: 0.4.1
-      prelude-ls: 1.2.1
-      type-check: 0.4.0
-      word-wrap: 1.2.3
-
-  ora@5.4.1:
-    dependencies:
-      bl: 4.1.0
-      chalk: 4.1.2
-      cli-cursor: 3.1.0
-      cli-spinners: 2.7.0
-      is-interactive: 1.0.0
-      is-unicode-supported: 0.1.0
-      log-symbols: 4.1.0
-      strip-ansi: 6.0.1
-      wcwidth: 1.0.1
-
-  os-homedir@1.0.2: {}
-
-  os-name@1.0.3:
-    dependencies:
-      osx-release: 1.1.0
-      win-release: 1.1.1
-
-  os-tmpdir@1.0.2: {}
-
-  osx-release@1.1.0:
-    dependencies:
-      minimist: 1.2.8
-
-  oxlint@0.13.0:
-    optionalDependencies:
-      '@oxlint/darwin-arm64': 0.13.0
-      '@oxlint/darwin-x64': 0.13.0
-      '@oxlint/linux-arm64-gnu': 0.13.0
-      '@oxlint/linux-arm64-musl': 0.13.0
-      '@oxlint/linux-x64-gnu': 0.13.0
-      '@oxlint/linux-x64-musl': 0.13.0
-      '@oxlint/win32-arm64': 0.13.0
-      '@oxlint/win32-x64': 0.13.0
-
-  p-finally@2.0.1: {}
-
-  p-limit@1.3.0:
-    dependencies:
-      p-try: 1.0.0
-
-  p-limit@2.3.0:
-    dependencies:
-      p-try: 2.2.0
-
-  p-limit@3.1.0:
-    dependencies:
-      yocto-queue: 0.1.0
-
-  p-locate@2.0.0:
-    dependencies:
-      p-limit: 1.3.0
-
-  p-locate@3.0.0:
-    dependencies:
-      p-limit: 2.3.0
-
-  p-locate@4.1.0:
-    dependencies:
-      p-limit: 2.3.0
-
-  p-locate@5.0.0:
-    dependencies:
-      p-limit: 3.1.0
-
-  p-map@4.0.0:
-    dependencies:
-      aggregate-error: 3.1.0
-
-  p-map@5.5.0:
-    dependencies:
-      aggregate-error: 4.0.1
-
-  p-retry@4.6.2:
-    dependencies:
-      '@types/retry': 0.12.0
-      retry: 0.13.1
-
-  p-try@1.0.0: {}
-
-  p-try@2.2.0: {}
-
-  pako@1.0.11: {}
-
-  param-case@3.0.4:
-    dependencies:
-      dot-case: 3.0.4
-      tslib: 2.6.1
-
-  parent-module@1.0.1:
-    dependencies:
-      callsites: 3.1.0
-
-  parse-json@4.0.0:
-    dependencies:
-      error-ex: 1.3.2
-      json-parse-better-errors: 1.0.2
-
-  parse-json@5.2.0:
-    dependencies:
-      '@babel/code-frame': 7.18.6
-      error-ex: 1.3.2
-      json-parse-even-better-errors: 2.3.1
-      lines-and-columns: 1.2.4
-
-  parse-passwd@1.0.0: {}
-
-  parse5@6.0.1:
-    optional: true
-
-  parseurl@1.3.3: {}
-
-  pascal-case@3.1.2:
-    dependencies:
-      no-case: 3.0.4
-      tslib: 2.6.1
-
-  path-exists@3.0.0: {}
-
-  path-exists@4.0.0: {}
-
-  path-exists@5.0.0: {}
-
-  path-is-absolute@1.0.1: {}
-
-  path-key@3.1.1: {}
-
-  path-key@4.0.0: {}
-
-  path-parse@1.0.7: {}
-
-  path-to-regexp@0.1.7: {}
-
-  path-type@3.0.0:
-    dependencies:
-      pify: 3.0.0
-
-  path-type@4.0.0: {}
-
-  pathe@1.1.0: {}
-
-  pause-stream@0.0.11:
-    dependencies:
-      through: 2.3.8
-
-  performance-now@2.1.0: {}
-
-  picocolors@1.0.0: {}
-
-  picocolors@1.1.1: {}
-
-  picomatch@2.3.1: {}
-
-  pidtree@0.5.0: {}
-
-  pify@2.3.0: {}
-
-  pify@3.0.0: {}
-
-  pinia-plugin-persistedstate@3.2.0(pinia@2.0.33(typescript@5.1.6)(vue@3.5.13(typescript@5.1.6))):
-    dependencies:
-      pinia: 2.0.33(typescript@5.1.6)(vue@3.5.13(typescript@5.1.6))
-
-  pinia@2.0.33(typescript@5.1.6)(vue@3.5.13(typescript@5.1.6)):
-    dependencies:
-      '@vue/devtools-api': 6.5.0
-      vue: 3.5.13(typescript@5.1.6)
-      vue-demi: 0.13.11(vue@3.5.13(typescript@5.1.6))
-    optionalDependencies:
-      typescript: 5.1.6
-
-  pinkie-promise@2.0.1:
-    dependencies:
-      pinkie: 2.0.4
-
-  pinkie@2.0.4: {}
-
-  pkcs7@1.0.4:
-    dependencies:
-      '@babel/runtime': 7.22.6
-
-  pkg-dir@4.2.0:
-    dependencies:
-      find-up: 4.1.0
-
-  pkg-up@3.1.0:
-    dependencies:
-      find-up: 3.0.0
-
-  platform@1.3.6: {}
-
-  pngjs@5.0.0: {}
-
-  portfinder@1.0.32:
-    dependencies:
-      async: 2.6.4
-      debug: 3.2.7
-      mkdirp: 0.5.6
-    transitivePeerDependencies:
-      - supports-color
-
-  postcss-attribute-case-insensitive@5.0.2(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-selector-parser: 6.0.11
-
-  postcss-calc@8.2.4(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-selector-parser: 6.0.11
-      postcss-value-parser: 4.2.0
-
-  postcss-clamp@4.1.0(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  postcss-color-functional-notation@4.2.4(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  postcss-color-hex-alpha@8.0.4(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  postcss-color-rebeccapurple@7.1.1(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  postcss-colormin@5.3.1(postcss@8.4.21):
-    dependencies:
-      browserslist: 4.21.5
-      caniuse-api: 3.0.0
-      colord: 2.9.3
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  postcss-convert-values@5.1.3(postcss@8.4.21):
-    dependencies:
-      browserslist: 4.21.5
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  postcss-custom-media@8.0.2(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  postcss-custom-properties@12.1.11(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  postcss-custom-selectors@6.0.3(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-selector-parser: 6.0.11
-
-  postcss-dir-pseudo-class@6.0.5(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-selector-parser: 6.0.11
-
-  postcss-discard-comments@5.1.2(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-
-  postcss-discard-duplicates@5.1.0(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-
-  postcss-discard-empty@5.1.1(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-
-  postcss-discard-overridden@5.1.0(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-
-  postcss-double-position-gradients@3.1.2(postcss@8.4.21):
-    dependencies:
-      '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.21)
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  postcss-env-function@4.0.6(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  postcss-focus-visible@6.0.4(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-selector-parser: 6.0.11
-
-  postcss-focus-within@5.0.4(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-selector-parser: 6.0.11
-
-  postcss-font-variant@5.0.0(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-
-  postcss-gap-properties@3.0.5(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-
-  postcss-image-set-function@4.0.7(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  postcss-initial@4.0.1(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-
-  postcss-lab-function@4.2.1(postcss@8.4.21):
-    dependencies:
-      '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.21)
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  postcss-loader@6.2.1(postcss@8.4.21)(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)):
-    dependencies:
-      cosmiconfig: 7.1.0
-      klona: 2.0.6
-      postcss: 8.4.21
-      semver: 7.3.8
-      webpack: 5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)
-
-  postcss-logical@5.0.4(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-
-  postcss-media-minmax@5.0.0(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-
-  postcss-merge-longhand@5.1.7(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-      stylehacks: 5.1.1(postcss@8.4.21)
-
-  postcss-merge-rules@5.1.4(postcss@8.4.21):
-    dependencies:
-      browserslist: 4.21.5
-      caniuse-api: 3.0.0
-      cssnano-utils: 3.1.0(postcss@8.4.21)
-      postcss: 8.4.21
-      postcss-selector-parser: 6.0.11
-
-  postcss-minify-font-values@5.1.0(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  postcss-minify-gradients@5.1.1(postcss@8.4.21):
-    dependencies:
-      colord: 2.9.3
-      cssnano-utils: 3.1.0(postcss@8.4.21)
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  postcss-minify-params@5.1.4(postcss@8.4.21):
-    dependencies:
-      browserslist: 4.21.5
-      cssnano-utils: 3.1.0(postcss@8.4.21)
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  postcss-minify-selectors@5.2.1(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-selector-parser: 6.0.11
-
-  postcss-modules-extract-imports@3.0.0(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-
-  postcss-modules-local-by-default@4.0.0(postcss@8.4.21):
-    dependencies:
-      icss-utils: 5.1.0(postcss@8.4.21)
-      postcss: 8.4.21
-      postcss-selector-parser: 6.0.11
-      postcss-value-parser: 4.2.0
-
-  postcss-modules-scope@3.0.0(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-selector-parser: 6.0.11
-
-  postcss-modules-values@4.0.0(postcss@8.4.21):
-    dependencies:
-      icss-utils: 5.1.0(postcss@8.4.21)
-      postcss: 8.4.21
-
-  postcss-nesting@10.2.0(postcss@8.4.21):
-    dependencies:
-      '@csstools/selector-specificity': 2.1.1(postcss-selector-parser@6.0.11)(postcss@8.4.21)
-      postcss: 8.4.21
-      postcss-selector-parser: 6.0.11
-
-  postcss-normalize-charset@5.1.0(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-
-  postcss-normalize-display-values@5.1.0(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  postcss-normalize-positions@5.1.1(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  postcss-normalize-repeat-style@5.1.1(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  postcss-normalize-string@5.1.0(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  postcss-normalize-timing-functions@5.1.0(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  postcss-normalize-unicode@5.1.1(postcss@8.4.21):
-    dependencies:
-      browserslist: 4.21.5
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  postcss-normalize-url@5.1.0(postcss@8.4.21):
-    dependencies:
-      normalize-url: 6.1.0
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  postcss-normalize-whitespace@5.1.1(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  postcss-opacity-percentage@1.1.3(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-
-  postcss-ordered-values@5.1.3(postcss@8.4.21):
-    dependencies:
-      cssnano-utils: 3.1.0(postcss@8.4.21)
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  postcss-overflow-shorthand@3.0.4(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  postcss-page-break@3.0.4(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-
-  postcss-place@7.0.5(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  postcss-preset-env@7.8.3(postcss@8.4.21):
-    dependencies:
-      '@csstools/postcss-cascade-layers': 1.1.1(postcss@8.4.21)
-      '@csstools/postcss-color-function': 1.1.1(postcss@8.4.21)
-      '@csstools/postcss-font-format-keywords': 1.0.1(postcss@8.4.21)
-      '@csstools/postcss-hwb-function': 1.0.2(postcss@8.4.21)
-      '@csstools/postcss-ic-unit': 1.0.1(postcss@8.4.21)
-      '@csstools/postcss-is-pseudo-class': 2.0.7(postcss@8.4.21)
-      '@csstools/postcss-nested-calc': 1.0.0(postcss@8.4.21)
-      '@csstools/postcss-normalize-display-values': 1.0.1(postcss@8.4.21)
-      '@csstools/postcss-oklab-function': 1.1.1(postcss@8.4.21)
-      '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.21)
-      '@csstools/postcss-stepped-value-functions': 1.0.1(postcss@8.4.21)
-      '@csstools/postcss-text-decoration-shorthand': 1.0.0(postcss@8.4.21)
-      '@csstools/postcss-trigonometric-functions': 1.0.2(postcss@8.4.21)
-      '@csstools/postcss-unset-value': 1.0.2(postcss@8.4.21)
-      autoprefixer: 10.4.14(postcss@8.4.21)
-      browserslist: 4.21.5
-      css-blank-pseudo: 3.0.3(postcss@8.4.21)
-      css-has-pseudo: 3.0.4(postcss@8.4.21)
-      css-prefers-color-scheme: 6.0.3(postcss@8.4.21)
-      cssdb: 7.4.1
-      postcss: 8.4.21
-      postcss-attribute-case-insensitive: 5.0.2(postcss@8.4.21)
-      postcss-clamp: 4.1.0(postcss@8.4.21)
-      postcss-color-functional-notation: 4.2.4(postcss@8.4.21)
-      postcss-color-hex-alpha: 8.0.4(postcss@8.4.21)
-      postcss-color-rebeccapurple: 7.1.1(postcss@8.4.21)
-      postcss-custom-media: 8.0.2(postcss@8.4.21)
-      postcss-custom-properties: 12.1.11(postcss@8.4.21)
-      postcss-custom-selectors: 6.0.3(postcss@8.4.21)
-      postcss-dir-pseudo-class: 6.0.5(postcss@8.4.21)
-      postcss-double-position-gradients: 3.1.2(postcss@8.4.21)
-      postcss-env-function: 4.0.6(postcss@8.4.21)
-      postcss-focus-visible: 6.0.4(postcss@8.4.21)
-      postcss-focus-within: 5.0.4(postcss@8.4.21)
-      postcss-font-variant: 5.0.0(postcss@8.4.21)
-      postcss-gap-properties: 3.0.5(postcss@8.4.21)
-      postcss-image-set-function: 4.0.7(postcss@8.4.21)
-      postcss-initial: 4.0.1(postcss@8.4.21)
-      postcss-lab-function: 4.2.1(postcss@8.4.21)
-      postcss-logical: 5.0.4(postcss@8.4.21)
-      postcss-media-minmax: 5.0.0(postcss@8.4.21)
-      postcss-nesting: 10.2.0(postcss@8.4.21)
-      postcss-opacity-percentage: 1.1.3(postcss@8.4.21)
-      postcss-overflow-shorthand: 3.0.4(postcss@8.4.21)
-      postcss-page-break: 3.0.4(postcss@8.4.21)
-      postcss-place: 7.0.5(postcss@8.4.21)
-      postcss-pseudo-class-any-link: 7.1.6(postcss@8.4.21)
-      postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.21)
-      postcss-selector-not: 6.0.1(postcss@8.4.21)
-      postcss-value-parser: 4.2.0
-
-  postcss-pseudo-class-any-link@7.1.6(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-selector-parser: 6.0.11
-
-  postcss-reduce-initial@5.1.2(postcss@8.4.21):
-    dependencies:
-      browserslist: 4.21.5
-      caniuse-api: 3.0.0
-      postcss: 8.4.21
-
-  postcss-reduce-transforms@5.1.0(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-
-  postcss-replace-overflow-wrap@4.0.0(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-
-  postcss-selector-not@6.0.1(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-selector-parser: 6.0.11
-
-  postcss-selector-parser@6.0.11:
-    dependencies:
-      cssesc: 3.0.0
-      util-deprecate: 1.0.2
-
-  postcss-selector-parser@6.0.13:
-    dependencies:
-      cssesc: 3.0.0
-      util-deprecate: 1.0.2
-
-  postcss-svgo@5.1.0(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-value-parser: 4.2.0
-      svgo: 2.8.0
-
-  postcss-unique-selectors@5.1.1(postcss@8.4.21):
-    dependencies:
-      postcss: 8.4.21
-      postcss-selector-parser: 6.0.11
-
-  postcss-value-parser@4.2.0: {}
-
-  postcss@8.4.21:
-    dependencies:
-      nanoid: 3.3.4
-      picocolors: 1.0.0
-      source-map-js: 1.0.2
-
-  postcss@8.4.49:
-    dependencies:
-      nanoid: 3.3.8
-      picocolors: 1.1.1
-      source-map-js: 1.2.1
-
-  prelude-ls@1.2.1: {}
-
-  prettier-linter-helpers@1.0.0:
-    dependencies:
-      fast-diff: 1.2.0
-
-  prettier@3.0.1: {}
-
-  pretty-error@4.0.0:
-    dependencies:
-      lodash: 4.17.21
-      renderkid: 3.0.0
-
-  pretty-time@1.1.0: {}
-
-  process-nextick-args@2.0.1: {}
-
-  process@0.11.10: {}
-
-  proxy-addr@2.0.7:
-    dependencies:
-      forwarded: 0.2.0
-      ipaddr.js: 1.9.1
-
-  proxy-from-env@1.1.0: {}
-
-  psl@1.9.0: {}
-
-  pump@3.0.0:
-    dependencies:
-      end-of-stream: 1.4.4
-      once: 1.4.0
-
-  punycode.js@2.3.1: {}
-
-  punycode@2.3.0: {}
-
-  q@1.5.1: {}
-
-  qiniu-js@3.4.2:
-    dependencies:
-      '@babel/runtime-corejs2': 7.23.9
-      querystring: 0.2.1
-      spark-md5: 3.0.2
-
-  qiniu@7.11.0:
-    dependencies:
-      agentkeepalive: 4.5.0
-      before: 0.0.1
-      block-stream2: 2.1.0
-      crc32: 0.2.2
-      destroy: 1.2.0
-      encodeurl: 1.0.2
-      formstream: 1.3.1
-      mime: 2.6.0
-      mockdate: 3.0.5
-      tunnel-agent: 0.6.0
-      urllib: 2.41.0
-    transitivePeerDependencies:
-      - proxy-agent
-      - supports-color
-
-  qrcode@1.5.3:
-    dependencies:
-      dijkstrajs: 1.0.3
-      encode-utf8: 1.0.3
-      pngjs: 5.0.0
-      yargs: 15.4.1
-
-  qs@6.11.0:
-    dependencies:
-      side-channel: 1.0.4
-
-  qs@6.5.3: {}
-
-  querystring@0.2.1: {}
-
-  querystringify@2.2.0:
-    optional: true
-
-  queue-microtask@1.2.3: {}
-
-  quick-lru@4.0.1: {}
-
-  randombytes@2.1.0:
-    dependencies:
-      safe-buffer: 5.2.1
-
-  range-parser@1.2.1: {}
-
-  raw-body@2.5.1:
-    dependencies:
-      bytes: 3.1.2
-      http-errors: 2.0.0
-      iconv-lite: 0.4.24
-      unpipe: 1.0.0
-
-  read-pkg-up@3.0.0:
-    dependencies:
-      find-up: 2.1.0
-      read-pkg: 3.0.0
-
-  read-pkg-up@7.0.1:
-    dependencies:
-      find-up: 4.1.0
-      read-pkg: 5.2.0
-      type-fest: 0.8.1
-
-  read-pkg@3.0.0:
-    dependencies:
-      load-json-file: 4.0.0
-      normalize-package-data: 2.5.0
-      path-type: 3.0.0
-
-  read-pkg@5.2.0:
-    dependencies:
-      '@types/normalize-package-data': 2.4.1
-      normalize-package-data: 2.5.0
-      parse-json: 5.2.0
-      type-fest: 0.6.0
-
-  readable-stream@2.3.8:
-    dependencies:
-      core-util-is: 1.0.3
-      inherits: 2.0.4
-      isarray: 1.0.0
-      process-nextick-args: 2.0.1
-      safe-buffer: 5.1.2
-      string_decoder: 1.1.1
-      util-deprecate: 1.0.2
-
-  readable-stream@3.6.2:
-    dependencies:
-      inherits: 2.0.4
-      string_decoder: 1.3.0
-      util-deprecate: 1.0.2
-
-  readdirp@3.6.0:
-    dependencies:
-      picomatch: 2.3.1
-
-  rechoir@0.7.1:
-    dependencies:
-      resolve: 1.22.4
-
-  redent@3.0.0:
-    dependencies:
-      indent-string: 4.0.0
-      strip-indent: 3.0.0
-
-  regenerate-unicode-properties@10.1.0:
-    dependencies:
-      regenerate: 1.4.2
-
-  regenerate@1.4.2: {}
-
-  regenerator-runtime@0.13.11: {}
-
-  regenerator-runtime@0.14.1: {}
-
-  regenerator-transform@0.15.1:
-    dependencies:
-      '@babel/runtime': 7.22.6
-
-  regexp.prototype.flags@1.4.3:
-    dependencies:
-      call-bind: 1.0.2
-      define-properties: 1.2.0
-      functions-have-names: 1.2.3
-
-  regexpu-core@5.3.2:
-    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
-
-  regjsparser@0.9.1:
-    dependencies:
-      jsesc: 0.5.0
-
-  relateurl@0.2.7: {}
-
-  renderkid@3.0.0:
-    dependencies:
-      css-select: 4.3.0
-      dom-converter: 0.2.0
-      htmlparser2: 6.1.0
-      lodash: 4.17.21
-      strip-ansi: 6.0.1
-
-  request@2.88.2:
-    dependencies:
-      aws-sign2: 0.7.0
-      aws4: 1.12.0
-      caseless: 0.12.0
-      combined-stream: 1.0.8
-      extend: 3.0.2
-      forever-agent: 0.6.1
-      form-data: 2.3.3
-      har-validator: 5.1.5
-      http-signature: 1.2.0
-      is-typedarray: 1.0.0
-      isstream: 0.1.2
-      json-stringify-safe: 5.0.1
-      mime-types: 2.1.35
-      oauth-sign: 0.9.0
-      performance-now: 2.1.0
-      qs: 6.5.3
-      safe-buffer: 5.2.1
-      tough-cookie: 2.5.0
-      tunnel-agent: 0.6.0
-      uuid: 3.4.0
-
-  require-directory@2.1.1: {}
-
-  require-from-string@2.0.2: {}
-
-  require-main-filename@2.0.0: {}
-
-  requires-port@1.0.0: {}
-
-  resolve-cwd@3.0.0:
-    dependencies:
-      resolve-from: 5.0.0
-
-  resolve-dir@1.0.1:
-    dependencies:
-      expand-tilde: 2.0.2
-      global-modules: 1.0.0
-
-  resolve-from@4.0.0: {}
-
-  resolve-from@5.0.0: {}
-
-  resolve-global@1.0.0:
-    dependencies:
-      global-dirs: 0.1.1
-
-  resolve-pkg-maps@1.0.0: {}
-
-  resolve@1.22.1:
-    dependencies:
-      is-core-module: 2.13.0
-      path-parse: 1.0.7
-      supports-preserve-symlinks-flag: 1.0.0
-
-  resolve@1.22.4:
-    dependencies:
-      is-core-module: 2.13.0
-      path-parse: 1.0.7
-      supports-preserve-symlinks-flag: 1.0.0
-
-  restore-cursor@2.0.0:
-    dependencies:
-      onetime: 2.0.1
-      signal-exit: 3.0.7
-
-  restore-cursor@3.1.0:
-    dependencies:
-      onetime: 5.1.2
-      signal-exit: 3.0.7
-
-  retry@0.13.1: {}
-
-  reusify@1.0.4: {}
-
-  rfdc@1.3.0: {}
-
-  rimraf@2.6.3:
-    dependencies:
-      glob: 7.2.3
-
-  rimraf@3.0.2:
-    dependencies:
-      glob: 7.2.3
-
-  rollup-plugin-dts@4.2.3(rollup@2.79.1)(typescript@5.1.6):
-    dependencies:
-      magic-string: 0.26.7
-      rollup: 2.79.1
-      typescript: 5.1.6
-    optionalDependencies:
-      '@babel/code-frame': 7.18.6
-
-  rollup-plugin-esbuild@4.10.3(esbuild@0.15.18)(rollup@2.79.1):
-    dependencies:
-      '@rollup/pluginutils': 4.2.1
-      debug: 4.3.4(supports-color@9.3.1)
-      es-module-lexer: 0.9.3
-      esbuild: 0.15.18
-      joycon: 3.1.1
-      jsonc-parser: 3.2.0
-      rollup: 2.79.1
-    transitivePeerDependencies:
-      - supports-color
-
-  rollup-plugin-terser@7.0.2(rollup@2.79.1):
-    dependencies:
-      '@babel/code-frame': 7.18.6
-      jest-worker: 26.6.2
-      rollup: 2.79.1
-      serialize-javascript: 4.0.0
-      terser: 5.16.6
-
-  rollup-plugin-typescript2@0.32.1(rollup@2.79.1)(typescript@5.1.6):
-    dependencies:
-      '@rollup/pluginutils': 4.2.1
-      find-cache-dir: 3.3.2
-      fs-extra: 10.1.0
-      resolve: 1.22.4
-      rollup: 2.79.1
-      tslib: 2.6.1
-      typescript: 5.1.6
-
-  rollup@2.79.1:
-    optionalDependencies:
-      fsevents: 2.3.2
-
-  rollup@3.19.1:
-    optionalDependencies:
-      fsevents: 2.3.2
-
-  run-applescript@5.0.0:
-    dependencies:
-      execa: 5.1.1
-
-  run-async@2.4.1: {}
-
-  run-parallel@1.2.0:
-    dependencies:
-      queue-microtask: 1.2.3
-
-  rust-result@1.0.0:
-    dependencies:
-      individual: 2.0.0
-
-  rxjs@6.6.7:
-    dependencies:
-      tslib: 1.14.1
-
-  rxjs@7.8.0:
-    dependencies:
-      tslib: 2.6.1
-
-  safe-buffer@5.1.2: {}
-
-  safe-buffer@5.2.1: {}
-
-  safe-json-parse@4.0.0:
-    dependencies:
-      rust-result: 1.0.0
-
-  safe-regex-test@1.0.0:
-    dependencies:
-      call-bind: 1.0.2
-      get-intrinsic: 1.2.1
-      is-regex: 1.1.4
-
-  safer-buffer@2.1.2: {}
-
-  sass-loader@12.6.0(sass@1.59.3)(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)):
-    dependencies:
-      klona: 2.0.6
-      neo-async: 2.6.2
-      webpack: 5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)
-    optionalDependencies:
-      sass: 1.59.3
-
-  sass@1.59.3:
-    dependencies:
-      chokidar: 3.5.3
-      immutable: 4.3.0
-      source-map-js: 1.0.2
-
-  sax@1.3.0: {}
-
-  saxes@5.0.1:
-    dependencies:
-      xmlchars: 2.2.0
-    optional: true
-
-  sb-promise-queue@2.1.0: {}
-
-  sb-scandir@3.1.0:
-    dependencies:
-      sb-promise-queue: 2.1.0
-
-  schema-utils@2.7.1:
-    dependencies:
-      '@types/json-schema': 7.0.11
-      ajv: 6.12.6
-      ajv-keywords: 3.5.2(ajv@6.12.6)
-
-  schema-utils@3.1.1:
-    dependencies:
-      '@types/json-schema': 7.0.11
-      ajv: 6.12.6
-      ajv-keywords: 3.5.2(ajv@6.12.6)
-
-  schema-utils@4.0.0:
-    dependencies:
-      '@types/json-schema': 7.0.11
-      ajv: 8.12.0
-      ajv-formats: 2.1.1(ajv@8.12.0)
-      ajv-keywords: 5.1.0(ajv@8.12.0)
-
-  sdk-base@2.0.1:
-    dependencies:
-      get-ready: 1.0.0
-
-  sdp@3.2.0: {}
-
-  seemly@0.3.9: {}
-
-  select-hose@2.0.0: {}
-
-  selfsigned@2.1.1:
-    dependencies:
-      node-forge: 1.3.1
-
-  semver@5.7.1: {}
-
-  semver@6.3.0: {}
-
-  semver@6.3.1: {}
-
-  semver@7.3.7:
-    dependencies:
-      lru-cache: 6.0.0
-
-  semver@7.3.8:
-    dependencies:
-      lru-cache: 6.0.0
-
-  semver@7.5.4:
-    dependencies:
-      lru-cache: 6.0.0
-
-  send@0.18.0:
-    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
-    transitivePeerDependencies:
-      - supports-color
-
-  serialize-javascript@4.0.0:
-    dependencies:
-      randombytes: 2.1.0
-
-  serialize-javascript@5.0.1:
-    dependencies:
-      randombytes: 2.1.0
-
-  serialize-javascript@6.0.1:
-    dependencies:
-      randombytes: 2.1.0
-
-  serve-index@1.9.1:
-    dependencies:
-      accepts: 1.3.8
-      batch: 0.6.1
-      debug: 2.6.9
-      escape-html: 1.0.3
-      http-errors: 1.6.3
-      mime-types: 2.1.35
-      parseurl: 1.3.3
-    transitivePeerDependencies:
-      - supports-color
-
-  serve-static@1.15.0:
-    dependencies:
-      encodeurl: 1.0.2
-      escape-html: 1.0.3
-      parseurl: 1.3.3
-      send: 0.18.0
-    transitivePeerDependencies:
-      - supports-color
-
-  set-blocking@2.0.0: {}
-
-  setimmediate@1.0.5: {}
-
-  setprototypeof@1.1.0: {}
-
-  setprototypeof@1.2.0: {}
-
-  shallow-clone@3.0.1:
-    dependencies:
-      kind-of: 6.0.3
-
-  shebang-command@2.0.0:
-    dependencies:
-      shebang-regex: 3.0.0
-
-  shebang-regex@3.0.0: {}
-
-  shell-escape@0.2.0: {}
-
-  shell-quote@1.8.0: {}
-
-  side-channel@1.0.4:
-    dependencies:
-      call-bind: 1.0.2
-      get-intrinsic: 1.2.1
-      object-inspect: 1.12.3
-
-  signal-exit@3.0.7: {}
-
-  simple-concat@1.0.1:
-    optional: true
-
-  simple-get@3.1.1:
-    dependencies:
-      decompress-response: 4.2.1
-      once: 1.4.0
-      simple-concat: 1.0.1
-    optional: true
-
-  sirv@1.0.19:
-    dependencies:
-      '@polka/url': 1.0.0-next.21
-      mrmime: 1.0.1
-      totalist: 1.1.0
-
-  slash@1.0.0: {}
-
-  slash@3.0.0: {}
-
-  slash@4.0.0: {}
-
-  slice-ansi@3.0.0:
-    dependencies:
-      ansi-styles: 4.3.0
-      astral-regex: 2.0.0
-      is-fullwidth-code-point: 3.0.0
-
-  slice-ansi@4.0.0:
-    dependencies:
-      ansi-styles: 4.3.0
-      astral-regex: 2.0.0
-      is-fullwidth-code-point: 3.0.0
-
-  slice-ansi@5.0.0:
-    dependencies:
-      ansi-styles: 6.2.1
-      is-fullwidth-code-point: 4.0.0
-
-  socket.io-client@4.8.0:
-    dependencies:
-      '@socket.io/component-emitter': 3.1.0
-      debug: 4.3.4(supports-color@9.3.1)
-      engine.io-client: 6.6.1
-      socket.io-parser: 4.2.4
-    transitivePeerDependencies:
-      - bufferutil
-      - supports-color
-      - utf-8-validate
-
-  socket.io-msgpack-parser@3.0.2:
-    dependencies:
-      component-emitter: 1.3.1
-      notepack.io: 2.2.0
-
-  socket.io-parser@4.2.4:
-    dependencies:
-      '@socket.io/component-emitter': 3.1.0
-      debug: 4.3.4(supports-color@9.3.1)
-    transitivePeerDependencies:
-      - supports-color
-
-  sockjs@0.3.24:
-    dependencies:
-      faye-websocket: 0.11.4
-      uuid: 8.3.2
-      websocket-driver: 0.7.4
-
-  source-list-map@2.0.1: {}
-
-  source-map-js@1.0.2: {}
-
-  source-map-js@1.2.1: {}
-
-  source-map-support@0.5.21:
-    dependencies:
-      buffer-from: 1.1.2
-      source-map: 0.6.1
-
-  source-map@0.6.1: {}
-
-  sourcemap-codec@1.4.8: {}
-
-  spark-md5@3.0.2: {}
-
-  spdx-correct@3.2.0:
-    dependencies:
-      spdx-expression-parse: 3.0.1
-      spdx-license-ids: 3.0.13
-
-  spdx-exceptions@2.3.0: {}
-
-  spdx-expression-parse@3.0.1:
-    dependencies:
-      spdx-exceptions: 2.3.0
-      spdx-license-ids: 3.0.13
-
-  spdx-license-ids@3.0.13: {}
-
-  spdy-transport@3.0.0:
-    dependencies:
-      debug: 4.3.4(supports-color@9.3.1)
-      detect-node: 2.1.0
-      hpack.js: 2.1.6
-      obuf: 1.1.2
-      readable-stream: 3.6.2
-      wbuf: 1.7.3
-    transitivePeerDependencies:
-      - supports-color
-
-  spdy@4.0.2:
-    dependencies:
-      debug: 4.3.4(supports-color@9.3.1)
-      handle-thing: 2.0.1
-      http-deceiver: 1.2.7
-      select-hose: 2.0.0
-      spdy-transport: 3.0.0
-    transitivePeerDependencies:
-      - supports-color
-
-  split2@3.2.2:
-    dependencies:
-      readable-stream: 3.6.2
-
-  split@1.0.1:
-    dependencies:
-      through: 2.3.8
-
-  ssh2@1.15.0:
-    dependencies:
-      asn1: 0.2.6
-      bcrypt-pbkdf: 1.0.2
-    optionalDependencies:
-      cpu-features: 0.0.9
-      nan: 2.18.0
-
-  sshpk@1.18.0:
-    dependencies:
-      asn1: 0.2.6
-      assert-plus: 1.0.0
-      bcrypt-pbkdf: 1.0.2
-      dashdash: 1.14.1
-      ecc-jsbn: 0.1.2
-      getpass: 0.1.7
-      jsbn: 0.1.1
-      safer-buffer: 2.1.2
-      tweetnacl: 0.14.5
-
-  stable@0.1.8: {}
-
-  stackframe@1.3.4: {}
-
-  standard-version@9.5.0:
-    dependencies:
-      chalk: 2.4.2
-      conventional-changelog: 3.1.25
-      conventional-changelog-config-spec: 2.1.0
-      conventional-changelog-conventionalcommits: 4.6.3
-      conventional-recommended-bump: 6.1.0
-      detect-indent: 6.1.0
-      detect-newline: 3.1.0
-      dotgitignore: 2.1.0
-      figures: 3.2.0
-      find-up: 5.0.0
-      git-semver-tags: 4.1.1
-      semver: 7.3.8
-      stringify-package: 1.0.1
-      yargs: 16.2.0
-
-  statuses@1.5.0: {}
-
-  statuses@2.0.1: {}
-
-  std-env@3.3.2: {}
-
-  stream-http@2.8.2:
-    dependencies:
-      builtin-status-codes: 3.0.0
-      inherits: 2.0.4
-      readable-stream: 2.3.8
-      to-arraybuffer: 1.0.1
-      xtend: 4.0.2
-
-  stream-wormhole@1.1.0: {}
-
-  streamroller@3.1.5:
-    dependencies:
-      date-format: 4.0.14
-      debug: 4.3.4(supports-color@9.3.1)
-      fs-extra: 8.1.0
-    transitivePeerDependencies:
-      - supports-color
-
-  string-argv@0.3.1: {}
-
-  string-width@2.1.1:
-    dependencies:
-      is-fullwidth-code-point: 2.0.0
-      strip-ansi: 4.0.0
-
-  string-width@4.2.3:
-    dependencies:
-      emoji-regex: 8.0.0
-      is-fullwidth-code-point: 3.0.0
-      strip-ansi: 6.0.1
-
-  string-width@5.1.2:
-    dependencies:
-      eastasianwidth: 0.2.0
-      emoji-regex: 9.2.2
-      strip-ansi: 7.0.1
-
-  string.prototype.trim@1.2.7:
-    dependencies:
-      call-bind: 1.0.2
-      define-properties: 1.2.0
-      es-abstract: 1.21.2
-
-  string.prototype.trimend@1.0.6:
-    dependencies:
-      call-bind: 1.0.2
-      define-properties: 1.2.0
-      es-abstract: 1.21.2
-
-  string.prototype.trimstart@1.0.6:
-    dependencies:
-      call-bind: 1.0.2
-      define-properties: 1.2.0
-      es-abstract: 1.21.2
-
-  string_decoder@1.1.1:
-    dependencies:
-      safe-buffer: 5.1.2
-
-  string_decoder@1.3.0:
-    dependencies:
-      safe-buffer: 5.2.1
-
-  stringify-package@1.0.1: {}
-
-  strip-ansi@4.0.0:
-    dependencies:
-      ansi-regex: 3.0.1
-
-  strip-ansi@5.2.0:
-    dependencies:
-      ansi-regex: 4.1.1
-
-  strip-ansi@6.0.1:
-    dependencies:
-      ansi-regex: 5.0.1
-
-  strip-ansi@7.0.1:
-    dependencies:
-      ansi-regex: 6.0.1
-
-  strip-bom@3.0.0: {}
-
-  strip-bom@4.0.0: {}
-
-  strip-final-newline@2.0.0: {}
-
-  strip-final-newline@3.0.0: {}
-
-  strip-indent@3.0.0:
-    dependencies:
-      min-indent: 1.0.1
-
-  strip-json-comments@3.1.1: {}
-
-  strnum@1.0.5: {}
-
-  style-mod@4.1.2: {}
-
-  stylehacks@5.1.1(postcss@8.4.21):
-    dependencies:
-      browserslist: 4.21.5
-      postcss: 8.4.21
-      postcss-selector-parser: 6.0.11
-
-  supports-color@5.5.0:
-    dependencies:
-      has-flag: 3.0.0
-
-  supports-color@7.2.0:
-    dependencies:
-      has-flag: 4.0.0
-
-  supports-color@8.1.1:
-    dependencies:
-      has-flag: 4.0.0
-
-  supports-color@9.3.1: {}
-
-  supports-preserve-symlinks-flag@1.0.0: {}
-
-  svgo@2.8.0:
-    dependencies:
-      '@trysound/sax': 0.2.0
-      commander: 7.2.0
-      css-select: 4.3.0
-      css-tree: 1.1.3
-      csso: 4.2.0
-      picocolors: 1.0.0
-      stable: 0.1.8
-
-  swc-loader@0.2.3(@swc/core@1.3.84)(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)):
-    dependencies:
-      '@swc/core': 1.3.84
-      webpack: 5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)
-
-  symbol-tree@3.2.4:
-    optional: true
-
-  synckit@0.8.5:
-    dependencies:
-      '@pkgr/utils': 2.4.2
-      tslib: 2.6.1
-
-  tapable@2.2.1: {}
-
-  tar@6.1.15:
-    dependencies:
-      chownr: 2.0.0
-      fs-minipass: 2.1.0
-      minipass: 5.0.0
-      minizlib: 2.1.2
-      mkdirp: 1.0.4
-      yallist: 4.0.0
-    optional: true
-
-  temp@0.9.4:
-    dependencies:
-      mkdirp: 0.5.6
-      rimraf: 2.6.3
-
-  terser-webpack-plugin@5.3.7(@swc/core@1.3.84)(esbuild@0.15.18)(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)):
-    dependencies:
-      '@jridgewell/trace-mapping': 0.3.17
-      jest-worker: 27.5.1
-      schema-utils: 3.1.1
-      serialize-javascript: 6.0.1
-      terser: 5.16.6
-      webpack: 5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)
-    optionalDependencies:
-      '@swc/core': 1.3.84
-      esbuild: 0.15.18
-
-  terser@5.16.6:
-    dependencies:
-      '@jridgewell/source-map': 0.3.2
-      acorn: 8.8.2
-      commander: 2.20.3
-      source-map-support: 0.5.21
-
-  text-extensions@1.9.0: {}
-
-  text-table@0.2.0: {}
-
-  thenify-all@1.6.0:
-    dependencies:
-      thenify: 3.3.1
-
-  thenify@3.3.1:
-    dependencies:
-      any-promise: 1.3.0
-
-  thread-loader@3.0.4(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)):
-    dependencies:
-      json-parse-better-errors: 1.0.2
-      loader-runner: 4.3.0
-      loader-utils: 2.0.4
-      neo-async: 2.6.2
-      schema-utils: 3.1.1
-      webpack: 5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)
-
-  through2@2.0.5:
-    dependencies:
-      readable-stream: 2.3.8
-      xtend: 4.0.2
-
-  through2@4.0.2:
-    dependencies:
-      readable-stream: 3.6.2
-
-  through@2.3.8: {}
-
-  thunky@1.1.0: {}
-
-  titleize@3.0.0: {}
-
-  tmp@0.0.33:
-    dependencies:
-      os-tmpdir: 1.0.2
-
-  to-arraybuffer@1.0.1: {}
-
-  to-fast-properties@2.0.0: {}
-
-  to-regex-range@5.0.1:
-    dependencies:
-      is-number: 7.0.0
-
-  toggle-selection@1.0.6: {}
-
-  toidentifier@1.0.1: {}
-
-  totalist@1.1.0: {}
-
-  tough-cookie@2.5.0:
-    dependencies:
-      psl: 1.9.0
-      punycode: 2.3.0
-
-  tough-cookie@4.1.3:
-    dependencies:
-      psl: 1.9.0
-      punycode: 2.3.0
-      universalify: 0.2.0
-      url-parse: 1.5.10
-    optional: true
-
-  tr46@0.0.3:
-    optional: true
-
-  tr46@3.0.0:
-    dependencies:
-      punycode: 2.3.0
-    optional: true
-
-  trash@8.1.1:
-    dependencies:
-      '@sindresorhus/chunkify': 0.2.0
-      '@stroncium/procfs': 1.2.1
-      globby: 7.1.1
-      is-path-inside: 4.0.0
-      move-file: 3.1.0
-      p-map: 5.5.0
-      uuid: 8.3.2
-      xdg-trashdir: 3.1.0
-
-  treemate@0.3.11: {}
-
-  trim-newlines@3.0.1: {}
-
-  ts-loader@9.4.2(typescript@5.1.6)(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)):
-    dependencies:
-      chalk: 4.1.2
-      enhanced-resolve: 5.12.0
-      micromatch: 4.0.5
-      semver: 7.3.8
-      typescript: 5.1.6
-      webpack: 5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)
-
-  ts-node@10.9.1(@swc/core@1.3.84)(@types/node@18.15.3)(typescript@4.9.5):
-    dependencies:
-      '@cspotcode/source-map-support': 0.8.1
-      '@tsconfig/node10': 1.0.9
-      '@tsconfig/node12': 1.0.11
-      '@tsconfig/node14': 1.0.3
-      '@tsconfig/node16': 1.0.3
-      '@types/node': 18.15.3
-      acorn: 8.8.2
-      acorn-walk: 8.2.0
-      arg: 4.1.3
-      create-require: 1.1.1
-      diff: 4.0.2
-      make-error: 1.3.6
-      typescript: 4.9.5
-      v8-compile-cache-lib: 3.0.1
-      yn: 3.1.1
-    optionalDependencies:
-      '@swc/core': 1.3.84
-
-  ts-node@10.9.1(@swc/core@1.3.84)(@types/node@18.15.3)(typescript@5.1.6):
-    dependencies:
-      '@cspotcode/source-map-support': 0.8.1
-      '@tsconfig/node10': 1.0.9
-      '@tsconfig/node12': 1.0.11
-      '@tsconfig/node14': 1.0.3
-      '@tsconfig/node16': 1.0.3
-      '@types/node': 18.15.3
-      acorn: 8.8.2
-      acorn-walk: 8.2.0
-      arg: 4.1.3
-      create-require: 1.1.1
-      diff: 4.0.2
-      make-error: 1.3.6
-      typescript: 5.1.6
-      v8-compile-cache-lib: 3.0.1
-      yn: 3.1.1
-    optionalDependencies:
-      '@swc/core': 1.3.84
-
-  tsconfig-paths@3.14.2:
-    dependencies:
-      '@types/json5': 0.0.29
-      json5: 1.0.2
-      minimist: 1.2.8
-      strip-bom: 3.0.0
-
-  tslib@1.14.1: {}
-
-  tslib@2.6.1: {}
-
-  tsutils@3.21.0(typescript@5.1.6):
-    dependencies:
-      tslib: 1.14.1
-      typescript: 5.1.6
-
-  tunnel-agent@0.6.0:
-    dependencies:
-      safe-buffer: 5.2.1
-
-  tweetnacl@0.14.5: {}
-
-  type-check@0.4.0:
-    dependencies:
-      prelude-ls: 1.2.1
-
-  type-fest@0.18.1: {}
-
-  type-fest@0.20.2: {}
-
-  type-fest@0.21.3: {}
-
-  type-fest@0.6.0: {}
-
-  type-fest@0.8.1: {}
-
-  type-is@1.6.18:
-    dependencies:
-      media-typer: 0.3.0
-      mime-types: 2.1.35
-
-  typed-array-length@1.0.4:
-    dependencies:
-      call-bind: 1.0.2
-      for-each: 0.3.3
-      is-typed-array: 1.1.10
-
-  typedarray@0.0.6: {}
-
-  typescript@4.9.5: {}
-
-  typescript@5.1.6: {}
-
-  uc.micro@2.1.0: {}
-
-  uglify-js@3.17.4:
-    optional: true
-
-  unbox-primitive@1.0.2:
-    dependencies:
-      call-bind: 1.0.2
-      has-bigints: 1.0.2
-      has-symbols: 1.0.3
-      which-boxed-primitive: 1.0.2
-
-  unescape@1.0.1:
-    dependencies:
-      extend-shallow: 2.0.1
-
-  unicode-canonical-property-names-ecmascript@2.0.0: {}
-
-  unicode-match-property-ecmascript@2.0.0:
-    dependencies:
-      unicode-canonical-property-names-ecmascript: 2.0.0
-      unicode-property-aliases-ecmascript: 2.1.0
-
-  unicode-match-property-value-ecmascript@2.1.0: {}
-
-  unicode-property-aliases-ecmascript@2.1.0: {}
-
-  universalify@0.1.2: {}
-
-  universalify@0.2.0:
-    optional: true
-
-  universalify@2.0.0: {}
-
-  unpipe@1.0.0: {}
-
-  unplugin-vue-components@0.24.1(@babel/parser@7.26.3)(rollup@2.79.1)(vue@3.5.13(typescript@5.1.6)):
-    dependencies:
-      '@antfu/utils': 0.7.2
-      '@rollup/pluginutils': 5.0.2(rollup@2.79.1)
-      chokidar: 3.5.3
-      debug: 4.3.4(supports-color@9.3.1)
-      fast-glob: 3.2.12
-      local-pkg: 0.4.3
-      magic-string: 0.30.0
-      minimatch: 7.4.6
-      resolve: 1.22.1
-      unplugin: 1.3.1
-      vue: 3.5.13(typescript@5.1.6)
-    optionalDependencies:
-      '@babel/parser': 7.26.3
-    transitivePeerDependencies:
-      - rollup
-      - supports-color
-
-  unplugin@1.3.1:
-    dependencies:
-      acorn: 8.8.2
-      chokidar: 3.5.3
-      webpack-sources: 3.2.3
-      webpack-virtual-modules: 0.5.0
-
-  untildify@4.0.0: {}
-
-  update-browserslist-db@1.0.10(browserslist@4.21.5):
-    dependencies:
-      browserslist: 4.21.5
-      escalade: 3.1.1
-      picocolors: 1.0.0
-
-  uri-js@4.4.1:
-    dependencies:
-      punycode: 2.3.0
-
-  url-parse@1.5.10:
-    dependencies:
-      querystringify: 2.2.0
-      requires-port: 1.0.0
-    optional: true
-
-  url-toolkit@2.2.5: {}
-
-  urllib@2.41.0:
-    dependencies:
-      any-promise: 1.3.0
-      content-type: 1.0.5
-      debug: 2.6.9
-      default-user-agent: 1.0.0
-      digest-header: 1.1.0
-      ee-first: 1.1.1
-      formstream: 1.3.1
-      humanize-ms: 1.2.1
-      iconv-lite: 0.4.24
-      ip: 1.1.9
-      pump: 3.0.0
-      qs: 6.11.0
-      statuses: 1.5.0
-      utility: 1.18.0
-    transitivePeerDependencies:
-      - supports-color
-
-  user-home@2.0.0:
-    dependencies:
-      os-homedir: 1.0.2
-
-  util-deprecate@1.0.2: {}
-
-  utila@0.4.0: {}
-
-  utility@1.18.0:
-    dependencies:
-      copy-to: 2.0.1
-      escape-html: 1.0.3
-      mkdirp: 0.5.6
-      mz: 2.7.0
-      unescape: 1.0.1
-
-  utils-merge@1.0.1: {}
-
-  uuid@3.4.0: {}
-
-  uuid@8.3.2: {}
-
-  v8-compile-cache-lib@3.0.1: {}
-
-  validate-npm-package-license@3.0.4:
-    dependencies:
-      spdx-correct: 3.2.0
-      spdx-expression-parse: 3.0.1
-
-  vary@1.1.2: {}
-
-  vconsole@3.15.0:
-    dependencies:
-      '@babel/runtime': 7.21.0
-      copy-text-to-clipboard: 3.1.0
-      core-js: 3.29.1
-      mutation-observer: 1.0.3
-
-  vdirs@0.1.8(vue@3.5.13(typescript@5.1.6)):
-    dependencies:
-      evtd: 0.2.4
-      vue: 3.5.13(typescript@5.1.6)
-
-  verror@1.10.0:
-    dependencies:
-      assert-plus: 1.0.0
-      core-util-is: 1.0.2
-      extsprintf: 1.3.0
-
-  video.js@8.3.0:
-    dependencies:
-      '@babel/runtime': 7.21.0
-      '@videojs/http-streaming': 3.0.2(video.js@8.3.0)
-      '@videojs/vhs-utils': 4.0.0
-      '@videojs/xhr': 2.6.0
-      aes-decrypter: 4.0.1
-      global: 4.4.0
-      keycode: 2.2.0
-      m3u8-parser: 6.2.0
-      mpd-parser: 1.1.1
-      mux.js: 6.3.0
-      safe-json-parse: 4.0.0
-      videojs-contrib-quality-levels: 3.0.0(video.js@8.3.0)
-      videojs-font: 4.1.0
-      videojs-vtt.js: 0.15.4
-
-  videojs-contrib-quality-levels@3.0.0(video.js@8.3.0):
-    dependencies:
-      global: 4.4.0
-      video.js: 8.3.0
-
-  videojs-font@4.1.0: {}
-
-  videojs-vtt.js@0.15.4:
-    dependencies:
-      global: 4.4.0
-
-  vite@4.2.0(@types/node@18.15.3)(sass@1.59.3)(terser@5.16.6):
-    dependencies:
-      esbuild: 0.17.12
-      postcss: 8.4.21
-      resolve: 1.22.4
-      rollup: 3.19.1
-    optionalDependencies:
-      '@types/node': 18.15.3
-      fsevents: 2.3.2
-      sass: 1.59.3
-      terser: 5.16.6
-
-  vooks@0.2.12(vue@3.5.13(typescript@5.1.6)):
-    dependencies:
-      evtd: 0.2.4
-      vue: 3.5.13(typescript@5.1.6)
-
-  vue-demi@0.13.11(vue@3.5.13(typescript@5.1.6)):
-    dependencies:
-      vue: 3.5.13(typescript@5.1.6)
-
-  vue-demi@0.14.10(vue@3.5.13(typescript@5.1.6)):
-    dependencies:
-      vue: 3.5.13(typescript@5.1.6)
-
-  vue-eslint-parser@9.3.1(eslint@8.36.0):
-    dependencies:
-      debug: 4.3.4(supports-color@9.3.1)
-      eslint: 8.36.0
-      eslint-scope: 7.1.1
-      eslint-visitor-keys: 3.3.0
-      espree: 9.5.0
-      esquery: 1.5.0
-      lodash: 4.17.21
-      semver: 7.5.4
-    transitivePeerDependencies:
-      - supports-color
-
-  vue-i18n@9.9.1(vue@3.5.13(typescript@5.1.6)):
-    dependencies:
-      '@intlify/core-base': 9.9.1
-      '@intlify/shared': 9.9.1
-      '@vue/devtools-api': 6.5.0
-      vue: 3.5.13(typescript@5.1.6)
-
-  vue-lazyload@3.0.0: {}
-
-  vue-loader@17.2.2(@vue/compiler-sfc@3.3.4)(vue@3.5.13(typescript@5.1.6))(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)):
-    dependencies:
-      chalk: 4.1.2
-      hash-sum: 2.0.0
-      watchpack: 2.4.0
-      webpack: 5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)
-    optionalDependencies:
-      '@vue/compiler-sfc': 3.3.4
-      vue: 3.5.13(typescript@5.1.6)
-
-  vue-router@4.1.6(vue@3.5.13(typescript@5.1.6)):
-    dependencies:
-      '@vue/devtools-api': 6.5.0
-      vue: 3.5.13(typescript@5.1.6)
-
-  vue-style-loader@4.1.3:
-    dependencies:
-      hash-sum: 1.0.2
-      loader-utils: 1.4.2
-
-  vue@3.5.13(typescript@5.1.6):
-    dependencies:
-      '@vue/compiler-dom': 3.5.13
-      '@vue/compiler-sfc': 3.5.13
-      '@vue/runtime-dom': 3.5.13
-      '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.1.6))
-      '@vue/shared': 3.5.13
-    optionalDependencies:
-      typescript: 5.1.6
-
-  vueuc@0.4.64(vue@3.5.13(typescript@5.1.6)):
-    dependencies:
-      '@css-render/vue3-ssr': 0.15.14(vue@3.5.13(typescript@5.1.6))
-      '@juggle/resize-observer': 3.4.0
-      css-render: 0.15.14
-      evtd: 0.2.4
-      seemly: 0.3.9
-      vdirs: 0.1.8(vue@3.5.13(typescript@5.1.6))
-      vooks: 0.2.12(vue@3.5.13(typescript@5.1.6))
-      vue: 3.5.13(typescript@5.1.6)
-
-  w3c-hr-time@1.0.2:
-    dependencies:
-      browser-process-hrtime: 1.0.0
-    optional: true
-
-  w3c-keyname@2.2.8: {}
-
-  w3c-xmlserializer@3.0.0:
-    dependencies:
-      xml-name-validator: 4.0.0
-    optional: true
-
-  watchpack@2.4.0:
-    dependencies:
-      glob-to-regexp: 0.4.1
-      graceful-fs: 4.2.11
-
-  wave-resampler@1.0.0: {}
-
-  wbuf@1.7.3:
-    dependencies:
-      minimalistic-assert: 1.0.1
-
-  wcwidth@1.0.1:
-    dependencies:
-      defaults: 1.0.4
-
-  webidl-conversions@3.0.1:
-    optional: true
-
-  webidl-conversions@7.0.0:
-    optional: true
-
-  webpack-bundle-analyzer@4.8.0:
-    dependencies:
-      '@discoveryjs/json-ext': 0.5.7
-      acorn: 8.8.2
-      acorn-walk: 8.2.0
-      chalk: 4.1.2
-      commander: 7.2.0
-      gzip-size: 6.0.0
-      lodash: 4.17.21
-      opener: 1.5.2
-      sirv: 1.0.19
-      ws: 7.5.9
-    transitivePeerDependencies:
-      - bufferutil
-      - utf-8-validate
-
-  webpack-cli@4.10.0(webpack-bundle-analyzer@4.8.0)(webpack-dev-server@4.13.1)(webpack@5.76.2):
-    dependencies:
-      '@discoveryjs/json-ext': 0.5.7
-      '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0(webpack-bundle-analyzer@4.8.0)(webpack-dev-server@4.13.1)(webpack@5.76.2))(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))
-      '@webpack-cli/info': 1.5.0(webpack-cli@4.10.0(webpack-bundle-analyzer@4.8.0)(webpack-dev-server@4.13.1)(webpack@5.76.2))
-      '@webpack-cli/serve': 1.7.0(webpack-cli@4.10.0(webpack-bundle-analyzer@4.8.0)(webpack-dev-server@4.13.1)(webpack@5.76.2))(webpack-dev-server@4.13.1(webpack-cli@4.10.0)(webpack@5.76.2))
-      colorette: 2.0.19
-      commander: 7.2.0
-      cross-spawn: 7.0.3
-      fastest-levenshtein: 1.0.16
-      import-local: 3.1.0
-      interpret: 2.2.0
-      rechoir: 0.7.1
-      webpack: 5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)
-      webpack-merge: 5.8.0
-    optionalDependencies:
-      webpack-bundle-analyzer: 4.8.0
-      webpack-dev-server: 4.13.1(webpack-cli@4.10.0)(webpack@5.76.2)
-
-  webpack-dev-middleware@5.3.3(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)):
-    dependencies:
-      colorette: 2.0.19
-      memfs: 3.4.13
-      mime-types: 2.1.35
-      range-parser: 1.2.1
-      schema-utils: 4.0.0
-      webpack: 5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)
-
-  webpack-dev-server@4.13.1(webpack-cli@4.10.0)(webpack@5.76.2):
-    dependencies:
-      '@types/bonjour': 3.5.10
-      '@types/connect-history-api-fallback': 1.3.5
-      '@types/express': 4.17.17
-      '@types/serve-index': 1.9.1
-      '@types/serve-static': 1.15.1
-      '@types/sockjs': 0.3.33
-      '@types/ws': 8.5.4
-      ansi-html-community: 0.0.8
-      bonjour-service: 1.1.0
-      chokidar: 3.5.3
-      colorette: 2.0.19
-      compression: 1.7.4
-      connect-history-api-fallback: 2.0.0
-      default-gateway: 6.0.3
-      express: 4.18.2
-      graceful-fs: 4.2.11
-      html-entities: 2.3.3
-      http-proxy-middleware: 2.0.6(@types/express@4.17.17)
-      ipaddr.js: 2.0.1
-      launch-editor: 2.6.0
-      open: 8.4.2
-      p-retry: 4.6.2
-      rimraf: 3.0.2
-      schema-utils: 4.0.0
-      selfsigned: 2.1.1
-      serve-index: 1.9.1
-      sockjs: 0.3.24
-      spdy: 4.0.2
-      webpack-dev-middleware: 5.3.3(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))
-      ws: 8.13.0
-    optionalDependencies:
-      webpack: 5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)
-      webpack-cli: 4.10.0(webpack-bundle-analyzer@4.8.0)(webpack-dev-server@4.13.1)(webpack@5.76.2)
-    transitivePeerDependencies:
-      - bufferutil
-      - debug
-      - supports-color
-      - utf-8-validate
-
-  webpack-merge@5.8.0:
-    dependencies:
-      clone-deep: 4.0.1
-      wildcard: 2.0.0
-
-  webpack-sources@1.4.3:
-    dependencies:
-      source-list-map: 2.0.1
-      source-map: 0.6.1
-
-  webpack-sources@3.2.3: {}
-
-  webpack-virtual-modules@0.5.0: {}
-
-  webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0):
-    dependencies:
-      '@types/eslint-scope': 3.7.4
-      '@types/estree': 0.0.51
-      '@webassemblyjs/ast': 1.11.1
-      '@webassemblyjs/wasm-edit': 1.11.1
-      '@webassemblyjs/wasm-parser': 1.11.1
-      acorn: 8.8.2
-      acorn-import-assertions: 1.8.0(acorn@8.8.2)
-      browserslist: 4.21.5
-      chrome-trace-event: 1.0.3
-      enhanced-resolve: 5.12.0
-      es-module-lexer: 0.9.3
-      eslint-scope: 5.1.1
-      events: 3.3.0
-      glob-to-regexp: 0.4.1
-      graceful-fs: 4.2.11
-      json-parse-even-better-errors: 2.3.1
-      loader-runner: 4.3.0
-      mime-types: 2.1.35
-      neo-async: 2.6.2
-      schema-utils: 3.1.1
-      tapable: 2.2.1
-      terser-webpack-plugin: 5.3.7(@swc/core@1.3.84)(esbuild@0.15.18)(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0))
-      watchpack: 2.4.0
-      webpack-sources: 3.2.3
-    optionalDependencies:
-      webpack-cli: 4.10.0(webpack-bundle-analyzer@4.8.0)(webpack-dev-server@4.13.1)(webpack@5.76.2)
-    transitivePeerDependencies:
-      - '@swc/core'
-      - esbuild
-      - uglify-js
-
-  webpackbar@5.0.2(webpack@5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)):
-    dependencies:
-      chalk: 4.1.2
-      consola: 2.15.3
-      pretty-time: 1.1.0
-      std-env: 3.3.2
-      webpack: 5.76.2(@swc/core@1.3.84)(esbuild@0.15.18)(webpack-cli@4.10.0)
-
-  webrtc-adapter@8.2.2:
-    dependencies:
-      sdp: 3.2.0
-
-  websocket-driver@0.7.4:
-    dependencies:
-      http-parser-js: 0.5.8
-      safe-buffer: 5.2.1
-      websocket-extensions: 0.1.4
-
-  websocket-extensions@0.1.4: {}
-
-  webworkify-webpack@2.1.5: {}
-
-  whatwg-encoding@2.0.0:
-    dependencies:
-      iconv-lite: 0.6.3
-    optional: true
-
-  whatwg-mimetype@3.0.0:
-    optional: true
-
-  whatwg-url@10.0.0:
-    dependencies:
-      tr46: 3.0.0
-      webidl-conversions: 7.0.0
-    optional: true
-
-  whatwg-url@11.0.0:
-    dependencies:
-      tr46: 3.0.0
-      webidl-conversions: 7.0.0
-    optional: true
-
-  whatwg-url@5.0.0:
-    dependencies:
-      tr46: 0.0.3
-      webidl-conversions: 3.0.1
-    optional: true
-
-  which-boxed-primitive@1.0.2:
-    dependencies:
-      is-bigint: 1.0.4
-      is-boolean-object: 1.1.2
-      is-number-object: 1.0.7
-      is-string: 1.0.7
-      is-symbol: 1.0.4
-
-  which-module@2.0.1: {}
-
-  which-typed-array@1.1.9:
-    dependencies:
-      available-typed-arrays: 1.0.5
-      call-bind: 1.0.2
-      for-each: 0.3.3
-      gopd: 1.0.1
-      has-tostringtag: 1.0.0
-      is-typed-array: 1.1.10
-
-  which@1.3.1:
-    dependencies:
-      isexe: 2.0.0
-
-  which@2.0.2:
-    dependencies:
-      isexe: 2.0.0
-
-  wide-align@1.1.5:
-    dependencies:
-      string-width: 4.2.3
-    optional: true
-
-  wildcard@2.0.0: {}
-
-  win-release@1.1.1:
-    dependencies:
-      semver: 5.7.1
-
-  windicss-webpack-plugin@1.7.8:
-    dependencies:
-      '@windicss/plugin-utils': 1.8.10
-      debug: 4.3.4(supports-color@9.3.1)
-      get-port: 6.1.2
-      loader-utils: 2.0.4
-      lodash: 4.17.21
-      pathe: 1.1.0
-      webpack-virtual-modules: 0.5.0
-      windicss: 3.5.6
-    transitivePeerDependencies:
-      - supports-color
-
-  windicss@3.5.6: {}
-
-  word-wrap@1.2.3: {}
-
-  wordwrap@1.0.0: {}
-
-  wrap-ansi@6.2.0:
-    dependencies:
-      ansi-styles: 4.3.0
-      string-width: 4.2.3
-      strip-ansi: 6.0.1
-
-  wrap-ansi@7.0.0:
-    dependencies:
-      ansi-styles: 4.3.0
-      string-width: 4.2.3
-      strip-ansi: 6.0.1
-
-  wrappy@1.0.2: {}
-
-  ws@7.5.9: {}
-
-  ws@8.13.0: {}
-
-  ws@8.17.1: {}
-
-  xdg-basedir@4.0.0: {}
-
-  xdg-trashdir@3.1.0:
-    dependencies:
-      '@sindresorhus/df': 3.1.1
-      mount-point: 3.0.0
-      user-home: 2.0.0
-      xdg-basedir: 4.0.0
-
-  xml-name-validator@4.0.0: {}
-
-  xml2js@0.6.2:
-    dependencies:
-      sax: 1.3.0
-      xmlbuilder: 11.0.1
-
-  xmlbuilder@11.0.1: {}
-
-  xmlchars@2.2.0:
-    optional: true
-
-  xmlhttprequest-ssl@2.1.1: {}
-
-  xss@1.0.15:
-    dependencies:
-      commander: 2.20.3
-      cssfilter: 0.0.10
-
-  xtend@4.0.2: {}
-
-  y18n@4.0.3: {}
-
-  y18n@5.0.8: {}
-
-  yallist@3.1.1: {}
-
-  yallist@4.0.0: {}
-
-  yaml@1.10.2: {}
-
-  yargs-parser@18.1.3:
-    dependencies:
-      camelcase: 5.3.1
-      decamelize: 1.2.0
-
-  yargs-parser@20.2.9: {}
-
-  yargs-parser@21.1.1: {}
-
-  yargs@15.4.1:
-    dependencies:
-      cliui: 6.0.0
-      decamelize: 1.2.0
-      find-up: 4.1.0
-      get-caller-file: 2.0.5
-      require-directory: 2.1.1
-      require-main-filename: 2.0.0
-      set-blocking: 2.0.0
-      string-width: 4.2.3
-      which-module: 2.0.1
-      y18n: 4.0.3
-      yargs-parser: 18.1.3
-
-  yargs@16.2.0:
-    dependencies:
-      cliui: 7.0.4
-      escalade: 3.1.1
-      get-caller-file: 2.0.5
-      require-directory: 2.1.1
-      string-width: 4.2.3
-      y18n: 5.0.8
-      yargs-parser: 20.2.9
-
-  yargs@17.7.1:
-    dependencies:
-      cliui: 8.0.1
-      escalade: 3.1.1
-      get-caller-file: 2.0.5
-      require-directory: 2.1.1
-      string-width: 4.2.3
-      y18n: 5.0.8
-      yargs-parser: 21.1.1
-
-  yn@3.1.1: {}
-
-  yocto-queue@0.1.0: {}
+  .: {}

+ 6 - 9
postcss.config.js

@@ -1,15 +1,12 @@
 console.log(
   '\x1B[0;37;44m INFO \x1B[0m',
-  '\x1B[0;;34m ' +
-    `读取了: ${__filename.slice(__dirname.length + 1)}` +
-    ' \x1B[0m'
+  '\x1B[0;;34m ' + `读取了: postcss配置文件` + ' \x1B[0m'
 );
 
 // 把.browserslistrc的last 2 version改成last 20 version就可以看到明显效果
-module.exports = {
-  plugins: [
-    // 'autoprefixer',  // postcss-preset-env包含了autoprefixer的功能
-    'postcss-preset-env', // 简写,具体看各个插件的官网提供几种写法
-    // require('postcss-preset-env'),
-  ],
+// user-select:none
+export default {
+  plugins: {
+    'postcss-preset-env': {},
+  },
 };

+ 8 - 5
.prettierrc.js → prettier.config.js

@@ -1,16 +1,17 @@
 console.log(
   '\x1B[0;37;44m INFO \x1B[0m',
-  '\x1B[0;;34m ' +
-    `读取了: ${__filename.slice(__dirname.length + 1)}` +
-    ' \x1B[0m'
+  '\x1B[0;;34m ' + `读取了: prettier配置文件` + ' \x1B[0m'
 );
 
-module.exports = {
+/**
+ * @see https://prettier.io/docs/en/configuration.html
+ * @type {import("prettier").Config}
+ */
+const config = {
   bracketSpacing: true, // 默认为true。即要求:{ foo: bar };可改为false,即要求{foo: bar}
   singleQuote: true, // 默认为false。即要求:const a = "1";可改为true,即要求const a = '1'
   semi: true, // 默认值true,即要求在所有代码语句的末尾添加分号;可改为false,即要求仅在可能导致 ASI 失败的行的开头添加分号。
   singleAttributePerLine: true, // 默认false。即在HTML、Vue和JSX中不要每行强制执行单个属性;可改为true,即要求每行强制执行单个属性。
-
   /**
    * jsxBracketSameLine
    * 注意是多行,如果是类似这种:<a>1</a>,基本不会触发换行,因此也就不会触发这个bracketSameLine
@@ -44,3 +45,5 @@ module.exports = {
   tabWidth: 2, // 指定每个缩进级别的空格数。
   // parser: 'babel', // 指定要使用的解析器。Prettier 会自动从输入文件路径推断解析器,因此您不必更改此设置。
 };
+
+export default config;

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 9212
public/TXLivePusher-2.1.1.min.js


BIN
public/favicon.ico


+ 0 - 36
public/index.html

@@ -1,36 +0,0 @@
-<!doctype html>
-<html lang="">
-  <head>
-    <meta charset="utf-8" />
-    <meta
-      http-equiv="X-UA-Compatible"
-      content="IE=edge"
-    />
-    <meta name="viewport" />
-    <!-- B站接口获取图片资源出现403的解决方案 -->
-    <meta
-      name="referrer"
-      content="no-referrer"
-    />
-
-    <link
-      rel="icon"
-      href="<%= BASE_URL %>favicon.ico"
-    />
-    <title><%= htmlWebpackPlugin.options.title %></title>
-  </head>
-
-  <body>
-    <script
-      src="<%= BASE_URL %>TXLivePusher-2.1.1.min.js"
-      charset="utf-8"
-    ></script>
-    <noscript>
-      <strong>
-        We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work
-        properly without JavaScript enabled. Please enable it to continue.
-      </strong>
-    </noscript>
-    <div id="app"></div>
-  </body>
-</html>

+ 0 - 31
public/worker.js

@@ -1,31 +0,0 @@
-self.addEventListener('message', function (e) {
-  if (e.data.type === 'request-start-msr-loop') {
-    if (e.data.delay > 0) {
-      const timer = setInterval(function () {
-        self.postMessage({
-          type: 'response-msr-looping',
-          timer,
-        });
-      }, e.data.delay);
-      self.postMessage({
-        type: 'response-start-msr-loop',
-        timer,
-      });
-    }
-  } else if (e.data.type === 'request-start-loop') {
-    if (e.data.delay > 0) {
-      const timer = setInterval(function () {
-        self.postMessage({
-          type: 'response-looping',
-          timer,
-        });
-      }, e.data.delay);
-      self.postMessage({
-        type: 'response-start-loop',
-        timer,
-      });
-    }
-  } else if (e.data.type === 'request-clear-loop') {
-    clearInterval(e.data.timer);
-  }
-});

+ 0 - 43
script/TerminalPrintPlugin.ts

@@ -1,43 +0,0 @@
-import chalk from 'chalk';
-import { Compiler } from 'webpack';
-import WebpackDevServer from 'webpack-dev-server';
-
-const localIPv4 = WebpackDevServer.internalIPSync('v4');
-
-class TerminalPrintPlugin {
-  constructor() {}
-
-  apply(compiler: Compiler) {
-    compiler.hooks.done.tapAsync('TerminalPrintPlugin', (stats, callback) => {
-      const publicPath = stats.compilation.outputOptions.publicPath as string;
-      const port = stats.compilation.options.devServer!.port as number;
-      console.log('  App running at:');
-      console.log(
-        `- Local:      ${chalk.cyan(`http://localhost:${port}${publicPath}`)}`
-      );
-      console.log(
-        `- Network:    ${chalk.cyan(
-          `http://${localIPv4!}:${port}${publicPath}`
-        )}`
-      );
-      console.log(`- 作者微信:   ${chalk.cyan(`shuisheng9905`)}`);
-      console.log(
-        `- 付费课程:   ${chalk.cyan(`https://www.hsslive.cn/article/151`)}`
-      );
-      console.log(
-        `- 私有化部署: ${chalk.cyan(
-          `https://live.hsslive.cn/privatizationDeployment`
-        )}`
-      );
-      console.log(
-        `- 欢迎PR:     ${chalk.cyan(
-          `billd-live目前只有作者一人开发,难免有不足的地方,欢迎提PR或Issue`
-        )}`
-      );
-      console.log();
-      callback();
-    });
-  }
-}
-
-export default TerminalPrintPlugin;

+ 0 - 485
script/config/webpack.common.ts

@@ -1,485 +0,0 @@
-import FriendlyErrorsWebpackPlugin from '@soda/friendly-errors-webpack-plugin';
-import BilldHtmlWebpackPlugin, { logData } from 'billd-html-webpack-plugin';
-import CopyWebpackPlugin from 'copy-webpack-plugin';
-import ESLintPlugin from 'eslint-webpack-plugin';
-import ForkTsCheckerWebpackPlugin from 'fork-ts-checker-webpack-plugin';
-import HtmlWebpackPlugin from 'html-webpack-plugin';
-import MiniCssExtractPlugin from 'mini-css-extract-plugin';
-import { NaiveUiResolver } from 'unplugin-vue-components/resolvers';
-import ComponentsPlugin from 'unplugin-vue-components/webpack';
-import { VueLoaderPlugin } from 'vue-loader';
-// eslint-disable-next-line import/named
-import { Configuration, DefinePlugin } from 'webpack';
-import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer';
-import { merge } from 'webpack-merge';
-import WebpackBar from 'webpackbar';
-import WindiCSSWebpackPlugin from 'windicss-webpack-plugin';
-
-import {
-  analyzerEnable,
-  eslintEnable,
-  htmlWebpackPluginTitle,
-  outputDir,
-  outputStaticUrl,
-  webpackBarEnable,
-  windicssEnable,
-} from '../constant';
-import { chalkINFO, chalkWARN } from '../utils/chalkTip';
-import { resolveApp } from '../utils/path';
-
-import devConfig from './webpack.dev';
-import prodConfig from './webpack.prod';
-
-console.log(chalkINFO(`读取: ${__filename.slice(__dirname.length + 1)}`));
-
-const sassRules = (isProduction: boolean, module?: boolean) => {
-  return [
-    isProduction
-      ? {
-          loader: MiniCssExtractPlugin.loader,
-          options: {
-            publicPath: outputStaticUrl(isProduction),
-          },
-        }
-      : {
-          loader: 'vue-style-loader',
-          options: {
-            sourceMap: false,
-          },
-        },
-    {
-      loader: 'css-loader', // 默认会自动找postcss.config.js
-      options: {
-        importLoaders: 2, // https://www.npmjs.com/package/css-loader#importloaders
-        sourceMap: false,
-        modules: module
-          ? {
-              localIdentName: '[name]_[local]_[hash:base64:5]',
-            }
-          : undefined,
-      },
-    },
-    {
-      loader: 'postcss-loader', // 默认会自动找postcss.config.js
-      options: {
-        sourceMap: false,
-      },
-    },
-    {
-      loader: 'sass-loader',
-      options: {
-        sourceMap: false,
-        // 根据sass-loader9.x以后使用additionalData,9.x以前使用prependData
-        additionalData: `@use 'billd-scss/src/index.scss' as *;@import '@/assets/constant.scss';`,
-      },
-    },
-  ].filter(Boolean);
-};
-
-const cssRules = (isProduction: boolean, module?: boolean) => {
-  return [
-    isProduction
-      ? {
-          loader: MiniCssExtractPlugin.loader,
-          options: {
-            publicPath: outputStaticUrl(isProduction),
-          },
-        }
-      : {
-          loader: 'vue-style-loader',
-          options: {
-            sourceMap: false,
-          },
-        },
-    {
-      loader: 'css-loader', // 默认会自动找postcss.config.js
-      options: {
-        importLoaders: 1, // https://www.npmjs.com/package/css-loader#importloaders
-        sourceMap: false,
-        modules: module
-          ? {
-              localIdentName: '[name]_[local]_[hash:base64:5]',
-            }
-          : undefined,
-      },
-    },
-    {
-      loader: 'postcss-loader', // 默认会自动找postcss.config.js
-      options: {
-        sourceMap: false,
-      },
-    },
-  ].filter(Boolean);
-};
-
-const commonConfig = (isProduction) => {
-  const result: Configuration = {
-    entry: {
-      main: {
-        import: './src/main.ts',
-      },
-    },
-    output: {
-      clean: true, // 在生成文件之前清空 output 目录。替代clean-webpack-plugin
-      filename: 'js/[name]-[contenthash:6]-bundle.js', // 入口文件打包生成后的文件的文件名
-      /**
-       * 入口文件中,符合条件的代码,被抽离出来后生成的文件的文件名
-       * 如:动态(即异步)导入,默认不管大小,是一定会被单独抽离出来的。
-       * 如果一个模块既被同步引了,又被异步引入了,不管顺序(即不管是先同步引入再异步引入,还是先异步引入在同步引入),
-       * 这个模块会打包进bundle.js,而不会单独抽离出来。
-       */
-      chunkFilename: 'js/[name]-[contenthash:6]-bundle-chunk.js',
-      path: resolveApp(`./${outputDir}`),
-      assetModuleFilename: 'assets/[name]-[contenthash:6].[ext]', // 静态资源生成目录(不管什么资源默认都统一生成到这里,除非单独设置了generator)
-      /**
-       * webpack-dev-server 也会默认从 publicPath 为基准,使用它来决定在哪个目录下启用服务,来访问 webpack 输出的文件。
-       * 所以不管开发模式还是生产模式,output.publicPath都会生效,
-       * output的publicPath建议(或者绝大部分情况下必须)与devServer的publicPath一致。
-       * 如果不设置publicPath,它默认就约等于output.publicPath:"",到时候不管开发还是生产模式,最终引入到
-       * index.html的所有资源都会拼上这个路径,如果不设置output.publicPath,会有问题:
-       * 比如vue的history模式下,如果不设置output.publicPath,如果路由全都是/foo,/bar,/baz这样的一级路由没有问题,
-       * 因为引入的资源都是js/bundle.js,css/bundle.css等等,浏览器输入:http://localhost:8080/foo,回车访问,
-       * 引入的资源就是http://localhost:8080/js/bundle.js,http://localhost:8080/css/bundle.css,这些资源都
-       * 是在http://localhost:8080/根目录下的没问题,但是如果有这些路由:/logManage/logList,/logManage/logList/editLog,
-       * 等等超过一级的路由,就会有问题,因为没有设置output.publicPath,所以它默认就是"",此时浏览器输入:
-       * http://localhost:8080/logManage/logList回车访问,引入的资源就是http://localhost:8080/logManage/logList/js/bundle.js,
-       * 而很明显,我们的http://localhost:8080/logManage/logList/js目录下没有bundle.js这个资源(至少默认情况下是没有,除非设置了其他属性)
-       * 找不到这个资源就会报错,这种情况的路由是很常见的,所以建议默认必须手动设置output.publicPath:"/",这样的话,
-       * 访问http://localhost:8080/logManage/logList,引入的资源就是:http://localhost:8080/js/bundle.js,就不会报错。
-       * 此外,output.publicPath还可设置cdn地址。
-       */
-      publicPath: outputStaticUrl(isProduction),
-    },
-    cache: {
-      type: 'memory',
-      // type: 'filesystem',
-      // allowCollectingMemory: true, // 它在生产模式中默认为false,并且在开发模式下默认为true。https://webpack.js.org/configuration/cache/#cacheallowcollectingmemory
-      // buildDependencies: {
-      //   // 建议cache.buildDependencies.config: [__filename]在您的 webpack 配置中设置以获取最新配置和所有依赖项。
-      //   config: [
-      //     resolveApp('./script/config/webpack.common.ts'),
-      //     resolveApp('./script/config/webpack.dev.ts'),
-      //     resolveApp('./script/config/webpack.prod.ts'),
-      //     resolveApp('.browserslistrc'), // 防止修改了.browserslistrc文件后,但没修改webpack配置文件,webpack不读取最新更新后的.browserslistrc
-      //     resolveApp('babel.config.js'), // 防止修改了babel.config.js文件后,但没修改webpack配置文件,webpack不读取最新更新后的babel.config.js
-      //   ],
-      // },
-    },
-    resolve: {
-      // 解析路径
-      extensions: ['.js', '.jsx', '.ts', '.tsx', '.vue', '.mjs'], // 解析扩展名,加上.mjs是因为vant,https://github.com/youzan/vant/issues/10738
-      alias: {
-        '@': resolveApp('./src'), // 设置路径别名
-        script: resolveApp('./script'), // 设置路径别名
-        vue$: 'vue/dist/vue.runtime.esm-bundler.js', // 设置vue的路径别名
-      },
-      fallback: {
-        /**
-         * webpack5移除了nodejs的polyfill,更专注于web了?
-         * 其实webpack5之前的版本能用nodejs的polyfill,也是
-         * 和nodejs正统的api不一样,比如path模块,nodejs的path,
-         * __dirname是读取到的系统级的文件绝对路径的(即/user/xxx)
-         * 但在webpack里面使用__dirname,读取到的是webpack配置的绝对路径/
-         * 可能有用的polyfill就是crypto这些通用的模块,类似path和fs这些模
-         * 块其实都是他们的polyfill都是跑在浏览器的,只是有这些api原本的一些功能,
-         * 还是没有nodejs的能力,所以webpack5干脆就移除了这些polyfill,你可以通过
-         * 安装他们的polyfill来实现原本webpack4之前的功能,但是即使安装他们的polyfill
-         * 也只是实现api的功能,没有他们原本在node的能力
-         */
-        // path: require.resolve('path-browserify'),
-        // path: false,
-        // fs: false,
-        // child_process: false,
-      },
-    },
-    resolveLoader: {
-      // 用于解析webpack的loader
-      modules: ['node_modules'],
-    },
-    module: {
-      noParse: /^(vue|vue-router|naive-ui)$/,
-      // loader执行顺序:从下往上,从右往左
-      rules: [
-        {
-          test: /\.vue$/,
-          use: [
-            {
-              loader: 'vue-loader',
-            },
-          ],
-        },
-        {
-          test: /\.css$/,
-          // exclude: /node_modules/,
-          oneOf: [
-            {
-              resourceQuery: /module/,
-              use: cssRules(isProduction, true),
-            },
-            {
-              resourceQuery: /\?vue/,
-              use: cssRules(isProduction),
-            },
-            {
-              test: /\.module\.\w+$/,
-              use: cssRules(isProduction, true),
-            },
-            {
-              use: cssRules(isProduction),
-            },
-          ],
-          sideEffects: true, // 告诉webpack是有副作用的,不对css进行删除
-        },
-        {
-          test: /\.(sass|scss)$/,
-          // exclude: /node_modules/,
-          oneOf: [
-            {
-              resourceQuery: /module/,
-              use: sassRules(isProduction, true),
-            },
-            {
-              resourceQuery: /\?vue/,
-              use: sassRules(isProduction),
-            },
-            {
-              test: /\.module\.\w+$/,
-              use: sassRules(isProduction, true),
-            },
-            {
-              use: sassRules(isProduction),
-            },
-          ],
-          sideEffects: true,
-        },
-        {
-          test: /\.(jpg|jpeg|png|gif|svg|webp)$/,
-          type: 'asset',
-          generator: {
-            filename: 'img/[name]-[contenthash:6][ext]',
-          },
-          parser: {
-            dataUrlCondition: {
-              maxSize: 4 * 1024, // 如果一个模块源码大小小于 maxSize,那么模块会被作为一个 Base64 编码的字符串注入到包中, 否则模块文件会被生成到输出的目标目录中
-            },
-          },
-        },
-        {
-          test: /\.(eot|ttf|woff2?)$/,
-          type: 'asset/resource',
-          generator: {
-            filename: 'font/[name]-[contenthash:6][ext]',
-          },
-        },
-      ],
-    },
-    plugins: [
-      // 构建进度条
-      webpackBarEnable && new WebpackBar(),
-      // 友好的显示错误信息在终端
-      new FriendlyErrorsWebpackPlugin(),
-      new ForkTsCheckerWebpackPlugin({
-        // https://github.com/TypeStrong/fork-ts-checker-webpack-plugin
-        typescript: {
-          // extensions: {
-          //   vue: {
-          //     enabled: true,
-          //     compiler: resolveApp('./node_modules/vue/compiler-sfc/index.js'),
-          //   },
-          // },
-          diagnosticOptions: {
-            semantic: true,
-            syntactic: false,
-          },
-        },
-        /**
-         * devServer如果设置为false,则不会向 Webpack Dev Server 报告错误。
-         * 但是控制台还是会打印错误。
-         */
-        devServer: false, // 7.x版本:https://github.com/TypeStrong/fork-ts-checker-webpack-plugin/issues/723
-        // logger: {
-        //   devServer: false, // fork-ts-checker-webpack-plugin6.x版本
-        // },
-        /**
-         * async 为 false,同步的将错误信息反馈给 webpack,如果报错了,webpack 就会编译失败
-         * async 默认为 true,异步的将错误信息反馈给 webpack,如果报错了,不影响 webpack 的编译
-         */
-        async: true,
-      }),
-      // 解析vue
-      new VueLoaderPlugin(),
-      // eslint-disable-next-line
-      ComponentsPlugin({
-        // eslint-disable-next-line
-        resolvers: [NaiveUiResolver()],
-      }),
-      // windicss
-      windicssEnable && new WindiCSSWebpackPlugin(),
-      // 该插件将为您生成一个HTML5文件,其中包含使用脚本标签的所有Webpack捆绑包
-      new HtmlWebpackPlugin({
-        filename: 'index.html',
-        title: htmlWebpackPluginTitle,
-        template: resolveApp('./public/index.html'),
-        hash: true,
-        minify: isProduction
-          ? {
-              collapseWhitespace: true, // 折叠空白
-              keepClosingSlash: true, // 在单标签上保留末尾斜杠
-              removeComments: true, // 移除注释
-              removeRedundantAttributes: true, // 移除多余的属性(如:input的type默认就是text,如果写了type="text",就移除它,因为不写它默认也是type="text")
-              removeScriptTypeAttributes: true, // 删除script标签中type="text/javascript"
-              removeStyleLinkTypeAttributes: true, // 删除style和link标签中type="text/css"
-              useShortDoctype: true, // 使用html5的<!doctype html>替换掉之前的html老版本声明方式<!doctype>
-              // 上面的都是production模式下默认值。
-              removeEmptyAttributes: true, // 移除一些空属性,如空的id,classs,style等等,但不是空的就全删,比如<img alt />中的alt不会删。http://perfectionkills.com/experimenting-with-html-minifier/#remove_empty_or_blank_attributes
-              minifyCSS: true, // 使用clean-css插件删除 CSS 中一些无用的空格、注释等。
-              minifyJS: true, // 使用Terser插件优化
-            }
-          : false,
-        chunks: ['main'], // 要仅包含某些块,您可以限制正在使用的块
-      }),
-      // 注入项目信息
-      new BilldHtmlWebpackPlugin({
-        env: 'webpack5',
-      }),
-      // 将已存在的单个文件或整个目录复制到构建目录。
-      new CopyWebpackPlugin({
-        patterns: [
-          {
-            from: 'public', // 复制public目录的文件
-            // to: 'assets', //复制到output.path下的assets,不写默认就是output.path根目录
-            globOptions: {
-              ignore: [
-                // 复制到output.path时,如果output.paht已经存在重复的文件了,会报错:
-                // ERROR in Conflict: Multiple assets emit different content to the same filename md.html
-                '**/index.html', // 忽略from目录下的index.html,它是入口文件
-              ],
-            },
-          },
-        ],
-      }),
-      // new EsbuildPlugin({
-      //   target: 'esnext',
-      //   // define: {
-      //   //   DSF_FS: JSON.stringify({ d: 23 }),
-      //   //   'process.env.NODE_ENV': JSON.stringify({ d: 32 }),
-      //   //   'process.env.PUBLIC_PATdH': JSON.stringify({ f: 2 }),
-      //   //   // 'process.env.VUE_APP_RELEASE_PROJECT_NAME': JSON.stringify(
-      //   //   //   process.env.VUE_APP_RELEASE_PROJECT_NAME
-      //   //   // ),
-      //   //   // 'process.env.VUE_APP_RELEASE_PROJECT_ENV': JSON.stringify(
-      //   //   //   process.env.VUE_APP_RELEASE_PROJECT_ENV
-      //   //   // ),
-      //   //   // 'process.env.BilldHtmlWebpackPlugin': JSON.stringify(logData()),
-      //   //   // 'process.env': {
-      //   //   //   BilldHtmlWebpackPlugin: JSON.stringify(logData()),
-      //   //   //   NODE_ENV: JSON.stringify(
-      //   //   //     isProduction ? 'production' : 'development'
-      //   //   //   ),
-      //   //   //   PUBLIC_PATH: JSON.stringify(outputStaticUrl(isProduction)),
-      //   //   //   VUE_APP_RELEASE_PROJECT_NAME: JSON.stringify(
-      //   //   //     process.env.VUE_APP_RELEASE_PROJECT_NAME
-      //   //   //   ),
-      //   //   //   VUE_APP_RELEASE_PROJECT_ENV: JSON.stringify(
-      //   //   //     process.env.VUE_APP_RELEASE_PROJECT_ENV
-      //   //   //   ),
-      //   //   // },
-      //   // },
-      // }),
-      // 定义全局变量
-      new DefinePlugin({
-        BASE_URL: `${JSON.stringify(outputStaticUrl(isProduction))}`, // public下的index.html里面的favicon.ico的路径
-        'process.env': {
-          BilldHtmlWebpackPlugin: JSON.stringify(logData()),
-          NODE_ENV: JSON.stringify(isProduction ? 'production' : 'development'),
-          PUBLIC_PATH: JSON.stringify(outputStaticUrl(isProduction)),
-          VUE_APP_RELEASE_PROJECT_NAME: JSON.stringify(
-            process.env.VUE_APP_RELEASE_PROJECT_NAME
-          ),
-          VUE_APP_RELEASE_PROJECT_ENV: JSON.stringify(
-            process.env.VUE_APP_RELEASE_PROJECT_ENV
-          ),
-        },
-        __VUE_OPTIONS_API__: false,
-        __VUE_PROD_DEVTOOLS__: false,
-        __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: false,
-      }),
-      // ts类型检查
-      // feat: drop support for Vue.js:https://github.com/TypeStrong/fork-ts-checker-webpack-plugin/pull/801
-      // https://github.com/TypeStrong/fork-ts-checker-webpack-plugin/tree/v6.5.2#vuejs
-      // fork-ts-checker-webpack-plugin得配合ts-loader使用。
-      // new ForkTsCheckerWebpackPlugin({
-      //   // https://github.com/TypeStrong/fork-ts-checker-webpack-plugin
-      //   typescript: {
-      //     extensions: {
-      //       vue: {
-      //         enabled: true,
-      //         compiler: resolveApp('./node_modules/vue/compiler-sfc/index.js'),
-      //       },
-      //     },
-      //     diagnosticOptions: {
-      //       semantic: true,
-      //       syntactic: false,
-      //     },
-      //   },
-      //   /**
-      //    * devServer如果设置为false,则不会向 Webpack Dev Server 报告错误。
-      //    * 但是控制台还是会打印错误。
-      //    */
-      //   // devServer: false, // 7.x版本:https://github.com/TypeStrong/fork-ts-checker-webpack-plugin/issues/723
-      //   logger: {
-      //     devServer: false, // fork-ts-checker-webpack-plugin6.x版本
-      //   },
-      //   /**
-      //    * async 为 false,同步的将错误信息反馈给 webpack,如果报错了,webpack 就会编译失败
-      //    * async 默认为 true,异步的将错误信息反馈给 webpack,如果报错了,不影响 webpack 的编译
-      //    */
-      //   async: true,
-      // }),
-      // bundle分析
-      analyzerEnable &&
-        new BundleAnalyzerPlugin({
-          analyzerMode: 'server',
-          generateStatsFile: true,
-          statsOptions: { source: false },
-        }), // configuration.plugins should be one of these object { apply, … } | function
-      // eslint
-      eslintEnable &&
-        new ESLintPlugin({
-          extensions: ['js', 'jsx', 'ts', 'tsx', 'vue'],
-          emitError: false, // 发现的错误将始终发出,禁用设置为false.
-          emitWarning: false, // 找到的警告将始终发出,禁用设置为false.
-          failOnError: false, // 如果有任何错误,将导致模块构建失败,禁用设置为false
-          failOnWarning: false, // 如果有任何警告,将导致模块构建失败,禁用设置为false
-          cache: true,
-          cacheLocation: resolveApp('./node_modules/.cache/.eslintcache'),
-        }),
-    ].filter(Boolean),
-  };
-  return result;
-};
-
-export default (env) => {
-  return new Promise((resolve) => {
-    const isProduction = env.production;
-    process.env.NODE_ENV = isProduction ? 'production' : 'development';
-    const configPromise = Promise.resolve(
-      isProduction ? prodConfig : devConfig
-    );
-    configPromise.then(
-      (config: any) => {
-        // 根据当前环境,合并配置文件
-        const mergeConfig = merge(commonConfig(isProduction), config);
-        console.log(
-          chalkWARN(
-            `根据当前环境,合并配置文件,当前是: ${process.env.NODE_ENV!}环境`
-          )
-        );
-        resolve(mergeConfig);
-      },
-      (err) => {
-        console.log(err);
-      }
-    );
-  });
-};

+ 0 - 168
script/config/webpack.dev.ts

@@ -1,168 +0,0 @@
-import portfinder from 'portfinder';
-import { Configuration } from 'webpack';
-
-import { outputStaticUrl } from '../constant';
-import TerminalPrintPlugin from '../TerminalPrintPlugin';
-import { chalkINFO } from '../utils/chalkTip';
-import { resolveApp } from '../utils/path';
-
-console.log(chalkINFO(`读取: ${__filename.slice(__dirname.length + 1)}`));
-
-export default new Promise((resolve) => {
-  // 默认端口8000,如果被占用了,会自动递增+1
-  const defaultPort = 8000;
-  portfinder
-    .getPortPromise({
-      port: defaultPort,
-      stopPort: 9000,
-    })
-    .then((port) => {
-      const devConfig: Configuration = {
-        target: 'web',
-        // https://github.com/webpack/webpack/blob/main/lib/config/defaults.js
-        mode: 'development',
-        stats: 'none',
-        // https://webpack.docschina.org/configuration/devtool/
-        // devtool: 'eval-cheap-module-source-map',
-        devtool: 'eval', // eval,具有最高性能的开发构建的推荐选择。
-        // 这个infrastructureLogging设置参考了vuecli5,如果不设置,webpack-dev-server会打印一些信息
-        infrastructureLogging: {
-          level: 'none',
-        },
-        devServer: {
-          client: {
-            logging: 'none', // https://webpack.js.org/configuration/dev-server/#devserverclient
-          },
-          hot: true, // 启用 webpack 的热模块替换功能
-          // hot: 'only', // 要在构建失败的情况下启用热模块替换而不刷新页面作为后备,请使用hot: 'only'。但在vue项目的话,使用only会导致ts文件没有热更,得使用true
-          compress: true, // 为所有服务启用gzip 压缩
-          port, // 开发服务器端口,默认8080
-          open: false, // 告诉 dev-server 在服务器启动后打开浏览器。
-          historyApiFallback: {
-            rewrites: [
-              /**
-               * 如果publicPath设置了/abc,就不能直接设置historyApiFallback: true,这样会重定向到vue3-blog-admin根目录下的index.html
-               * publicPath设置了/abc,就重定向到/abc,这样就可以了
-               */
-              {
-                from: new RegExp(outputStaticUrl(false)),
-                to: outputStaticUrl(false),
-              },
-            ],
-          },
-          /**
-           * devServer.static提供静态文件服务器,默认是 'public' 文件夹。static: false禁用
-           * 即访问localhost:8080/a.js,其实访问的是public目录的a.js
-           */
-          // WARN 因为CopyWebpackPlugin插件会复制public的文件,所以static: false后再访问localhost:8080/a.js,其实还是能访问到public目录的a.js
-          static: {
-            watch: true, // 告诉 dev-server 监听文件。默认启用,文件更改将触发整个页面重新加载。可以通过将 watch 设置为 false 禁用。
-            publicPath: outputStaticUrl(false), // 让它和输入的静态目录对应
-            directory: resolveApp('./public/'),
-          },
-          proxy: {
-            '/api': {
-              // target: 'http://localhost:4200',
-              target: 'http://localhost:4300',
-              // target: 'https://live.hsslive.cn/aliyun-hk/',
-              secure: false, // 默认情况下(secure: true),不接受在HTTPS上运行的带有无效证书的后端服务器。设置secure: false后,后端服务器的HTTPS有无效证书也可运行
-              /**
-               * changeOrigin,是否修改请求地址的源
-               * 默认changeOrigin: false,即发请求即使用devServer的localhost:port发起的,如果后端服务器有校验源,就会有问题
-               * 设置changeOrigin: true,就会修改发起请求的源,将原本的localhost:port修改为target,这样就可以通过后端服务器对源的校验
-               */
-              changeOrigin: true,
-              pathRewrite: {
-                '^/api': '', // 效果:/api/link/list ==> http://localhost:4300/link/list
-                // '^/api': '/admin/', // 效果:/api/link/list ==> http://localhost:4300/admin/link/list
-              },
-            },
-            '/prodapi': {
-              target: 'https://live.hsslive.cn',
-              secure: false,
-              changeOrigin: true,
-              pathRewrite: {
-                '^/prodapi': '/api/',
-              },
-            },
-          },
-        },
-        module: {
-          rules: [
-            {
-              test: /.(ts|tsx)$/,
-              exclude: /node_modules/,
-              use: [
-                {
-                  loader: 'swc-loader',
-                  options: {
-                    jsc: {
-                      parser: {
-                        syntax: 'typescript',
-                        tsx: true,
-                      },
-                    },
-                  },
-                },
-              ],
-            },
-            {
-              test: /.(js|jsx|mjs|cjs)$/,
-              exclude: /node_modules/,
-              use: [
-                {
-                  loader: 'swc-loader',
-                  options: {
-                    jsc: {
-                      parser: {
-                        syntax: 'ecmascript',
-                        jsx: true,
-                      },
-                    },
-                  },
-                },
-              ],
-            },
-            // {
-            //   test: /\.(js|mjs|jsx|ts|tsx)$/,
-            //   exclude: /node_modules/,
-            //   use: [
-            //     {
-            //       loader: 'esbuild-loader',
-            //       options: {
-            //         loader: 'tsx', // Remove this if you're not using JSX
-            //         target: 'esnext', // Syntax to compile to (see options below for possible values)
-            //       },
-            //     },
-            //   ],
-            // },
-          ],
-        },
-        // @ts-ignore
-        plugins: [
-          // 终端打印调试地址
-          new TerminalPrintPlugin(),
-        ].filter(Boolean),
-        optimization: {
-          /**
-           * 官网解释:告知 webpack 去辨识 package.json 中的 副作用 标记或规则,
-           * 以跳过那些当导出不被使用且被标记不包含副作用的模块。'flag' 值在非生产环境默认使用。
-           * 个人理解:flag,即如果package.json有标识就会用它的标识,
-           * 但不意味着你的项目的package.json就得设置sideEffects,你的项目不设置,它也会对你
-           * 项目里面用到的node_modules里面的包的package.json做检查。
-           * 设置true的话,还会分析源代码的副作用?但测试结果貌似不会,可能我理解有问题,已经
-           * 提了issue:https://github.com/webpack/webpack/issues/16314
-           * 设置false的话,即不会检查package.json的sideEffects字段,把所有模块都当成有副作
-           * 用的(即使某个包的package.json设置sideEffects为false),因为sideEffects并不
-           * 是npm的package.json合法字段,只是写给webpack识别用的而已
-           */
-          // sideEffects: true,
-          sideEffects: 'flag',
-        },
-      };
-      resolve(devConfig);
-    })
-    .catch((error) => {
-      console.log(error);
-    });
-});

+ 0 - 240
script/config/webpack.prod.ts

@@ -1,240 +0,0 @@
-import PreloadPlugin from '@vue/preload-webpack-plugin';
-// import { version as axiosVersion } from 'axios/package.json';
-import CompressionPlugin from 'compression-webpack-plugin';
-import CssMinimizerPlugin from 'css-minimizer-webpack-plugin';
-import HtmlWebpackTagsPlugin from 'html-webpack-tags-plugin';
-import MiniCssExtractPlugin from 'mini-css-extract-plugin';
-// import { version as piniaVersion } from 'pinia/package.json';
-import TerserPlugin from 'terser-webpack-plugin';
-// import { version as vueDemiVersion } from 'vue-demi/package.json';
-// import { version as vueRouterVersion } from 'vue-router/package.json';
-// import { version as vueVersion } from 'vue/package.json';
-import { Configuration } from 'webpack';
-
-import { gzipEnable } from '../constant';
-import { chalkINFO } from '../utils/chalkTip';
-
-console.log(chalkINFO(`读取: ${__filename.slice(__dirname.length + 1)}`));
-
-const prodConfig: Configuration = {
-  mode: 'production',
-  devtool: false,
-  // externals: {
-  //   vue: 'Vue',
-  //   'vue-router': 'VueRouter',
-  //   pinia: 'Pinia',
-  //   axios: 'axios',
-  // },
-  optimization: {
-    /**
-     * splitChunks属性,如果设置了mode: 'production',会有默认行为,具体看官网
-     * 但即使没有设置mode: 'production',也没有手动添加splitChunks属性,默认还是会添加splitChunks的部分行为,
-     * 比如:splitChunks.chunks:'async'等等,即会将异步代码抽离!
-     */
-    splitChunks: {
-      // 对入口文件进行代码分离
-      // chunks: 'all',  //async,initial,all
-      // minSize: 20 * 1024, //生成 chunk 的最小体积。默认:20000(19.5kb)
-      /**
-       * maxSize:尝试将大于maxSize的chunk分割成较小的部分chunks。
-       * 官网写的默认值是0,但是,实际测试:如果在chunks:async的时候,确实这个属性会生效,会将异步代码配合minSize进行抽离;
-       * 但是如果在chunks:initial或all的时候,如果不手动添加maxSize属性,就不会将同步代码配合minSize进行抽离!
-       * 因此,如果希望maxSize可以对同步和异步代码都进行分离,就手动设置maxSize:0,或者手动设置maxSize为自己需要设置的值,
-       * 但一定不能不写这个maxSize!最起码也得写一个maxSize:0,虽然这样写会报警告,或者直接写maxSize的值和minSize值一样!
-       */
-      // maxSize: 0,   //不写maxSize默认就是0,这里手动设置0
-      // maxSize: 30 * 1024,
-      // minRemainingSize: 0, //???
-      // minChunks: 1, //模块被不同entry引用的次数大于等于才能分割。
-      // maxAsyncRequests: 30, //按需加载时的最大并行请求数。默认:30
-      // maxInitialRequests: 30, //按需加载时的最大并行请求数。默认:30
-      /**
-       * enforceSizeThreshold:强制执行拆分的体积阈值和其他限制(minRemainingSize,maxAsyncRequests,maxInitialRequests)将被忽略。
-       * 即拆分的包大小范围允许在这个阈值范围,即设置minSize:20 * 1024,enforceSizeThreshold: 10 * 1024,
-       * 允许拆分的包在10kb-30kb之间!
-       */
-      // enforceSizeThreshold: 1 * 1024,  //默认:50000byte
-      /**
-       * 不建议全局设置filename,因为如果缓存组没有手动设置filename,默认缓存组会继承全局
-       * 的filename,这样在某些情况会显得很奇葩,比如:全局设置了chunks:'async',filename:'[id]-asyncChunks.js',
-       * 而缓存组设置了一个chunks:'initial',且没有设置它的filename,那么最终打包会先匹配缓存组,然后匹配
-       * 到同步代码就抽离,然后设置filename,由于这个缓存组没有设置它的filename,因此会继承全局的filename,
-       * 因此就会把同步代码抽离后叫[id]-asyncChunks.js,虽然还是一样把代码抽离出来了,但是
-       * 抽离出来的文件和文件名"货不对板",做不到见名知意,这样就很别扭了。因此如果设置设置了全局的filename,那
-       * 么最好就是每一个缓存组都设置自己的filename,这样就可以和全局的进行区分了
-       */
-      // filename: "[id]-splitChunks.js", //默认[name]-bundle.js
-      /**
-       * 缓存组可以继承和/或覆盖来自 splitChunks.* 的任何选项
-       * 即如果匹配到缓存缓存组里的某一个,如vendor,vendor里的设置会对splitChunks的设置进行继承或覆盖
-       * 即vendor里没有设置chunks,vendor就会继承splitChunks的chunks,vendor设置了filename,会覆盖splitChunks的filename
-       */
-      cacheGroups: {
-        // cacheGroups里的优先级默认比外面的高
-        // defaultVendors:false,  //禁用默认webpack默认设置的defaultVendors缓存组
-        // default:false, //禁用默认webpack默认设置的default缓存组
-        defaultVendors: {
-          // 重写默认的defaultVendors
-          chunks: 'initial',
-          // minSize: 50 * 1024,
-          maxSize: 100 * 1024,
-          test: /[\\/]node_modules[\\/]/,
-          // filename: 'js/[name]-defaultVendors.js',
-          filename: 'js/[name]-[contenthash:6]-defaultVendors.js',
-          priority: -10,
-        },
-        default: {
-          // 重写默认的default
-          chunks: 'all',
-          maxSize: 100 * 1024,
-          filename: 'js/[name]-[contenthash:6]-default.js',
-          minChunks: 2, // 至少被minChunks个入口文件引入了minChunks次。
-          priority: -20,
-        },
-      },
-    },
-    usedExports: true, // production模式或者不设置usedExports,它默认就是true。usedExports的目的是标注出来哪些函数是没有被使用 unused,会结合Terser进行处理
-    sideEffects: true, // webpack.dev.ts有注释
-    minimize: true, // 是否开启Terser,默认就是true,设置false后,不会压缩和转化
-    minimizer: [
-      new TerserPlugin({
-        parallel: true, // 使用多进程并发运行以提高构建速度
-        extractComments: false, // 默认true,会将/^\**!|@preserve|@license|@cc_on/i的注释提取到单独的文件中
-        // Terser 压缩配置
-        terserOptions: {
-          parse: {
-            // 注意:terserOptions.parse被标记了deprecated。
-          },
-          compress: {
-            // defaults:true,默认true,传递false禁用大多数默认启用的compress转换
-            arguments: true, // 默认false,尽可能将参数[index]替换为函数参数名
-            dead_code: true, // 默认true,删除无法访问的代码(比如return后面的语句)
-            toplevel: false, // 默认false,在顶级作用域中删除未引用的函数("funcs")和/或变量("vars"), 设置true表示同时删除未引用的函数和变量
-            keep_classnames: false, // 默认false,传递true以防止terser丢弃类名
-            keep_fnames: false, // 默认false,传递true以防止terser丢弃函数名
-            drop_console: false, // 默认false,设置true会删掉丢掉对console.*函数的调用
-            // pure_funcs: ['console.log'], // 告诉terser,console.log没有副作用,terser会将它删除
-          },
-          /**
-           * mangle,默认值true,会将keep_classnames,keep_fnames,toplevel等等mangle options的所有选项设为true。
-           * 传递false以跳过篡改名称,或者传递一个对象来指定篡改选项
-           */
-          mangle: true,
-          toplevel: false, // 注意:terserOptions.toplevel被标记了deprecated。默认false,如果希望启用顶级变量和函数名修改,并删除未使用的变量和函数,则设置为true。
-          keep_classnames: true, // 默认undefined,传递true以防止丢弃或混淆类名。
-          keep_fnames: false, // 默认false,传递true以防止函数名被丢弃或混淆。
-          // TODO 外层的keep_classnames和keep_fnames和compress的有啥区别or优先级?
-        },
-      }),
-      new CssMinimizerPlugin({
-        parallel: true, // 使用多进程并发执行,提升构建速度。
-      }), // css压缩,去除无用的空格等等
-    ],
-    // runtimeChunk: {
-    //   name: 'runtime'
-    // }
-  },
-  module: {
-    rules: [
-      {
-        test: /\.jsx?$/,
-        exclude: /node_modules/,
-        use: [
-          // 'thread-loader',
-          {
-            loader: 'babel-loader',
-            options: {
-              cacheDirectory: true,
-              cacheCompression: false, // https://github.com/facebook/create-react-app/issues/6846
-            },
-          },
-        ],
-      },
-      {
-        test: /\.tsx?$/,
-        exclude: /node_modules/,
-        use: [
-          {
-            loader: 'babel-loader',
-            options: {
-              cacheDirectory: true,
-              cacheCompression: false, // https://github.com/facebook/create-react-app/issues/6846
-            },
-          },
-          {
-            loader: 'ts-loader',
-            options: {
-              appendTsxSuffixTo: ['\\.vue$'],
-              // If you want to speed up compilation significantly you can set this flag. https://www.npmjs.com/package/ts-loader#transpileonly
-              transpileOnly: true,
-              happyPackMode: false,
-            },
-          },
-        ],
-      },
-    ],
-  },
-  plugins: [
-    // http压缩
-    gzipEnable &&
-      new CompressionPlugin({
-        test: /\.(css|js)$/i,
-        threshold: 10 * 1024, // 大于10k的文件才进行压缩
-        minRatio: 0.8, // 只有压缩比这个比率更好的资产才会被处理(minRatio =压缩大小/原始大小),即压缩如果达不到0.8就不会进行压缩
-        algorithm: 'gzip', // 压缩算法
-      }),
-    // 注入script或link
-    new HtmlWebpackTagsPlugin({
-      append: false,
-      publicPath: '', // 默认会拼上output.publicPath,因为我们引入的是cdn的地址,因此不需要拼上output.publicPath,直接publicPath:'',这样就约等于拼上空字符串''
-      links: [],
-      // scripts: [
-      //   `https://unpkg.com/vue@${vueVersion}/dist/vue.global.prod.js`,
-      //   `https://unpkg.com/vue-router@${vueRouterVersion}/dist/vue-router.global.prod.js`,
-      //   `https://unpkg.com/axios@${axiosVersion}/dist/axios.min.js`,
-      //   `https://unpkg.com/vue-demi@${vueDemiVersion}/lib/index.iife.js`,
-      //   `https://unpkg.com/pinia@${piniaVersion}/dist/pinia.iife.prod.js`,
-      // ],
-    }),
-    // 将 CSS 提取到单独的文件中
-    new MiniCssExtractPlugin({
-      /**
-       * Options similar to the same options in webpackOptions.output
-       * all options are optional
-       */
-      filename: 'css/[name]-[contenthash:6].css',
-      chunkFilename: 'css/[id]-[contenthash:6].css',
-      ignoreOrder: false, // Enable to remove warnings about conflicting order
-    }),
-    // Css TreeShaking
-    // new PurgeCssPlugin({
-    //   /**
-    //    * 实际测试有一些bug,比如html里面有ul这个元素,css里面的.ul{},#ul{},ul{}都会打包进去???
-    //    * 在js文件里如果有给元素添加类,但是注释了,如:// divEle.className='test123',但是这个.test123一样会打包进去,得手动删除这行注释代码才行!
-    //    * 而且貌似不能对.vue文件进行treeShaking,而且构建出来的css文件会空白,没有任何内容,所以暂时不用这个插件了
-    //    */
-    //   paths: glob.sync(`${path.resolve(__dirname, '../src')}/**/*`, {
-    //     nodir: true,
-    //   }),
-    //   safelist: function () {
-    //     return {
-    //       standard: ['body', 'html'],
-    //     };
-    //   },
-    // }),
-    // 预加载
-    new PreloadPlugin({
-      rel: 'preload',
-      include: 'initial',
-      fileBlacklist: [/\.map$/, /hot-update\.js$/],
-    }),
-    // 预获取
-    new PreloadPlugin({
-      rel: 'prefetch',
-      include: 'asyncChunks',
-    }),
-    // new webpack.optimize.ModuleConcatenationPlugin(), //作用域提升。!!!在使用cdn时,axios有问题,先不用!
-  ].filter(Boolean),
-};
-
-export default prodConfig;

+ 0 - 19
script/constant.ts

@@ -1,19 +0,0 @@
-export const APP_NAME = process.env.VUE_APP_RELEASE_PROJECT_NAME;
-export const APP_ENV = process.env.VUE_APP_RELEASE_PROJECT_ENV;
-export const PUBLIC_PATH = process.env.PUBLIC_PATH;
-export const NODE_ENV = process.env.NODE_ENV;
-
-export const outputDir = 'dist'; // 输出目录名称
-export const eslintEnable = false; // 是否开启eslint(开发环境会读取它),会影响热更新速度,这里只是关闭了webpack的eslint插件,但可以依靠编辑器的eslint提示。
-export const webpackBarEnable = false; // 是否开启WebpackBar(开发环境会读取它),只要是插件就会影响构建速度,开发环境关掉它吧
-export const analyzerEnable = false; // 是否开启Webpack包分析
-export const gzipEnable = false; // 是否开启http压缩
-export const windicssEnable = false; // 是否开启windicss
-export const htmlWebpackPluginTitle = 'billd-live'; // htmlWebpackPlugin的标题
-
-export const outputStaticUrl = (isProduction: boolean) => {
-  if (isProduction) {
-    return 'https://resource.hsslive.cn/billd-live/client/dist/';
-  }
-  return '/';
-};

+ 0 - 13
script/utils/chalkTip.ts

@@ -1,13 +0,0 @@
-import nodeChalk from 'chalk';
-import nodeEmoji from 'node-emoji';
-
-export const emoji = nodeEmoji;
-export const chalk = nodeChalk;
-export const chalkINFO = (v) =>
-  `${chalk.bgBlueBright.black(' INFO ')} ${chalk.blueBright(v)}`;
-export const chalkSUCCESS = (v) =>
-  `${chalk.bgGreenBright.black(' SUCCESS ')} ${chalk.greenBright(v)}`;
-export const chalkERROR = (v) =>
-  `${chalk.bgRedBright.black(' ERROR ')} ${chalk.redBright(v)}`;
-export const chalkWARN = (v) =>
-  `${chalk.bgHex('#FFA500').black(' WARN ')} ${chalk.hex('#FFA500')(v)}`;

+ 0 - 5
script/utils/path.ts

@@ -1,5 +0,0 @@
-import path from 'path';
-
-const appDir = process.cwd();
-
-export const resolveApp = (relativePath) => path.resolve(appDir, relativePath);

+ 2 - 2
src/components/Avatar/index.vue

@@ -6,12 +6,12 @@
     <div class="cycle-wrap">
       <div
         v-if="url && url !== ''"
-        class="avatar"
         v-lazy:background-image="url"
+        class="avatar"
       ></div>
       <div
-        class="avatar default"
         v-else
+        class="avatar default"
       ></div>
       <template v-if="living && !disableLiving">
         <div class="cycle cycle-1"></div>

+ 2 - 2
src/components/FloatTip/index.vue

@@ -32,10 +32,10 @@ const show = ref(false);
 
 withDefaults(
   defineProps<{
-    txt: string;
+    txt?: string;
     maxLen: number;
   }>(),
-  {}
+  { txt: '' }
 );
 
 function handleMousemove(e: MouseEvent) {

+ 1 - 1
src/components/LongList/index.vue

@@ -23,8 +23,8 @@
       {{ t('common.allLoaded') }}
     </div>
     <div
-      class="bottom-ref"
       ref="bottomRef"
+      class="bottom-ref"
     ></div>
   </div>
 </template>

+ 0 - 6
src/components/NaiveMessage/index.vue

@@ -2,12 +2,6 @@
   <div></div>
 </template>
 
-<script lang="ts">
-export default {
-  name: 'naiveuiMessage',
-};
-</script>
-
 <script lang="ts" setup>
 import { useMessage } from 'naive-ui';
 

+ 0 - 6
src/components/NaiveModal/index.vue

@@ -2,12 +2,6 @@
   <div></div>
 </template>
 
-<script lang="ts">
-export default {
-  name: 'naiveuiModal',
-};
-</script>
-
 <script lang="ts" setup>
 import { useModal } from 'naive-ui';
 

+ 1 - 1
src/components/PayCourse/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div
-    class="pay-course"
     v-if="show"
+    class="pay-course"
   >
     <img
       src="@/assets/img/pay-course.webp"

+ 3 - 3
src/components/QrPay/index.vue

@@ -7,8 +7,8 @@
       {{ t('common.payMoney', { money: formatMoney(props.money!) }) }}
     </div>
     <div
-      class="qrcode-wrap"
       v-loading="loading"
+      class="qrcode-wrap"
     >
       <img
         v-if="aliPayBase64 !== ''"
@@ -39,8 +39,8 @@
           {{ t('common.aliPayScanTip') }}
         </div>
         <div
-          class="expr"
           v-if="!isExpired"
+          class="expr"
         >
           {{
             t('common.aliPayScanTip', {
@@ -54,8 +54,8 @@
           }})
         </div>
         <div
-          class="expr"
           v-else
+          class="expr"
         >
           <span
             class="link"

+ 2 - 2
src/components/RenderMarkdown/index.vue

@@ -15,8 +15,8 @@ import 'md-editor-v3/lib/preview.css';
 
 const props = withDefaults(
   defineProps<{
-    md: string;
-    height: number;
+    md?: string;
+    height?: number;
   }>(),
   {
     md: '',

+ 1 - 1
src/components/SystemModal/index.vue

@@ -10,7 +10,7 @@
       >
         <div>
           欢迎进入直播间,遇到问题请提<a
-            href="https://github.com/galaxy-s10/billd-live/issues/new"
+            href="https://github.com/billd-project/live/issues/new"
             target="_blank"
           >
             issue

+ 13 - 13
src/components/VideoControls/index.vue

@@ -51,26 +51,26 @@
 
     <div class="right">
       <div
-        class="item fps"
         v-if="props.control?.fps && appStore.videoControlsValue.fps"
+        class="item fps"
       >
         {{ appStore.videoControlsValue.fps }}帧
       </div>
       <div
-        class="item kbs"
         v-if="props.control?.kbs && appStore.videoControlsValue.kbs"
+        class="item kbs"
       >
         {{ appStore.videoControlsValue.kbs }}KB/s
       </div>
       <div
-        class="item resolution"
         v-if="props.control?.resolution && resolution"
+        class="item resolution"
       >
         {{ resolution }}
       </div>
       <div
-        class="item line"
         v-if="props.control?.line"
+        class="item line"
       >
         <Dropdown
           :positon="'center'"
@@ -82,10 +82,10 @@
           <template #list>
             <div class="list">
               <div
-                class="iten"
-                :class="{ active: appStore.liveLine === item }"
                 v-for="item in lineList"
                 :key="item"
+                class="iten"
+                :class="{ active: appStore.liveLine === item }"
                 @click="changeLiveLine(item)"
               >
                 {{ item }}
@@ -95,8 +95,8 @@
         </Dropdown>
       </div>
       <div
-        class="item speed"
         v-if="props.control?.speed"
+        class="item speed"
       >
         <Dropdown
           :positon="'center'"
@@ -119,8 +119,8 @@
         </Dropdown>
       </div>
       <div
-        class="item render"
         v-if="props.control?.renderMode"
+        class="item render"
       >
         <Dropdown
           :positon="'center'"
@@ -132,10 +132,10 @@
           <template #list>
             <div class="list">
               <div
-                class="iten"
-                :class="{ active: appStore.videoControls?.renderMode === item }"
                 v-for="item in LiveRenderEnum"
                 :key="item"
+                class="iten"
+                :class="{ active: appStore.videoControls?.renderMode === item }"
                 @click="changeRenderMode(item)"
               >
                 {{ item }}
@@ -145,8 +145,8 @@
         </Dropdown>
       </div>
       <div
-        class="item"
         v-if="props.control?.pipMode"
+        class="item"
       >
         <span
           class="txt"
@@ -158,8 +158,8 @@
         </span>
       </div>
       <div
-        class="item"
         v-if="props.control?.pageFullMode"
+        class="item"
       >
         <span
           class="txt"
@@ -173,8 +173,8 @@
         </span>
       </div>
       <div
-        class="item"
         v-if="props.control?.fullMode"
+        class="item"
       >
         <span
           class="txt"

+ 10 - 8
src/constant.ts

@@ -2,6 +2,8 @@ import { GoodsTypeEnum, MediaTypeEnum } from '@/interface';
 import { prodDomain, QINIU_KODO } from '@/spec-config';
 import { LiveRoomTypeEnum } from '@/types/ILiveRoom';
 
+export const NODE_ENV = process.env.NODE_ENV;
+
 export const QQ_CLIENT_ID = `101958191`;
 export const QQ_OAUTH_URL = `https://graph.qq.com/oauth2.0`;
 export const QQ_REDIRECT_URI = `https://live.${prodDomain}/oauth/qq_login`;
@@ -57,18 +59,18 @@ export const COMMON_URL = {
     live: {
       flutter: {
         android: `${QINIU_KODO.hssblog.url}/billd-live/download/billd-live-v0.0.4.apk`,
-        github: 'https://github.com/galaxy-s10/billd-live-flutter',
+        github: 'https://github.com/billd-project/live-flutter',
       },
       reactNative: {
         android: '',
-        github: 'https://github.com/galaxy-s10/billd-live-react-native',
+        github: 'https://github.com/billd-project/live-react-native',
       },
       kotlin: {
         android: '',
-        github: 'https://github.com/galaxy-s10/billd-live-kotlin',
+        github: 'https://github.com/billd-project/live-kotlin',
       },
       electron: {
-        github: 'https://github.com/galaxy-s10/billd-live-electron',
+        github: 'https://github.com/billd-project/live-electron',
         windows: ``,
         macOS: ``,
       },
@@ -87,10 +89,10 @@ export const COMMON_URL = {
     },
   },
   release: {
-    flutter: 'https://github.com/galaxy-s10/billd-live-flutter',
-    kotlin: 'https://github.com/galaxy-s10/billd-live-kotlin',
-    reactNative: 'https://github.com/galaxy-s10/billd-live-react-native',
-    electron: 'https://github.com/galaxy-s10/billd-live-electron',
+    flutter: 'https://github.com/billd-project/live-flutter',
+    kotlin: 'https://github.com/billd-project/live-kotlin',
+    reactNative: 'https://github.com/billd-project/live-react-native',
+    electron: 'https://github.com/billd-project/live-electron',
     desk: 'https://github.com/galaxy-s10/billd-desk',
   },
 };

+ 0 - 121
src/hooks/tipModal/index.vue

@@ -1,121 +0,0 @@
-<template>
-  <div
-    v-if="show"
-    class="useTip-wrap"
-  >
-    <Modal
-      :title="title"
-      :mask-closable="maskClosable"
-      :hidden-close="hiddenClose"
-      @close="handleCancel()"
-      :width="width"
-    >
-      <div ref="domRef"></div>
-      <template v-if="typeof content === 'string'">{{ content }}</template>
-      <template #footer>
-        <div class="footer">
-          <div
-            v-if="!hiddenCancel"
-            class="btn return"
-            @click="handleCancel()"
-          >
-            {{ cancelButtonText }}
-          </div>
-          <div
-            v-if="!hiddenConfirm"
-            :class="{ btn: 1, next: 1, hiddenCancel }"
-            @click="handleOk()"
-          >
-            {{ confirmButtonText }}
-          </div>
-        </div>
-      </template>
-    </Modal>
-  </div>
-</template>
-
-<script lang="ts">
-import { VNode, defineComponent, ref, render, watch } from 'vue';
-
-export default defineComponent({
-  name: 'tipModal',
-  emits: ['ok', 'cancel'],
-  setup() {
-    const title = ref('提示');
-    const cancelButtonText = ref('取消');
-    const confirmButtonText = ref('确认');
-    const width = ref('320px');
-    const content = ref<string | VNode>('');
-    const show = ref(false);
-    const hiddenCancel = ref(false);
-    const hiddenClose = ref(false);
-    const hiddenConfirm = ref(false);
-    const maskClosable = ref(true);
-    const domRef = ref();
-    watch([() => show.value, () => domRef.value], ([val1, val2]) => {
-      if (!val1 || !val2) return;
-      if (typeof content.value !== 'string') {
-        render(content.value, domRef.value);
-      }
-    });
-    function handleCancel(cb?) {
-      cb?.();
-    }
-    function handleOk(cb?) {
-      cb?.();
-    }
-    return {
-      title,
-      width,
-      content,
-      show,
-      hiddenCancel,
-      hiddenClose,
-      hiddenConfirm,
-      maskClosable,
-      domRef,
-      handleCancel,
-      handleOk,
-      confirmButtonText,
-      cancelButtonText,
-    };
-  },
-});
-</script>
-
-<style lang="scss" scoped>
-.useTip-wrap {
-  .footer {
-    display: flex;
-    align-items: center;
-    justify-content: space-between;
-    .btn {
-      box-sizing: border-box;
-      width: 130px;
-      height: 44px;
-      border-radius: 100px;
-      text-align: center;
-      line-height: 44px;
-      cursor: pointer;
-
-      user-select: none;
-
-      &.return {
-        border: 1px solid rgba(153, 153, 153, 0.3);
-        background: #ffffff;
-        color: #666;
-        font-size: 14px;
-      }
-      &.next {
-        background: $theme-color-gold;
-        color: white;
-        font-weight: 700;
-        font-size: 16px;
-        &.hiddenCancel {
-          width: 100%;
-        }
-      }
-    }
-  }
-}
-</style>

+ 0 - 63
src/hooks/use-common.ts

@@ -1,63 +0,0 @@
-import { windowReload } from 'billd-utils';
-
-import { useTip } from '@/hooks/use-tip';
-import { getLastBuildDate } from '@/utils/localStorage/app';
-
-export function handleTip() {
-  window.$message.info('敬请期待!');
-}
-
-export const useCheckUpdate = () => {
-  function handleHtmlCheckUpdate(data: {
-    htmlUrl: string;
-    lastBuildDate: string;
-  }) {
-    return new Promise<{ shouldTip: boolean }>((resolve) => {
-      const xhr = new XMLHttpRequest();
-      xhr.open('GET', data.htmlUrl, true);
-      xhr.onreadystatechange = function () {
-        try {
-          if (this.readyState !== 4) return;
-          if (this.status !== 200) return; // or whatever error handling you want
-          const reg = /\('最后构建日期:', "(.+)"\)/;
-          const res = reg.exec(this.responseText);
-          if (res?.[1] !== data.lastBuildDate) {
-            resolve({ shouldTip: true });
-            console.log('提示更新');
-            useTip({
-              content: '发现新内容可用,是否刷新页面?',
-              confirmButtonText: '刷新',
-            })
-              .then(() => {
-                windowReload();
-              })
-              .catch(() => {});
-          } else {
-            resolve({ shouldTip: false });
-            console.log('不提示更新');
-          }
-        } catch (error) {
-          console.error(error);
-        }
-      };
-      xhr.send();
-    });
-  }
-
-  function checkUpdate(data: { htmlUrl: string }) {
-    setInterval(
-      async () => {
-        const lastBuildDate = getLastBuildDate();
-        if (lastBuildDate) {
-          const res = await handleHtmlCheckUpdate({
-            htmlUrl: data.htmlUrl,
-            lastBuildDate,
-          });
-          return res;
-        }
-      },
-      1000 * 60 * 5
-    );
-  }
-  return { checkUpdate };
-};

+ 0 - 35
src/hooks/use-google-ad.ts

@@ -1,35 +0,0 @@
-import { useAppStore } from '@/store/app';
-
-export const useGoogleAd = () => {
-  const appStore = useAppStore();
-  if (!appStore.useGoogleAd) return;
-  try {
-    window.onload = () => {
-      // @ts-ignore
-      if (!window.adsbygoogle) {
-        // @ts-ignore
-        window.adsbygoogle = [];
-      }
-      // @ts-ignore
-      // if (!window.adsbygoogle.loaded) {
-      // @ts-ignore
-      window.adsbygoogle?.push?.({});
-      // }
-    };
-
-    // const adsenseUnitLength = document.getElementsByClassName('adsbygoogle');
-    // for (let i = 0; i < adsenseUnitLength.length; i += 1) {
-    //   // @ts-ignore
-    //   if (window.adsbygoogle) {
-    //     // @ts-ignore
-    //     // if (!window.adsbygoogle.loaded) {
-    //     // @ts-ignore
-    //     (adsbygoogle = window.adsbygoogle || []).push({});
-    //     // }
-    //   }
-    // }
-  } catch (error) {
-    console.error('initAdsbygoogle错误');
-    console.log(error);
-  }
-};

+ 0 - 10
src/hooks/use-i18n.ts

@@ -1,10 +0,0 @@
-import { createI18n } from 'vue-i18n';
-
-import { messages } from '@/locales';
-
-export const i18n = createI18n({
-  legacy: false,
-  locale: 'zh', // set locale
-  fallbackLocale: 'zh', // set fallback locale
-  messages, // set locale messages
-});

+ 0 - 129
src/hooks/use-login.ts

@@ -1,129 +0,0 @@
-import { hrefToTarget, isMobile } from 'billd-utils';
-
-import { fetchQQLogin } from '@/api/qqUser';
-import { fullLoading } from '@/components/FullLoading';
-import {
-  DEFAULT_AUTH_INFO,
-  QQ_CLIENT_ID,
-  QQ_OAUTH_URL,
-  QQ_REDIRECT_URI,
-  WECHAT_REDIRECT_URI,
-} from '@/constant';
-import { PlatformEnum } from '@/interface';
-import { WECHAT_GZH_APPID, WECHAT_GZH_OAUTH_URL } from '@/spec-config';
-import { useAppStore } from '@/store/app';
-import { useUserStore } from '@/store/user';
-import { clearThirdLoginInfo, setThirdLoginInfo } from '@/utils/cookie';
-import { getToken } from '@/utils/localStorage/user';
-
-const POSTMESSAGE_TYPE = [PlatformEnum.qqLogin];
-
-export async function handleQQLogin(e) {
-  let flag = false;
-  const { type, data } = e.data;
-  if (!POSTMESSAGE_TYPE.includes(type)) return flag;
-  console.log('收到消息', type, data);
-  const userStore = useUserStore();
-  const appStore = useAppStore();
-  try {
-    switch (type) {
-      case PlatformEnum.qqLogin: {
-        const res = await fetchQQLogin({ code: data.code, exp: data.qqExp });
-        if (res.code === 200) {
-          window.$message.success('登录成功!');
-          fullLoading({
-            loading: false,
-          });
-          flag = true;
-        }
-        userStore.setToken(res.data, data.qqExp);
-        userStore.getUserInfo();
-        appStore.showLoginModal = false;
-        break;
-      }
-    }
-  } catch (error) {
-    console.log(error);
-  } finally {
-    clearThirdLoginInfo();
-  }
-  return flag;
-}
-
-export function loginTip() {
-  const token = getToken();
-  const appStore = useAppStore();
-  if (!token) {
-    window.$message.warning('请先登录!');
-    appStore.showLoginModal = true;
-    return false;
-  }
-  return true;
-}
-
-export function commentAuthTip() {
-  const userStore = useUserStore();
-  if (
-    !userStore.auths?.find(
-      (v) => v.auth_value === DEFAULT_AUTH_INFO.MESSAGE_SEND.auth_value
-    )
-  ) {
-    window.$message.error(
-      `没有${DEFAULT_AUTH_INFO.MESSAGE_SEND.auth_value}权限!`
-    );
-    return false;
-  }
-  return true;
-}
-
-export function loginMessage() {
-  window.addEventListener('message', handleQQLogin);
-}
-
-export function useQQLogin(data: { exp }) {
-  fullLoading({
-    loading: true,
-    showMask: true,
-    content: 'qq登录...',
-    style: { color: 'white' },
-  });
-  const handleUrl = (state: string) =>
-    `${QQ_OAUTH_URL}/authorize?response_type=code&client_id=${QQ_CLIENT_ID}&redirect_uri=${QQ_REDIRECT_URI}&scope=get_user_info,get_vip_info,get_vip_rich_info&state=${state}`;
-  let loginInfo = JSON.stringify({
-    isMobile: false,
-    createTime: +new Date(),
-    env: 'qq',
-    dev: process.env.NODE_ENV === 'development',
-    qqExp: data.exp,
-  });
-  if (isMobile()) {
-    loginInfo = JSON.stringify({ ...JSON.parse(loginInfo), isMobile: true });
-    setThirdLoginInfo(loginInfo);
-    hrefToTarget(handleUrl(window.btoa(loginInfo)));
-  } else {
-    setThirdLoginInfo(loginInfo);
-    window.open(
-      handleUrl(window.btoa(loginInfo)),
-      'qq_login_window',
-      'toolbar=yes,location=no,directories=no,status=no,menubar=no,scrollbars=no,titlebar=no,toolbar=no,resizable=no,copyhistory=yes, width=918, height=609,top=250,left=400'
-    );
-  }
-}
-
-export const useWechatLogin = (qrData: { platform; exp; loginId }) => {
-  const redirectUri = encodeURIComponent(WECHAT_REDIRECT_URI);
-  const loginInfo = JSON.stringify({
-    isMobile: false,
-    createTime: +new Date(),
-    env: 'wechat',
-    dev: process.env.NODE_ENV === 'development',
-    qrcodePlatform: qrData.platform,
-    qrcodeExp: qrData.exp,
-    qrcodeLoginId: qrData.loginId,
-  });
-  setThirdLoginInfo(loginInfo);
-  const stateRes = window.btoa(loginInfo);
-  // https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html
-  const url = `${WECHAT_GZH_OAUTH_URL}appid=${WECHAT_GZH_APPID}&redirect_uri=${redirectUri}&scope=snsapi_userinfo&response_type=code&state=${stateRes}`;
-  hrefToTarget(url);
-};

+ 0 - 457
src/hooks/use-play.ts

@@ -1,457 +0,0 @@
-import '@/assets/css/videojs.scss';
-import { getRandomString } from 'billd-utils';
-import md5 from 'crypto-js/md5';
-import mpegts from 'mpegts.js';
-import videoJs from 'video.js';
-import Player from 'video.js/dist/types/player';
-import { onMounted, onUnmounted, ref, watch } from 'vue';
-
-import { SRS_CB_URL_QUERY } from '@/constant';
-import { LiveLineEnum } from '@/interface';
-import { useAppStore } from '@/store/app';
-import { useCacheStore } from '@/store/cache';
-import { useUserStore } from '@/store/user';
-import { createVideo } from '@/utils';
-
-export * as flvJs from 'flv.js';
-
-function handlePlayUrl(url: string) {
-  const userStore = useUserStore();
-  const userInfo = userStore.userInfo;
-  const userToken = md5(userStore.token) as string;
-  return !userInfo
-    ? `${url}?${SRS_CB_URL_QUERY.randomId}=${getRandomString(8)}`
-    : `${url}?${SRS_CB_URL_QUERY.userToken}=${userToken}&${
-        SRS_CB_URL_QUERY.userId
-      }=${userInfo.id!}&${SRS_CB_URL_QUERY.randomId}=${getRandomString(8)}`;
-}
-
-let pipVideo;
-
-function closePip() {
-  try {
-    const appStore = useAppStore();
-    appStore.videoControlsValue.pipMode = false;
-    // 直接play貌似会有延迟
-    setTimeout(() => {
-      pipVideo.play?.();
-    }, 50);
-  } catch (error) {
-    console.error('closePip错误');
-    console.error(error);
-  }
-}
-
-export async function usePictureInPicture(el, parentEl) {
-  try {
-    pipVideo = el;
-    if (el?.tagName?.toLowerCase() === 'video') {
-      await el.requestPictureInPicture();
-      el.addEventListener('leavepictureinpicture', closePip);
-    } else {
-      // 打开一个与播放器大小相同的画中画窗口。
-      // @ts-ignore
-      const pipWindow = await documentPictureInPicture.requestWindow({
-        width: el.clientWidth,
-        height: el.clientHeight,
-      });
-      pipWindow.document.body.append(el);
-      // 当画中画窗口关闭时,将播放器移回原位置。
-      pipWindow.addEventListener('pagehide', () => {
-        parentEl?.append(el);
-        closePip();
-      });
-    }
-  } catch (error) {
-    console.error('usePictureInPicture失败');
-    console.log(error);
-  }
-}
-
-export function useFullScreen(video) {
-  if (video.requestFullscreen) {
-    console.log('requestFullscreen-1');
-    video.requestFullscreen();
-  } else if (video.mozRequestFullScreen) {
-    console.log('mozRequestFullScreen-2');
-    // Firefox
-    video.mozRequestFullScreen();
-  } else if (video.webkitRequestFullscreen) {
-    console.log('webkitRequestFullscreen-3');
-    // Chrome, Safari和Opera
-    video.webkitRequestFullscreen();
-  } else if (video.msRequestFullscreen) {
-    console.log('msRequestFullscreen-4');
-    // IE/Edge
-    video.msRequestFullscreen();
-  } else if (video.webkitEnterFullscreen) {
-    console.log('webkitEnterFullscreen-4');
-    // IOS
-    video.webkitEnterFullscreen();
-  } else {
-    console.log('不支持全屏');
-  }
-}
-
-export function useFlvPlay() {
-  const cacheStore = useCacheStore();
-  const appStore = useAppStore();
-  // const flvPlayer = ref<flvJs.Player>();
-  const flvPlayer = ref<mpegts.Player>();
-  const flvVideoEl = ref<HTMLVideoElement>();
-  const appendVideoEl = ref<HTMLVideoElement>();
-  const initRetryMax = 120;
-  const retryMax = ref(initRetryMax);
-  const retry = ref(0);
-  const retryTimer = ref();
-  const retrying = ref(false);
-  const flvIsPlaying = ref(false);
-
-  onUnmounted(() => {
-    destroyFlv();
-  });
-
-  function destroyFlv() {
-    if (flvPlayer.value) {
-      flvPlayer.value.destroy();
-      flvPlayer.value = undefined;
-    }
-    appStore.videoControlsValue.kbs = undefined;
-    appStore.videoControlsValue.fps = undefined;
-    flvIsPlaying.value = false;
-    appStore.playing = false;
-    flvVideoEl.value?.remove();
-    flvVideoEl.value = undefined;
-    clearInterval(retryTimer.value);
-    retryMax.value = initRetryMax;
-  }
-
-  function setPlay() {
-    try {
-      console.log(`开始播放flv`);
-      flvVideoEl.value?.play();
-      flvPlayer.value?.play();
-    } catch (error) {
-      console.error('flv播放失败');
-      console.log(error);
-    }
-  }
-
-  watch(
-    () => appStore.liveLine,
-    (newval) => {
-      if (newval !== LiveLineEnum.flv) {
-        appendVideoEl.value?.remove();
-      }
-    }
-  );
-
-  watch(
-    () => appStore.playing,
-    (newVal) => {
-      if (flvVideoEl.value) {
-        if (appStore.pageIsClick) {
-          flvVideoEl.value.muted = false;
-          cacheStore.muted = false;
-        }
-        if (newVal) {
-          flvVideoEl.value.play();
-        } else {
-          flvVideoEl.value.pause();
-        }
-      }
-    }
-  );
-
-  watch(
-    () => flvIsPlaying.value,
-    (newVal) => {
-      appStore.playing = newVal;
-    }
-  );
-
-  watch(
-    () => cacheStore.muted,
-    (newVal) => {
-      if (flvVideoEl.value) {
-        flvVideoEl.value.muted = newVal;
-      }
-      if (!newVal) {
-        cacheStore.volume = cacheStore.volume || appStore.normalVolume;
-      } else {
-        cacheStore.volume = 0;
-      }
-    }
-  );
-
-  watch(
-    () => cacheStore.volume,
-    (newVal) => {
-      if (flvVideoEl.value) {
-        flvVideoEl.value.volume = newVal / 100;
-      }
-      if (!newVal) {
-        cacheStore.muted = true;
-      } else {
-        cacheStore.muted = false;
-      }
-    },
-    {
-      immediate: true,
-    }
-  );
-
-  function startFlvPlay(data: { flvurl: string }) {
-    return new Promise((resolve) => {
-      function main() {
-        destroyFlv();
-        // mseLivePlayback,指示 HTTP MPEG2-TS/FLV 直播流是否可以在您的浏览器上运行。
-        // msePlayback,与 相同mpegts.isSupported(),表示基本播放是否可以在您的浏览器上运行。
-        if (
-          mpegts.getFeatureList().mseLivePlayback &&
-          mpegts.getFeatureList().msePlayback
-        ) {
-          flvPlayer.value = mpegts.createPlayer({
-            type: 'flv', // could also be mpegts, m2ts, flv
-            isLive: true,
-            url: handlePlayUrl(data.flvurl),
-          });
-          appendVideoEl.value = createVideo({
-            appendChild: true,
-            muted: appStore.pageIsClick ? cacheStore.muted : true,
-            autoplay: true,
-          });
-          appendVideoEl.value.addEventListener('play', () => {
-            console.log('flv-play');
-          });
-          appendVideoEl.value.addEventListener('playing', () => {
-            console.log('flv-playing');
-            flvIsPlaying.value = true;
-            retry.value = 0;
-            flvVideoEl.value = appendVideoEl.value;
-            if (flvVideoEl.value) {
-              flvVideoEl.value.muted = cacheStore.muted;
-            }
-            resolve('');
-          });
-          appendVideoEl.value.addEventListener('loadedmetadata', () => {
-            console.log('flv-loadedmetadata');
-          });
-          flvPlayer.value.attachMediaElement(appendVideoEl.value);
-          flvPlayer.value.load();
-          flvPlayer.value.on(mpegts.Events.ERROR, () => {
-            console.error('mpegts消息:mpegts.Events.ERROR');
-            if (retry.value < retryMax.value && !retrying.value) {
-              retrying.value = true;
-              destroyFlv();
-              retryTimer.value = setTimeout(() => {
-                console.error(
-                  '播放flv错误,重新加载,剩余次数:',
-                  retryMax.value - retry.value
-                );
-                retry.value += 1;
-                retrying.value = false;
-                main();
-              }, 1000);
-            }
-          });
-          flvPlayer.value.on(mpegts.Events.MEDIA_INFO, (data) => {
-            console.log('mpegts.Events.MEDIA_INFO', data);
-            appStore.videoControlsValue.fps = data?.fps?.toFixed(2);
-          });
-          flvPlayer.value.on(mpegts.Events.STATISTICS_INFO, (data) => {
-            appStore.videoControlsValue.kbs = data?.speed?.toFixed(2);
-          });
-          setPlay();
-        } else {
-          console.error('不支持flv');
-        }
-      }
-      main();
-    });
-  }
-
-  return { flvPlayer, flvVideoEl, flvIsPlaying, startFlvPlay, destroyFlv };
-}
-
-export function useHlsPlay() {
-  const cacheStore = useCacheStore();
-  const appStore = useAppStore();
-  const hlsPlayer = ref<Player>();
-  const hlsVideoEl = ref<HTMLVideoElement>();
-  const appendVideoEl = ref<HTMLVideoElement>();
-  const initRetryMax = 120;
-  const retryMax = ref(initRetryMax);
-  const retry = ref(0);
-  const retryTimer = ref();
-  const retrying = ref(false);
-  const hlsIsPlaying = ref(false);
-
-  onMounted(() => {});
-
-  onUnmounted(() => {
-    destroyHls();
-  });
-
-  function destroyHls() {
-    if (hlsPlayer.value) {
-      hlsPlayer.value.dispose();
-      hlsPlayer.value = undefined;
-    }
-    appStore.videoControlsValue.kbs = undefined;
-    appStore.videoControlsValue.fps = undefined;
-    hlsIsPlaying.value = false;
-    appStore.playing = false;
-    hlsVideoEl.value?.remove();
-    hlsVideoEl.value = undefined;
-    clearInterval(retryTimer.value);
-    retryMax.value = initRetryMax;
-  }
-
-  function setPlay() {
-    try {
-      console.log(`开始播放hls`);
-      hlsVideoEl.value?.play();
-      hlsPlayer.value?.play();
-    } catch (error) {
-      console.error('hls播放失败');
-      console.log(error);
-    }
-  }
-
-  watch(
-    () => appStore.liveLine,
-    (newval) => {
-      if (newval !== LiveLineEnum.hls) {
-        appendVideoEl.value?.remove();
-      }
-    }
-  );
-
-  watch(
-    () => appStore.playing,
-    (newVal) => {
-      if (hlsVideoEl.value) {
-        if (appStore.pageIsClick) {
-          hlsVideoEl.value.muted = false;
-          cacheStore.muted = false;
-        }
-        if (newVal) {
-          hlsVideoEl.value.play();
-        } else {
-          hlsVideoEl.value.pause();
-        }
-      }
-    }
-  );
-
-  watch(
-    () => hlsIsPlaying.value,
-    (newVal) => {
-      appStore.playing = newVal;
-    }
-  );
-
-  watch(
-    () => cacheStore.muted,
-    (newVal) => {
-      if (hlsVideoEl.value) {
-        hlsVideoEl.value.muted = newVal;
-      }
-      if (!newVal) {
-        cacheStore.volume = cacheStore.volume || appStore.normalVolume;
-      } else {
-        cacheStore.volume = 0;
-      }
-    }
-  );
-
-  watch(
-    () => cacheStore.volume,
-    (newVal) => {
-      if (hlsVideoEl.value) {
-        hlsVideoEl.value.volume = newVal / 100;
-      }
-      if (!newVal) {
-        cacheStore.muted = true;
-      } else {
-        cacheStore.muted = false;
-      }
-    },
-    {
-      immediate: true,
-    }
-  );
-
-  function startHlsPlay(data: { hlsurl: string }) {
-    return new Promise((resolve) => {
-      function main() {
-        console.log('startHlsPlay', data.hlsurl);
-        destroyHls();
-        appendVideoEl.value = createVideo({
-          appendChild: true,
-          muted: appStore.pageIsClick ? cacheStore.muted : true,
-          autoplay: true,
-        });
-        hlsPlayer.value = videoJs(
-          appendVideoEl.value,
-          {
-            sources: [
-              {
-                src: handlePlayUrl(data.hlsurl),
-                type: 'application/x-mpegURL',
-              },
-            ],
-          },
-          function () {
-            setPlay();
-          }
-        );
-        hlsPlayer.value?.on('error', () => {
-          console.log('hls-error');
-          if (retry.value < retryMax.value && !retrying.value) {
-            retrying.value = true;
-            retryTimer.value = setTimeout(() => {
-              console.error(
-                '播放hls错误,重新加载,剩余次数:',
-                retryMax.value - retry.value
-              );
-              retry.value += 1;
-              retrying.value = false;
-              main();
-            }, 1000);
-          }
-        });
-        hlsPlayer.value?.on('play', () => {
-          console.log('hls-play');
-          // console.log(hlsPlayer.value?.videoHeight()); // 获取到的是0!
-        });
-        hlsPlayer.value?.on('playing', () => {
-          console.log('hls-playing');
-          hlsIsPlaying.value = true;
-          retry.value = 0;
-          if (appendVideoEl.value) {
-            appendVideoEl.value.muted = cacheStore.muted;
-          }
-          // console.log(hlsPlayer.value?.videoHeight()); // 获取到的是正确的!
-          const childNodes = hlsPlayer.value?.el().childNodes;
-          if (childNodes) {
-            childNodes.forEach((item) => {
-              if (item.nodeName.toLowerCase() === 'video') {
-                // @ts-ignore
-                hlsVideoEl.value = item;
-              }
-            });
-          }
-          resolve('');
-        });
-        hlsPlayer.value?.on('loadedmetadata', () => {
-          console.log('hls-loadedmetadata');
-        });
-      }
-      main();
-    });
-  }
-
-  return { hlsPlayer, hlsVideoEl, hlsIsPlaying, startHlsPlay, destroyHls };
-}

+ 0 - 606
src/hooks/use-pull.ts

@@ -1,606 +0,0 @@
-import { getRandomString } from 'billd-utils';
-import { nextTick, onUnmounted, ref, watch } from 'vue';
-import { useRoute } from 'vue-router';
-
-import { URL_QUERY } from '@/constant';
-import { useFlvPlay, useHlsPlay } from '@/hooks/use-play';
-import { useTip } from '@/hooks/use-tip';
-import { useWebsocket } from '@/hooks/use-websocket';
-import { useWebRtcLive } from '@/hooks/webrtc/live';
-import { useWebRtcMeetingOne } from '@/hooks/webrtc/meetingOne';
-import { useWebRtcRtmpToRtc } from '@/hooks/webrtc/rtmpToRtc';
-import {
-  DanmuMsgTypeEnum,
-  LiveLineEnum,
-  LiveRenderEnum,
-  SwitchEnum,
-  WsMessageIsFileEnum,
-} from '@/interface';
-import { useAppStore } from '@/store/app';
-import { useCacheStore } from '@/store/cache';
-import { useNetworkStore } from '@/store/network';
-import { ILiveRoom, LiveRoomTypeEnum } from '@/types/ILiveRoom';
-import {
-  WsBatchSendOffer,
-  WsMsgTypeEnum,
-  WsOfferType,
-} from '@/types/websocket';
-import {
-  createVideo,
-  handleUserMedia,
-  videoFullBox,
-  videoToCanvas,
-} from '@/utils';
-
-export function usePull() {
-  const route = useRoute();
-  const networkStore = useNetworkStore();
-  const cacheStore = useCacheStore();
-  const appStore = useAppStore();
-  const danmuStr = ref('');
-  const roomId = ref('');
-  const msgIsFile = ref(WsMessageIsFileEnum.no);
-  const danmuMsgType = ref<DanmuMsgTypeEnum>(DanmuMsgTypeEnum.danmu);
-  const liveRoomInfo = ref<ILiveRoom>();
-  const autoplayVal = ref(false);
-  const videoLoading = ref(false);
-  const isPlaying = ref(false);
-  const showPlayBtn = ref(false);
-  const flvurl = ref('');
-  const hlsurl = ref('');
-  const videoWrapRef = ref<HTMLDivElement>();
-  const videoResolution = ref();
-  const remoteVideo = ref<Array<HTMLVideoElement | HTMLCanvasElement>>([]);
-  const remoteStreamVideo = ref<HTMLVideoElement[]>([]);
-  const {
-    mySocketId,
-    initWs,
-    roomLiving,
-    liveUserList,
-    damuList,
-    sendDanmuTxt,
-  } = useWebsocket();
-  const { updateWebRtcRtmpToRtcConfig, webRtcRtmpToRtc } = useWebRtcRtmpToRtc();
-  const { updateWebRtcLiveConfig, webRtcLive } = useWebRtcLive();
-  const { updateWebRtcMeetingOneConfig, webRtcMeetingOne } =
-    useWebRtcMeetingOne();
-  const { flvVideoEl, flvIsPlaying, startFlvPlay, destroyFlv } = useFlvPlay();
-  const { hlsVideoEl, hlsIsPlaying, startHlsPlay, destroyHls } = useHlsPlay();
-  const stopDrawingArr = ref<any[]>([]);
-  const rtcVideo = ref<HTMLVideoElement[]>([]);
-  const userStream = ref<MediaStream>();
-
-  let changeWrapSizeFn;
-
-  onUnmounted(() => {
-    handleStopDrawing();
-    handleRtmpToRtcStop();
-    destroyFlv();
-    destroyHls();
-  });
-
-  function stopPlay() {
-    handleRtmpToRtcStop();
-    destroyFlv();
-    destroyHls();
-  }
-
-  function handleStopDrawing() {
-    changeWrapSizeFn = undefined;
-    stopDrawingArr.value.forEach((cb) => cb());
-    stopDrawingArr.value = [];
-    remoteVideo.value.forEach((el) => el.remove());
-    remoteVideo.value = [];
-  }
-
-  function handleVideoWrapResize() {
-    nextTick(() => {
-      if (videoWrapRef.value) {
-        const rect = videoWrapRef.value.getBoundingClientRect();
-        changeWrapSizeFn?.({ width: rect.width, height: rect.height });
-      }
-    });
-  }
-
-  function videoPlay(videoEl: HTMLVideoElement) {
-    stopDrawingArr.value.forEach((cb) => cb());
-    stopDrawingArr.value = [];
-    if (appStore.videoControls.renderMode === LiveRenderEnum.canvas) {
-      if (videoEl && videoWrapRef.value) {
-        const rect = videoWrapRef.value.getBoundingClientRect();
-        const { canvas, stopDrawing, changeWrapSize } = videoToCanvas({
-          wrapSize: {
-            width: rect.width,
-            height: rect.height,
-          },
-          videoEl,
-          videoResize: ({ w, h }) => {
-            videoResolution.value = `${w}x${h}`;
-          },
-        });
-        changeWrapSizeFn = changeWrapSize;
-        stopDrawingArr.value.push(stopDrawing);
-        remoteVideo.value.push(canvas);
-        videoLoading.value = false;
-      }
-    } else if (appStore.videoControls.renderMode === LiveRenderEnum.video) {
-      if (videoEl && videoWrapRef.value) {
-        const rect = videoWrapRef.value.getBoundingClientRect();
-        const { changeWrapSize } = videoFullBox({
-          wrapSize: {
-            width: rect.width,
-            height: rect.height,
-          },
-          videoEl,
-          videoResize: ({ w, h }) => {
-            videoResolution.value = `${w}x${h}`;
-          },
-        });
-        changeWrapSizeFn = changeWrapSize;
-        remoteVideo.value.push(videoEl);
-        videoLoading.value = false;
-      }
-    }
-  }
-
-  watch(
-    () => hlsVideoEl.value,
-    (newval) => {
-      if (newval) {
-        newval.style.removeProperty('opacity');
-        newval.style.removeProperty('position');
-        newval.style.removeProperty('top');
-        newval.style.removeProperty('bottom');
-        newval.style.removeProperty('left');
-        newval.style.removeProperty('right');
-        remoteStreamVideo.value.push(newval);
-      }
-    }
-  );
-
-  watch(
-    () => flvVideoEl.value,
-    (newval) => {
-      if (newval) {
-        newval.style.removeProperty('opacity');
-        newval.style.removeProperty('position');
-        newval.style.removeProperty('top');
-        newval.style.removeProperty('bottom');
-        newval.style.removeProperty('left');
-        newval.style.removeProperty('right');
-        remoteStreamVideo.value.push(newval);
-      }
-    }
-  );
-
-  watch(
-    () => appStore.videoControlsValue.pageFullMode,
-    () => {
-      handleVideoWrapResize();
-    }
-  );
-
-  watch(
-    [() => remoteStreamVideo.value, () => appStore.videoControls.renderMode],
-    () => {
-      handleStopDrawing();
-      remoteStreamVideo.value.forEach((videoEl) => {
-        videoPlay(videoEl);
-      });
-    },
-    {
-      deep: true,
-    }
-  );
-
-  watch(
-    () => remoteVideo.value,
-    (newval) => {
-      newval.forEach((videoEl) => {
-        videoWrapRef.value?.appendChild(videoEl);
-      });
-    },
-    {
-      deep: true,
-      immediate: true,
-    }
-  );
-
-  watch(
-    () => cacheStore.muted,
-    (newVal) => {
-      rtcVideo.value.forEach((v) => {
-        v.muted = newVal;
-      });
-      if (!newVal) {
-        cacheStore.volume = cacheStore.volume || appStore.normalVolume;
-      } else {
-        cacheStore.volume = 0;
-      }
-    }
-  );
-
-  watch(
-    () => cacheStore.volume,
-    (newVal) => {
-      rtcVideo.value.forEach((v) => {
-        v.volume = newVal / 100;
-      });
-      if (!newVal) {
-        cacheStore.muted = true;
-      } else {
-        cacheStore.muted = false;
-      }
-    },
-    {
-      immediate: true,
-    }
-  );
-
-  function handleRtmpToRtcStop() {
-    webRtcRtmpToRtc.close({ receiver: 'rtmpToRtc' });
-  }
-
-  function handleRtmpToRtcPlay() {
-    console.log('handleRtmpToRtcPlay');
-    handleStopDrawing();
-    handleRtmpToRtcStop();
-    destroyFlv();
-    destroyHls();
-    videoLoading.value = true;
-    appStore.liveLine = LiveLineEnum['rtmp-rtc'];
-    updateWebRtcRtmpToRtcConfig({
-      isPk: false,
-      roomId: roomId.value,
-    });
-    const videoEl = createVideo({
-      appendChild: false,
-      muted: appStore.pageIsClick ? cacheStore.muted : true,
-    });
-    rtcVideo.value.push(videoEl);
-    webRtcRtmpToRtc.newWebRtc({
-      sender: mySocketId.value,
-      receiver: 'rtmpToRtc',
-      videoEl,
-      sucessCb: () => {
-        remoteStreamVideo.value.push(videoEl);
-      },
-    });
-    webRtcRtmpToRtc.sendOffer({
-      sender: mySocketId.value,
-      receiver: 'rtmpToRtc',
-    });
-  }
-
-  async function handleWebRtcLivePlay(data) {
-    console.log('handleWebRtcLivePlay');
-    handleStopDrawing();
-    handleRtmpToRtcStop();
-    destroyFlv();
-    destroyHls();
-    videoLoading.value = true;
-    appStore.liveLine = LiveLineEnum.rtc;
-    updateWebRtcLiveConfig({
-      roomId: roomId.value,
-      canvasVideoStream: null,
-    });
-    const videoEl = createVideo({
-      appendChild: false,
-      muted: appStore.pageIsClick ? cacheStore.muted : true,
-    });
-    rtcVideo.value.push(videoEl);
-    webRtcLive.newWebRtc({
-      sender: mySocketId.value,
-      receiver: data.sender,
-      videoEl,
-      sucessCb: () => {
-        remoteStreamVideo.value.push(videoEl);
-      },
-    });
-
-    await webRtcLive.sendAnswer({
-      sender: mySocketId.value,
-      // data.data.receiver是接收者;我们现在new pc,发送者是自己,接收者肯定是房主,不能是data.data.receiver,因为data.data.receiver是自己
-      receiver: data.sender,
-      sdp: data.sdp,
-    });
-  }
-
-  async function handleWebRtcMeetingOnePlay(data) {
-    await handleMeeting();
-    console.log('handleWebRtcMeetingOnePlay');
-    handleStopDrawing();
-    videoLoading.value = true;
-    appStore.liveLine = LiveLineEnum.rtc;
-    const videoEl = createVideo({
-      appendChild: false,
-      muted: appStore.pageIsClick ? cacheStore.muted : true,
-    });
-    rtcVideo.value.push(videoEl);
-    webRtcMeetingOne.newWebRtc({
-      // 因为这里是收到offer,而offer是房主发的,所以此时的data.data.sender是房主;data.data.receiver是接收者;
-      // 但是这里的nativeWebRtc的sender,得是自己,不能是data.data.sender,不要混淆
-      sender: mySocketId.value,
-      receiver: data.sender,
-      videoEl,
-      sucessCb: () => {
-        remoteStreamVideo.value.push(videoEl);
-      },
-    });
-    webRtcMeetingOne.addTrack({
-      stream: userStream.value,
-      receiver: data.sender,
-    });
-    await webRtcMeetingOne.sendAnswer({
-      sender: mySocketId.value,
-      // data.data.receiver是接收者;我们现在new pc,发送者是自己,接收者肯定是房主,不能是data.data.receiver,因为data.data.receiver是自己
-      receiver: data.sender,
-      sdp: data.sdp,
-    });
-  }
-
-  async function handleMeeting() {
-    await useTip({
-      content: '是否加入会议?',
-    });
-    const stream = await handleUserMedia({
-      video: true,
-      audio: true,
-    });
-    userStream.value = stream;
-    networkStore.wsMap.get(roomId.value)?.send<WsBatchSendOffer['data']>({
-      requestId: getRandomString(8),
-      msgType: WsMsgTypeEnum.batchSendOffer,
-      data: {
-        roomId: roomId.value,
-      },
-    });
-  }
-
-  function initRtcReceive() {
-    const ws = networkStore.wsMap.get(roomId.value);
-    if (!ws?.socketIo) return;
-    // 收到nativeWebRtcOffer
-    ws.socketIo.on(
-      WsMsgTypeEnum.nativeWebRtcOffer,
-      (data: WsOfferType['data']) => {
-        console.log(
-          '收2到nativeWebRtcOffer',
-          data.live_room.type,
-          LiveRoomTypeEnum.wertc_live,
-          data
-        );
-        if (data.live_room.type === LiveRoomTypeEnum.wertc_live) {
-          if (data.receiver === mySocketId.value) {
-            console.warn('是发给我的nativeWebRtcOffer-wertc_live');
-            if (networkStore.rtcMap.get(data.sender)) {
-              return;
-            }
-            handleWebRtcLivePlay(data);
-          } else {
-            console.error('不是发给我的nativeWebRtcOffer');
-          }
-        } else if (data.live_room.type === LiveRoomTypeEnum.wertc_meeting_one) {
-          if (data.receiver === mySocketId.value) {
-            console.warn('是发给我的nativeWebRtcOffer-wertc_meeting_one');
-            updateWebRtcMeetingOneConfig({
-              roomId: roomId.value,
-              anchorStream: null,
-            });
-            if (networkStore.rtcMap.get(data.sender)) {
-              return;
-            }
-            handleWebRtcMeetingOnePlay(data);
-          } else {
-            console.error('不是发给我的nativeWebRtcOffer');
-          }
-        }
-      }
-    );
-  }
-
-  function handleHlsPlay() {
-    console.log('handleHlsPlay', hlsurl.value);
-    handleStopDrawing();
-    handleRtmpToRtcStop();
-    destroyFlv();
-    destroyHls();
-    videoLoading.value = true;
-    appStore.liveLine = LiveLineEnum.hls;
-    startHlsPlay({
-      hlsurl: hlsurl.value,
-    });
-  }
-
-  function handleFlvPlay() {
-    console.log('handleFlvPlay', flvurl.value);
-    handleStopDrawing();
-    handleRtmpToRtcStop();
-    destroyFlv();
-    destroyHls();
-    videoLoading.value = true;
-    appStore.liveLine = LiveLineEnum.flv;
-    startFlvPlay({
-      flvurl: flvurl.value,
-    });
-  }
-
-  function handlePlay(data: ILiveRoom) {
-    flvurl.value =
-      data.cdn === SwitchEnum.yes ? data.pull_cdn_flv_url! : data.pull_flv_url!;
-    hlsurl.value =
-      data.cdn === SwitchEnum.yes ? data.pull_cdn_hls_url! : data.pull_hls_url!;
-    function play() {
-      if (appStore.liveLine === LiveLineEnum.flv) {
-        handleFlvPlay();
-      } else if (appStore.liveLine === LiveLineEnum.hls) {
-        handleHlsPlay();
-      }
-    }
-    if (LiveRoomTypeEnum.pk === data.type && !route.query[URL_QUERY.pkKey]) {
-      play();
-    } else if (
-      [
-        LiveRoomTypeEnum.system,
-        LiveRoomTypeEnum.srs,
-        LiveRoomTypeEnum.obs,
-        LiveRoomTypeEnum.msr,
-        LiveRoomTypeEnum.pk,
-        LiveRoomTypeEnum.forward_bilibili,
-        LiveRoomTypeEnum.forward_huya,
-        LiveRoomTypeEnum.forward_all,
-        LiveRoomTypeEnum.tencent_css,
-        LiveRoomTypeEnum.tencent_css_pk,
-      ].includes(data.type!)
-    ) {
-      play();
-    } else if (
-      [
-        LiveRoomTypeEnum.wertc_live,
-        LiveRoomTypeEnum.wertc_meeting_one,
-        LiveRoomTypeEnum.wertc_meeting_two,
-      ].includes(data.type!)
-    ) {
-      appStore.liveLine = LiveLineEnum.rtc;
-    }
-  }
-
-  watch(
-    [() => roomLiving.value, () => appStore.liveRoomInfo],
-    ([val, liveRoomInfo]) => {
-      if (val && liveRoomInfo && liveRoomInfo.type !== undefined) {
-        showPlayBtn.value = false;
-        if (
-          [
-            LiveRoomTypeEnum.system,
-            LiveRoomTypeEnum.msr,
-            LiveRoomTypeEnum.srs,
-            LiveRoomTypeEnum.obs,
-            LiveRoomTypeEnum.tencent_css,
-            LiveRoomTypeEnum.tencent_css_pk,
-            LiveRoomTypeEnum.forward_all,
-            LiveRoomTypeEnum.forward_bilibili,
-            LiveRoomTypeEnum.forward_douyin,
-            LiveRoomTypeEnum.forward_douyu,
-            LiveRoomTypeEnum.forward_huya,
-            LiveRoomTypeEnum.forward_kuaishou,
-            LiveRoomTypeEnum.forward_xiaohongshu,
-          ].includes(liveRoomInfo.type!)
-        ) {
-          handlePlay(liveRoomInfo);
-        } else if (LiveRoomTypeEnum.pk === liveRoomInfo.type) {
-          if (!route.query[URL_QUERY.pkKey]) {
-            handlePlay(liveRoomInfo);
-          }
-        }
-      }
-      if (!roomLiving.value) {
-        videoLoading.value = false;
-        closeRtc();
-        handleStopDrawing();
-      }
-    },
-    {
-      deep: true,
-      immediate: true,
-    }
-  );
-
-  watch(
-    () => appStore.liveLine,
-    (newVal) => {
-      console.log('直播线路变了', newVal);
-      handleStopDrawing();
-      remoteStreamVideo.value = [];
-
-      switch (newVal) {
-        case LiveLineEnum.flv:
-          handleFlvPlay();
-          break;
-        case LiveLineEnum.hls:
-          handleHlsPlay();
-          break;
-        case LiveLineEnum.rtc:
-          break;
-        case LiveLineEnum['rtmp-rtc']:
-          handleRtmpToRtcPlay();
-          break;
-      }
-    }
-  );
-
-  watch(
-    () => hlsIsPlaying.value,
-    (newVal) => {
-      isPlaying.value = newVal;
-    }
-  );
-
-  watch(
-    () => flvIsPlaying.value,
-    (newVal) => {
-      isPlaying.value = newVal;
-    }
-  );
-
-  function initPull(data: { autolay?: boolean; roomId: string }) {
-    roomId.value = data.roomId;
-    if (data.autolay === undefined) {
-      autoplayVal.value = true;
-    } else {
-      autoplayVal.value = data.autolay;
-    }
-    // initWs({
-    //   roomId: roomId.value,
-    //   isAnchor: false,
-    // });
-  }
-
-  function closeWs() {
-    networkStore.wsMap.forEach((ws) => {
-      networkStore.removeWs(ws.roomId);
-    });
-  }
-
-  function closeRtc() {
-    networkStore.rtcMap.forEach((rtc) => {
-      networkStore.removeRtc(rtc.receiver);
-    });
-  }
-
-  function keydownDanmu(event: KeyboardEvent) {
-    const key = event.key.toLowerCase();
-    if (key === 'enter') {
-      event.preventDefault();
-      sendDanmuTxt(danmuStr.value);
-      danmuStr.value = '';
-    }
-  }
-
-  return {
-    initWs,
-    initRtcReceive,
-    videoWrapRef,
-    stopPlay,
-    handlePlay,
-    handleStopDrawing,
-    initPull,
-    closeWs,
-    closeRtc,
-    keydownDanmu,
-    showPlayBtn,
-    danmuMsgType,
-    isPlaying,
-    msgIsFile,
-    mySocketId,
-    videoResolution,
-    remoteVideo,
-    roomLiving,
-    autoplayVal,
-    videoLoading,
-    damuList,
-    liveUserList,
-    danmuStr,
-    liveRoomInfo,
-  };
-}

+ 0 - 307
src/hooks/use-push.ts

@@ -1,307 +0,0 @@
-import { getRandomString, windowReload } from 'billd-utils';
-import { onMounted, onUnmounted, ref, watch } from 'vue';
-
-import { fetchCreateUserLiveRoom } from '@/api/userLiveRoom';
-import { loginTip } from '@/hooks/use-login';
-import { useTip } from '@/hooks/use-tip';
-import { useWebsocket } from '@/hooks/use-websocket';
-import { WsMessageIsFileEnum } from '@/interface';
-import { useAppStore } from '@/store/app';
-import { useNetworkStore } from '@/store/network';
-import { useUserStore } from '@/store/user';
-import {
-  WsConnectStatusEnum,
-  WsMsgTypeEnum,
-  WsMsrBlobType,
-  WsRoomNoLiveType,
-} from '@/types/websocket';
-import { createVideo, generateBase64 } from '@/utils';
-import { handlConstraints } from '@/utils/network/webRTC';
-
-export function usePush() {
-  const appStore = useAppStore();
-  const userStore = useUserStore();
-  const networkStore = useNetworkStore();
-
-  const roomId = ref('');
-  const danmuStr = ref('');
-  const localStream = ref<MediaStream>();
-  const videoElArr = ref<HTMLVideoElement[]>([]);
-  const msgIsFile = ref<WsMessageIsFileEnum>(WsMessageIsFileEnum.no);
-
-  const {
-    keepRtcLivingTimer,
-    roomLiving,
-    initWs,
-    handleStartLive,
-    sendDanmuTxt,
-    connectStatus,
-    mySocketId,
-    canvasVideoStream,
-    lastCoverImg,
-    liveUserList,
-    damuList,
-    currentMaxFramerate,
-    currentMaxBitrate,
-    currentResolutionRatio,
-    currentAudioContentHint,
-    currentVideoContentHint,
-  } = useWebsocket();
-
-  onMounted(() => {
-    if (!loginTip()) return;
-  });
-
-  onUnmounted(() => {
-    closeWs();
-    closeRtc();
-  });
-
-  function closeWs() {
-    networkStore.wsMap.forEach((ws) => {
-      networkStore.removeWs(ws.roomId);
-    });
-  }
-
-  function closeRtc() {
-    networkStore.rtcMap.forEach((rtc) => {
-      networkStore.removeRtc(rtc.receiver);
-    });
-  }
-
-  watch(
-    () => currentResolutionRatio.value,
-    (newval) => {
-      console.log('分辨率变了', newval);
-      networkStore.rtcMap.forEach((rtc) => {
-        if (canvasVideoStream.value) {
-          handlConstraints({
-            frameRate: rtc.maxFramerate,
-            height: newval,
-            stream: canvasVideoStream.value,
-          });
-        }
-      });
-    }
-  );
-
-  watch(
-    () => currentMaxFramerate.value,
-    (newval) => {
-      console.log('帧率变了', newval);
-      networkStore.rtcMap.forEach((rtc) => {
-        if (canvasVideoStream.value) {
-          handlConstraints({
-            frameRate: newval,
-            height: rtc.resolutionRatio,
-            stream: canvasVideoStream.value,
-          });
-        }
-      });
-    }
-  );
-
-  watch(
-    () => currentMaxBitrate.value,
-    (newval) => {
-      console.log('码率变了', newval);
-      networkStore.rtcMap.forEach(async (rtc) => {
-        const res = await rtc.setMaxBitrate(newval);
-        if (res === 1) {
-          window.$message.success('切换码率成功!');
-        } else {
-          window.$message.success('切换码率失败!');
-        }
-      });
-    }
-  );
-
-  watch(
-    () => localStream.value,
-    (stream) => {
-      console.log('localStream变了');
-      console.log('音频轨:', stream?.getAudioTracks());
-      console.log('视频轨:', stream?.getVideoTracks());
-      videoElArr.value.forEach((dom) => {
-        dom.remove();
-      });
-      stream?.getVideoTracks().forEach((track) => {
-        console.log('视频轨enabled:', track.id, track.enabled);
-        const video = createVideo({});
-        video.setAttribute('track-id', track.id);
-        video.srcObject = new MediaStream([track]);
-        videoElArr.value.push(video);
-      });
-      stream?.getAudioTracks().forEach((track) => {
-        console.log('音频轨enabled:', track.id, track.enabled);
-        const video = createVideo({});
-        video.setAttribute('track-id', track.id);
-        video.srcObject = new MediaStream([track]);
-        videoElArr.value.push(video);
-      });
-    },
-    { deep: true }
-  );
-
-  watch(
-    () => userStore.userInfo,
-    async (newVal) => {
-      if (newVal) {
-        const res = handleUserHasLiveRoom();
-        if (!res) {
-          await useTip({
-            content: '你还没有直播间,是否立即开通?',
-            maskClosable: false,
-          });
-          await handleCreateUserLiveRoom();
-        } else {
-          roomId.value = `${appStore.liveRoomInfo?.id || ''}`;
-          connectWs();
-        }
-      }
-    },
-    { immediate: true }
-  );
-
-  function handleUserHasLiveRoom() {
-    const res = userStore.userInfo?.live_rooms?.[0];
-    appStore.liveRoomInfo = res;
-    return res;
-  }
-
-  async function handleCreateUserLiveRoom() {
-    try {
-      const res = await fetchCreateUserLiveRoom();
-      if (res.code === 200) {
-        window.$message.success('开通直播间成功!');
-        setTimeout(() => {
-          windowReload();
-        }, 500);
-      }
-    } catch (error) {
-      console.log(error);
-    }
-  }
-
-  function connectWs() {
-    initWs({
-      isAnchor: true,
-      roomId: roomId.value,
-      currentMaxBitrate: currentMaxBitrate.value,
-      currentMaxFramerate: currentMaxFramerate.value,
-      currentResolutionRatio: currentResolutionRatio.value,
-    });
-  }
-
-  async function startLive({ type, cdn, isdev, msrDelay, msrMaxDelay }) {
-    if (!loginTip()) return;
-    const flag = handleUserHasLiveRoom();
-    if (!flag) {
-      await useTip({
-        content: '你还没有直播间,是否立即开通?',
-        maskClosable: false,
-      });
-      await handleCreateUserLiveRoom();
-      return;
-    }
-    if (connectStatus.value !== WsConnectStatusEnum.connect) {
-      window.$message.warning('websocket未连接');
-      return;
-    }
-    roomLiving.value = true;
-    const el = appStore.allTrack.find((item) => {
-      if (item.video === 1) {
-        return true;
-      }
-    });
-    if (el) {
-      const res1 = videoElArr.value.find(
-        (item) => item.getAttribute('track-id') === el.track?.id
-      );
-      if (res1) {
-        // canvas推流的话,不需要再设置预览图了
-        if (!canvasVideoStream.value) {
-          lastCoverImg.value = generateBase64(res1);
-        }
-      }
-    }
-    if (canvasVideoStream.value) {
-      handlConstraints({
-        stream: canvasVideoStream.value,
-        height: currentResolutionRatio.value,
-        frameRate: currentMaxFramerate.value,
-      });
-    }
-    handleStartLive({ cdn, isdev, type, msrDelay, msrMaxDelay });
-  }
-
-  /** 结束直播 */
-  function endLive() {
-    roomLiving.value = false;
-    localStream.value = undefined;
-    closeRtc();
-    clearInterval(keepRtcLivingTimer.value);
-  }
-
-  function sendRoomNoLive() {
-    const instance = networkStore.wsMap.get(roomId.value);
-    if (instance) {
-      instance.send<WsRoomNoLiveType['data']>({
-        requestId: getRandomString(8),
-        msgType: WsMsgTypeEnum.roomNoLive,
-        data: {
-          live_room_id: appStore.liveRoomInfo?.id!,
-        },
-      });
-    }
-  }
-
-  function sendBlob(data: { blob; blobId: string; delay; max_delay }) {
-    const instance = networkStore.wsMap.get(roomId.value);
-    if (instance) {
-      instance.send<WsMsrBlobType['data']>({
-        requestId: getRandomString(8),
-        msgType: WsMsgTypeEnum.msrBlob,
-        data: {
-          live_room_id: Number(roomId.value),
-          blob: data.blob,
-          blob_id: data.blobId,
-          delay: data.delay,
-          max_delay: data.max_delay,
-        },
-      });
-    }
-  }
-
-  function keydownDanmu(event: KeyboardEvent) {
-    const key = event.key.toLowerCase();
-    if (key === 'enter') {
-      event.preventDefault();
-      sendDanmuTxt(danmuStr.value);
-      danmuStr.value = '';
-    }
-  }
-
-  return {
-    startLive,
-    endLive,
-    keydownDanmu,
-    sendBlob,
-    sendRoomNoLive,
-    roomId,
-    msgIsFile,
-    mySocketId,
-    lastCoverImg,
-    localStream,
-    canvasVideoStream,
-    roomLiving,
-    currentResolutionRatio,
-    currentMaxBitrate,
-    currentMaxFramerate,
-    currentAudioContentHint,
-    currentVideoContentHint,
-    danmuStr,
-    damuList,
-    liveUserList,
-  };
-}

+ 0 - 203
src/hooks/use-rtcParams.ts

@@ -1,203 +0,0 @@
-import { ref, watch } from 'vue';
-
-import { allMediaTypeList, DEFAULT_AUTH_INFO } from '@/constant';
-import { useUserStore } from '@/store/user';
-
-export const useRTCParams = () => {
-  const userStore = useUserStore();
-  const maxBitrate = ref([
-    {
-      label: '1',
-      value: 1,
-      disabled: false,
-    },
-    {
-      label: '10',
-      value: 10,
-      disabled: false,
-    },
-    {
-      label: '1000',
-      value: 1000,
-      disabled: false,
-    },
-    {
-      label: '2000',
-      value: 2000,
-      disabled: false,
-    },
-    {
-      label: '3000',
-      value: 3000,
-      disabled: false,
-    },
-    {
-      label: '4000',
-      value: 4000,
-      disabled: true,
-    },
-    {
-      label: '5000',
-      value: 5000,
-      disabled: true,
-    },
-    {
-      label: '6000',
-      value: 6000,
-      disabled: true,
-    },
-    {
-      label: '7000',
-      value: 7000,
-      disabled: true,
-    },
-    {
-      label: '8000',
-      value: 8000,
-      disabled: true,
-    },
-  ]);
-  const maxFramerate = ref([
-    {
-      label: '1帧',
-      value: 1,
-      disabled: false,
-    },
-    {
-      label: '10帧',
-      value: 10,
-      disabled: false,
-    },
-    {
-      label: '20帧',
-      value: 20,
-      disabled: false,
-    },
-    {
-      label: '30帧',
-      value: 30,
-      disabled: false,
-    },
-    {
-      label: '60帧',
-      value: 60,
-      disabled: true,
-    },
-    {
-      label: '120帧',
-      value: 120,
-      disabled: true,
-    },
-  ]);
-  const resolutionRatio = ref([
-    {
-      label: '360P',
-      value: 360,
-      disabled: false,
-    },
-    {
-      label: '540P',
-      value: 540,
-      disabled: false,
-    },
-    {
-      label: '720P',
-      value: 720,
-      disabled: false,
-    },
-    {
-      label: '1080P',
-      value: 1080,
-      disabled: false,
-    },
-    {
-      label: '1440P',
-      value: 1440,
-      disabled: true,
-    },
-    {
-      label: '2160P',
-      value: 2160,
-      disabled: true,
-    },
-  ]);
-  const videoContentHint = ref([
-    {
-      label: '默认',
-      value: '',
-      disabled: false,
-    },
-    {
-      label: '运动',
-      value: 'motion',
-      disabled: false,
-    },
-    {
-      label: '文本',
-      value: 'text',
-      disabled: false,
-    },
-    {
-      label: '平衡',
-      value: 'detail',
-      disabled: false,
-    },
-  ]);
-  const audioContentHint = ref([
-    {
-      label: '默认',
-      value: '',
-      disabled: false,
-    },
-    {
-      label: '音乐',
-      value: 'music',
-      disabled: false,
-    },
-    {
-      label: '语言',
-      value: 'speech',
-      disabled: false,
-    },
-    {
-      label: '语音识别',
-      value: 'speech-recognition',
-      disabled: false,
-    },
-  ]);
-  watch(
-    () => userStore.userInfo,
-    (newval) => {
-      if (newval) {
-        if (
-          userStore.userInfo?.auths?.find(
-            (v) => v.auth_value === DEFAULT_AUTH_INFO.LIVE_PULL_SVIP.auth_value
-          )
-        ) {
-          maxBitrate.value = maxBitrate.value.map((item) => {
-            item.disabled = false;
-            return item;
-          });
-          maxFramerate.value = maxFramerate.value.map((item) => {
-            item.disabled = false;
-            return item;
-          });
-          resolutionRatio.value = resolutionRatio.value.map((item) => {
-            item.disabled = false;
-            return item;
-          });
-        }
-      }
-    },
-    { immediate: true }
-  );
-
-  return {
-    maxBitrate,
-    maxFramerate,
-    resolutionRatio,
-    videoContentHint,
-    audioContentHint,
-    allMediaTypeList,
-  };
-};

+ 0 - 44
src/hooks/use-tip.ts

@@ -1,44 +0,0 @@
-import { ComponentPublicInstance, VNode, createApp } from 'vue';
-
-import ModalCpt from '@/hooks/tipModal/index.vue';
-
-const app = createApp(ModalCpt);
-const container = document.createElement('div');
-// @ts-ignore
-const instance: ComponentPublicInstance<InstanceType<typeof ModalCpt>> =
-  app.mount(container);
-
-document.body.appendChild(container);
-
-export function useTip(data: {
-  title?: string;
-  width?: string;
-  content: string | VNode;
-  hiddenCancel?: boolean;
-  hiddenConfirm?: boolean;
-  hiddenClose?: boolean;
-  maskClosable?: boolean;
-  confirmButtonText?: string;
-  cancelButtonText?: string;
-}) {
-  instance.show = true;
-  instance.title = data.title || '提示';
-  instance.width = data.width || '320px';
-  instance.maskClosable = !!data.maskClosable;
-  instance.content = data.content;
-  instance.hiddenCancel = !!data.hiddenCancel;
-  instance.hiddenClose = !!data.hiddenClose;
-  instance.hiddenConfirm = !!data.hiddenConfirm;
-  instance.confirmButtonText = data.confirmButtonText || '确认';
-  instance.cancelButtonText = data.cancelButtonText || '取消';
-  return new Promise((resolve, reject) => {
-    instance.handleOk = () => {
-      instance.show = false;
-      resolve('ok');
-    };
-    instance.handleCancel = () => {
-      instance.show = false;
-      reject('cancel');
-    };
-  });
-}

+ 0 - 81
src/hooks/use-upload-tencentcloud.ts

@@ -1,81 +0,0 @@
-import { getRandomString } from 'billd-utils';
-import COS from 'cos-js-sdk-v5';
-
-import { fetchGetPolicyByRes } from '@/api/other';
-import { TENCENTCLOUD_COS } from '@/spec-config';
-import { getHash } from '@/utils';
-
-export const useUpload = async ({
-  prefix,
-  file,
-  onProgress,
-}: {
-  prefix: string;
-  file: File;
-  onProgress?: any;
-}) => {
-  const { hash, ext } = await getHash(file);
-  // 初始化实例
-  const cos = new COS({
-    // getAuthorization 必选参数
-    async getAuthorization(_options, callback) {
-      // 初始化时不会调用,只有调用 cos 方法(例如 cos.putObject)时才会进入
-      // 异步获取临时密钥
-      // 服务端 JS 和 PHP 例子:https://github.com/tencentyun/cos-js-sdk-v5/blob/master/server/
-      // 服务端其他语言参考 COS STS SDK :https://github.com/tencentyun/qcloud-cos-sts-sdk
-      // STS 详细文档指引看:https://www.tencentcloud.com/document/product/436/14048
-      const data = await fetchGetPolicyByRes({ prefix });
-      if (data.code == 200 && !data.data.err) {
-        const { credentials, startTime, expiredTime } = data.data.credential;
-        callback({
-          TmpSecretId: credentials.tmpSecretId,
-          TmpSecretKey: credentials.tmpSecretKey,
-          SecurityToken: credentials.sessionToken,
-          // 建议返回服务器时间作为签名的开始时间,避免用户浏览器本地时间偏差过大导致签名错误
-          StartTime: startTime, // 时间戳,单位秒,如:1580000000
-          ExpiredTime: expiredTime, // 时间戳,单位秒,如:1580000000
-        });
-      }
-    },
-  });
-  return new Promise<{
-    flag: boolean;
-    respBody?: any;
-    respErr?: any;
-    respInfo?: any;
-    resultUrl?: string;
-  }>((resolve) => {
-    const cosKey = `${prefix}${hash}__${getRandomString(4)}.${ext}`;
-    cos.uploadFile(
-      {
-        Bucket:
-          TENCENTCLOUD_COS['res-1305322458']
-            .Bucket /* 填写自己的 bucket,必须字段 */,
-        Region:
-          TENCENTCLOUD_COS['res-1305322458']
-            .Region /* 存储桶所在地域,必须字段 */,
-        Key: cosKey /* 存储在桶里的对象键(例如:1.jpg,a/b/test.txt,图片.jpg)支持中文,必须字段 */,
-        Body: file, // 上传文件对象
-        SliceSize:
-          1024 *
-          1024 *
-          5 /* 触发分块上传的阈值,超过5MB使用分块上传,小于5MB使用简单上传。可自行设置,非必须 */,
-        onProgress(progressData) {
-          onProgress({ percent: progressData.percent });
-        },
-      },
-      function (err, data) {
-        if (err) {
-          console.log('上传失败', err);
-          resolve({ flag: false, respErr: err });
-        } else {
-          console.log('上传成功', data);
-          resolve({
-            flag: true,
-            resultUrl: `${TENCENTCLOUD_COS['res-1305322458'].url}/${cosKey}`,
-          });
-        }
-      }
-    );
-  });
-};

+ 0 - 161
src/hooks/use-upload.ts

@@ -1,161 +0,0 @@
-import { upload } from 'qiniu-js';
-import { ref } from 'vue';
-
-import {
-  fetchQiniuUploadToken,
-  fetchUpload,
-  fetchUploadChunk,
-  fetchUploadMergeChunk,
-  fetchUploadProgress,
-} from '@/api/qiniuData';
-import { QINIU_KODO } from '@/spec-config';
-import { getHash, splitFile } from '@/utils';
-
-export async function useUpload({
-  prefix,
-  file,
-}: {
-  prefix: string;
-  file: File;
-}) {
-  const { hash, ext } = await getHash(file);
-  const res = await fetchQiniuUploadToken({ ext, hash, prefix });
-  if (res.code === 200) {
-    return new Promise<{ flag: boolean; err?: any; resultUrl?: string }>(
-      (resolve) => {
-        const key = `${prefix + hash}.${ext}`;
-        const observable = upload(file, key, res.data);
-        observable.subscribe({
-          next(res) {
-            console.log('next', res);
-          },
-          error(err) {
-            console.log('error', err);
-            resolve({
-              flag: false,
-              err,
-            });
-          },
-          complete(res) {
-            console.log('complete', res);
-            resolve({
-              flag: true,
-              resultUrl: `${QINIU_KODO.hssblog.url}/${res.key as string}`,
-            });
-          },
-        });
-      }
-    );
-  } else {
-    return Promise.resolve<{ flag: boolean; err?: any; resultUrl?: string }>({
-      flag: false,
-    });
-  }
-}
-
-export async function useUploadServer({
-  prefix,
-  file,
-}: {
-  prefix: string;
-  file: File;
-}): Promise<
-  | {
-      flag: boolean;
-      respBody?: any;
-      respErr?: any;
-      respInfo?: any;
-      resultUrl?: string | undefined;
-    }
-  | undefined
-> {
-  const timer = ref();
-  let isMerge = false;
-
-  const mergeAndUpload = async ({ hash, ext, prefix }) => {
-    await fetchUploadMergeChunk({ hash, ext, prefix });
-    const { data } = await fetchUpload({
-      hash,
-      ext,
-      prefix,
-    });
-    clearInterval(timer.value);
-    return data;
-  };
-
-  try {
-    const { hash, ext } = await getHash(file);
-    const { code } = await fetchUploadProgress({ prefix, hash, ext });
-    if (code === 3) {
-      const res = await fetchUpload({ prefix, hash, ext });
-      return new Promise((resolve) => {
-        resolve(res.data);
-      });
-    }
-    const chunkList = splitFile(file);
-    return new Promise<{
-      flag: boolean;
-      respBody?: any;
-      respErr?: any;
-      respInfo?: any;
-      resultUrl?: string | undefined;
-    }>((resolve) => {
-      for (let i = 0; i < chunkList.length; i += 1) {
-        const v = chunkList[i];
-        const form = new FormData();
-        form.append('prefix', prefix);
-        form.append('hash', hash);
-        form.append('ext', ext);
-        form.append('chunkName', v.chunkName);
-        form.append('chunkTotal', `${chunkList.length}`);
-        form.append('uploadFiles', v.chunk);
-        fetchUploadChunk(form).then((res) => {
-          if (res.data.percentage === 50) {
-            if (!isMerge) {
-              mergeAndUpload({ hash, ext, prefix })
-                .then((uploadRes) => {
-                  console.log('mergeAndUpload成功', uploadRes);
-                  resolve(uploadRes);
-                })
-                .catch((err) => {
-                  console.error('mergeAndUpload失败', err);
-                  resolve({ flag: false });
-                });
-              isMerge = true;
-            }
-          }
-        });
-      }
-      let flag = false;
-      timer.value = setInterval(async () => {
-        try {
-          const { code, data, msg } = await fetchUploadProgress({
-            hash,
-            prefix,
-            ext,
-          });
-          if (flag) {
-            clearInterval(timer.value);
-            return;
-          }
-          if (code === 1) {
-            const percentage = data.percentage!;
-            if (percentage === 100) {
-              flag = true;
-            }
-          } else {
-            clearInterval(timer.value);
-            console.error(code, data, msg);
-          }
-        } catch (error) {
-          console.error(error);
-          clearInterval(timer.value);
-        }
-      }, 1000);
-    });
-  } catch (error) {
-    console.error(error);
-  } finally {
-    clearInterval(timer.value);
-  }
-}

+ 0 - 967
src/hooks/use-websocket.ts

@@ -1,967 +0,0 @@
-import { copyToClipBoard, getRandomString } from 'billd-utils';
-import { NButton } from 'naive-ui';
-import { computed, h, onUnmounted, ref, watch } from 'vue';
-import { useRoute } from 'vue-router';
-
-import { fetchVerifyPkKey } from '@/api/liveRoom';
-import { THEME_COLOR, URL_QUERY } from '@/constant';
-import { commentAuthTip, loginTip } from '@/hooks/use-login';
-import { useRTCParams } from '@/hooks/use-rtcParams';
-import { useTip } from '@/hooks/use-tip';
-import { useForwardThirdPartyLiveStreaming } from '@/hooks/webrtc/forwardThirdPartyLiveStreaming';
-import { useWebRtcLive } from '@/hooks/webrtc/live';
-import { useWebRtcMeetingOne } from '@/hooks/webrtc/meetingOne';
-import { useWebRtcMeetingPk } from '@/hooks/webrtc/meetingPk';
-import { useWebRtcSrs } from '@/hooks/webrtc/srs';
-import { useWebRtcTencentcloudCss } from '@/hooks/webrtc/tencentcloudCss';
-import {
-  DanmuMsgTypeEnum,
-  ILiveRoomLiveUser,
-  IWsMessage,
-  SwitchEnum,
-  WsMessageContentTypeEnum,
-  WsMessageIsBilibiliEnum,
-} from '@/interface';
-import router, { routerName } from '@/router';
-import { WEBSOCKET_URL } from '@/spec-config';
-import { useAppStore } from '@/store/app';
-import { useNetworkStore } from '@/store/network';
-import { useUserStore } from '@/store/user';
-import { LiveRoomTypeEnum } from '@/types/ILiveRoom';
-import {
-  WsAnswerType,
-  WsBatchSendOffer,
-  WsCandidateType,
-  WsConnectStatusEnum,
-  WsDisableSpeakingType,
-  WsJoinType,
-  WsLeavedType,
-  WsLivePkKeyType,
-  WsMessageType,
-  WsMsgTypeEnum,
-  WsOfferType,
-  WsOtherJoinType,
-  WsRoomLivingType,
-  WsStartLiveType,
-} from '@/types/websocket';
-import {
-  createNullVideo,
-  handleUserMedia,
-  setAudioTrackContentHints,
-  setVideoTrackContentHints,
-} from '@/utils';
-import {
-  WebSocketClass,
-  prettierReceiveWsMsg,
-} from '@/utils/network/webSocket';
-
-export const useWebsocket = () => {
-  const route = useRoute();
-  const appStore = useAppStore();
-  const userStore = useUserStore();
-  const networkStore = useNetworkStore();
-
-  const {
-    maxBitrate,
-    maxFramerate,
-    resolutionRatio,
-    videoContentHint,
-    audioContentHint,
-  } = useRTCParams();
-  const { updateWebRtcMeetingPkConfig, webRtcMeetingPk } = useWebRtcMeetingPk();
-  const { updateWebRtcSrsConfig, webRtcSrs } = useWebRtcSrs();
-  const {
-    updateForwardThirdPartyLiveStreamingConfig,
-    forwardThirdPartyLiveStreaming,
-  } = useForwardThirdPartyLiveStreaming();
-  const { updateWebRtcTencentcloudCssConfig, webRtcTencentcloudCss } =
-    useWebRtcTencentcloudCss();
-  const { updateWebRtcLiveConfig, webRtcLive } = useWebRtcLive();
-  const { updateWebRtcMeetingOneConfig, webRtcMeetingOne } =
-    useWebRtcMeetingOne();
-
-  const connectStatus = ref<WsConnectStatusEnum>();
-  const loopHeartbeatTimer = ref();
-  const loopGetLiveUserTimer = ref();
-  const liveUserList = ref<ILiveRoomLiveUser[]>([]);
-  const roomId = ref('');
-  const roomLiving = ref(false);
-  const isAnchor = ref(false);
-  const isBilibili = ref(false);
-  const canvasVideoStream = ref<MediaStream>();
-  const userStream = ref<MediaStream>();
-  const lastCoverImg = ref('');
-  const currentMaxBitrate = ref(maxBitrate.value[3].value);
-  const currentMaxFramerate = ref(maxFramerate.value[2].value);
-  const currentResolutionRatio = ref(resolutionRatio.value[3].value);
-  const currentVideoContentHint = ref(videoContentHint.value[3].value);
-  const currentAudioContentHint = ref(audioContentHint.value[0].value);
-  const timerObj = ref({});
-  const keepRtcLivingTimer = ref();
-  const damuList = ref<IWsMessage[]>([]);
-  const joinedDelay = 5000;
-  const keepRtcLivingDelay = 5000;
-
-  watch(
-    () => roomLiving.value,
-    (newval) => {
-      if (newval) {
-        appStore.playing = true;
-      } else {
-        appStore.playing = false;
-      }
-    },
-    {
-      immediate: true,
-    }
-  );
-
-  onUnmounted(() => {
-    clearInterval(loopHeartbeatTimer.value);
-    clearInterval(loopGetLiveUserTimer.value);
-  });
-
-  const mySocketId = computed(() => {
-    return networkStore.wsMap.get(roomId.value)?.socketIo?.id || '-1';
-  });
-
-  function sendDanmuTxt(txt: string) {
-    if (!loginTip()) {
-      return;
-    }
-    if (!commentAuthTip()) {
-      return;
-    }
-    if (!txt.trim().length) {
-      window.$message.warning('请输入弹幕内容!');
-      return;
-    }
-    const instance = networkStore.wsMap.get(roomId.value);
-
-    if (!instance) return;
-    const messageData: WsMessageType['data'] = {
-      content: txt,
-      content_type: WsMessageContentTypeEnum.txt,
-      msg_type: DanmuMsgTypeEnum.danmu,
-      live_room_id: Number(roomId.value),
-      is_bilibili: isBilibili.value
-        ? WsMessageIsBilibiliEnum.yes
-        : WsMessageIsBilibiliEnum.no,
-    };
-    instance.send({
-      requestId: getRandomString(8),
-      msgType: WsMsgTypeEnum.message,
-      data: messageData,
-    });
-  }
-
-  function sendDanmuImg(url: string) {
-    if (!loginTip()) {
-      return;
-    }
-    if (!commentAuthTip()) {
-      return;
-    }
-    if (!url.trim().length) {
-      window.$message.warning('图片不能为空!');
-      return;
-    }
-    const instance = networkStore.wsMap.get(roomId.value);
-    if (!instance) return;
-    const requestId = getRandomString(8);
-    const messageData: WsMessageType['data'] = {
-      content: url,
-      content_type: WsMessageContentTypeEnum.img,
-      msg_type: DanmuMsgTypeEnum.danmu,
-      live_room_id: Number(roomId.value),
-      is_bilibili: isBilibili.value
-        ? WsMessageIsBilibiliEnum.yes
-        : WsMessageIsBilibiliEnum.no,
-    };
-    instance.send({
-      requestId,
-      msgType: WsMsgTypeEnum.message,
-      data: messageData,
-    });
-  }
-
-  function sendDanmuReward(txt: string) {
-    if (!loginTip()) {
-      return;
-    }
-    if (!commentAuthTip()) {
-      return;
-    }
-    if (!txt.trim().length) {
-      window.$message.warning('请输入弹幕内容!');
-      return;
-    }
-    const instance = networkStore.wsMap.get(roomId.value);
-    if (!instance) return;
-    const messageData: WsMessageType['data'] = {
-      content: txt,
-      content_type: WsMessageContentTypeEnum.txt,
-      msg_type: DanmuMsgTypeEnum.reward,
-      live_room_id: Number(roomId.value),
-      is_bilibili: isBilibili.value
-        ? WsMessageIsBilibiliEnum.yes
-        : WsMessageIsBilibiliEnum.no,
-    };
-    instance.send({
-      requestId: getRandomString(8),
-      msgType: WsMsgTypeEnum.message,
-      data: messageData,
-    });
-  }
-
-  function handleHeartbeat() {}
-
-  function handleStartLive({
-    cdn,
-    isdev,
-    type,
-    msrDelay,
-    msrMaxDelay,
-  }: {
-    cdn: SwitchEnum;
-    isdev: string;
-    type: LiveRoomTypeEnum;
-    videoEl?: HTMLVideoElement;
-    msrDelay: number;
-    msrMaxDelay: number;
-  }) {
-    if (appStore.liveRoomInfo) {
-      appStore.liveRoomInfo.type = type;
-    }
-    networkStore.wsMap.get(roomId.value)?.send<WsStartLiveType['data']>({
-      requestId: getRandomString(8),
-      msgType: WsMsgTypeEnum.startLive,
-      data: {
-        type,
-        msrDelay,
-        msrMaxDelay,
-      },
-    });
-    if (canvasVideoStream.value) {
-      setVideoTrackContentHints(
-        canvasVideoStream.value,
-        // @ts-ignore
-        currentVideoContentHint.value
-      );
-      setAudioTrackContentHints(
-        canvasVideoStream.value,
-        // @ts-ignore
-        currentAudioContentHint.value
-      );
-    }
-
-    if (type === LiveRoomTypeEnum.srs) {
-      updateWebRtcSrsConfig({
-        isPk: false,
-        roomId: roomId.value,
-        canvasVideoStream: canvasVideoStream.value,
-      });
-      webRtcSrs.newWebRtc({
-        sender: mySocketId.value,
-        receiver: 'srs',
-        videoEl: createNullVideo(),
-      });
-      webRtcSrs.sendOffer({
-        sender: mySocketId.value,
-        receiver: 'srs',
-      });
-    } else if (
-      [
-        LiveRoomTypeEnum.forward_all,
-        LiveRoomTypeEnum.forward_bilibili,
-        LiveRoomTypeEnum.forward_douyin,
-        LiveRoomTypeEnum.forward_douyu,
-        LiveRoomTypeEnum.forward_huya,
-        LiveRoomTypeEnum.forward_kuaishou,
-        LiveRoomTypeEnum.forward_xiaohongshu,
-      ].includes(type)
-    ) {
-      updateForwardThirdPartyLiveStreamingConfig({
-        cdn,
-        isdev,
-        liveRoomType: type,
-        isPk: false,
-        roomId: roomId.value,
-        canvasVideoStream: canvasVideoStream.value,
-      });
-      forwardThirdPartyLiveStreaming.newWebRtc({
-        sender: mySocketId.value,
-        receiver: 'srs',
-        videoEl: createNullVideo(),
-      });
-      forwardThirdPartyLiveStreaming.sendOffer({
-        sender: mySocketId.value,
-        receiver: 'srs',
-      });
-    } else if (type === LiveRoomTypeEnum.tencent_css) {
-      updateWebRtcTencentcloudCssConfig({
-        isPk: false,
-        roomId: roomId.value,
-        canvasVideoStream: canvasVideoStream.value,
-      });
-      webRtcTencentcloudCss.newWebRtc({
-        sender: mySocketId.value,
-        receiver: 'tencentcloud_css',
-        videoEl: createNullVideo(),
-      });
-      webRtcTencentcloudCss.sendOffer({
-        sender: mySocketId.value,
-        receiver: 'tencentcloud_css',
-      });
-    } else if (type === LiveRoomTypeEnum.pk) {
-      updateWebRtcSrsConfig({
-        isPk: true,
-        roomId: roomId.value,
-        canvasVideoStream: canvasVideoStream.value,
-      });
-      webRtcSrs.newWebRtc({
-        sender: mySocketId.value,
-        receiver: 'srs',
-        videoEl: createNullVideo(),
-      });
-      webRtcSrs.sendOffer({
-        sender: mySocketId.value,
-        receiver: 'srs',
-      });
-    } else if (type === LiveRoomTypeEnum.tencent_css_pk) {
-      updateWebRtcTencentcloudCssConfig({
-        isPk: true,
-        roomId: roomId.value,
-        canvasVideoStream: canvasVideoStream.value,
-      });
-      webRtcTencentcloudCss.newWebRtc({
-        sender: mySocketId.value,
-        receiver: 'tencentcloud_css',
-        videoEl: createNullVideo(),
-      });
-      webRtcTencentcloudCss.sendOffer({
-        sender: mySocketId.value,
-        receiver: 'tencentcloud_css',
-      });
-    } else if (
-      [
-        LiveRoomTypeEnum.wertc_live,
-        LiveRoomTypeEnum.wertc_meeting_one,
-        LiveRoomTypeEnum.wertc_meeting_two,
-      ].includes(type)
-    ) {
-      const main = () => {
-        networkStore.wsMap.get(roomId.value)?.send<WsJoinType['data']>({
-          requestId: getRandomString(8),
-          msgType: WsMsgTypeEnum.keepRtcLiving,
-          data: {
-            live_room_id: Number(roomId.value),
-            duration: keepRtcLivingDelay / 1000,
-          },
-        });
-      };
-      main();
-      keepRtcLivingTimer.value = setInterval(() => {
-        if (!roomLiving.value) {
-          clearInterval(keepRtcLivingTimer.value);
-          return;
-        }
-        main();
-      }, keepRtcLivingDelay);
-    }
-  }
-
-  function sendJoin() {
-    const instance = networkStore.wsMap.get(roomId.value);
-    if (!instance) return;
-    instance.send<WsJoinType['data']>({
-      requestId: getRandomString(8),
-      msgType: WsMsgTypeEnum.join,
-      data: {
-        live_room_id: Number(roomId.value),
-        duration: joinedDelay / 1000,
-      },
-    });
-  }
-
-  function initReceive() {
-    const ws = networkStore.wsMap.get(roomId.value);
-    if (!ws?.socketIo) return;
-    // websocket连接成功
-    ws.socketIo.on(WsConnectStatusEnum.connect, () => {
-      prettierReceiveWsMsg(WsConnectStatusEnum.connect, ws.socketIo);
-      handleHeartbeat();
-      if (!ws) return;
-      connectStatus.value = WsConnectStatusEnum.connect;
-      ws.status = WsConnectStatusEnum.connect;
-      ws.update();
-      sendJoin();
-    });
-
-    // websocket连接断开
-    ws.socketIo.on(WsConnectStatusEnum.disconnect, (err) => {
-      prettierReceiveWsMsg(WsConnectStatusEnum.disconnect, ws);
-      console.log('websocket连接断开', err);
-      if (!ws) return;
-      ws.status = WsConnectStatusEnum.disconnect;
-      ws.update();
-    });
-
-    // 收到livePkKey
-    ws.socketIo.on(WsMsgTypeEnum.livePkKey, (data: WsLivePkKeyType['data']) => {
-      console.log('收到livePkKey', data);
-      const url = router.resolve({
-        name: routerName.pull,
-        params: { roomId: data.live_room_id },
-        query: {
-          [URL_QUERY.pkKey]: data.key,
-        },
-      });
-      const pkurl = `${window.location.origin}${url.href}`;
-      useTip({
-        title: '邀请主播加入PK',
-        width: '360px',
-        hiddenCancel: true,
-        content: h('div', [
-          h('div', { style: { marginBottom: '5px' } }, `${pkurl}`),
-          h(
-            NButton,
-            {
-              size: 'small',
-              type: 'primary',
-              color: THEME_COLOR,
-              onClick: () => {
-                copyToClipBoard(pkurl);
-                window.$message.success('复制成功!');
-              },
-            },
-            () => '复制链接' // 用箭头函数返回性能更好。
-          ),
-          h('div', { style: { marginTop: '5px' } }, '注意,有效期:5分钟'),
-        ]),
-      }).catch(() => {});
-    });
-
-    // 收到srsOffer
-    ws.socketIo.on(WsMsgTypeEnum.srsOffer, (data: WsOfferType['data']) => {
-      console.log('收到srsOffer', data);
-    });
-
-    // 收到srsAnswer
-    ws.socketIo.on(WsMsgTypeEnum.srsAnswer, (data: WsAnswerType['data']) => {
-      console.log('收到srsAnswer', data);
-    });
-
-    // 收到srsCandidate
-    ws.socketIo.on(
-      WsMsgTypeEnum.srsCandidate,
-      (data: WsCandidateType['data']) => {
-        console.log('收到srsCandidate', data);
-        if (data.receiver === mySocketId.value) {
-          console.warn('是发给我的srsCandidate');
-          const rtc = networkStore.rtcMap.get(data.sender);
-          rtc?.addIceCandidate(data.candidate);
-        } else {
-          console.error('不是发给我的srsCandidate');
-        }
-      }
-    );
-
-    // 收到nativeWebRtcOffer
-    ws.socketIo.on(
-      WsMsgTypeEnum.nativeWebRtcOffer,
-      async (data: WsOfferType['data']) => {
-        console.log('收到nativeWebRtcOffer', data);
-
-        if (
-          data.live_room.type === LiveRoomTypeEnum.pk ||
-          data.live_room.type === LiveRoomTypeEnum.tencent_css_pk
-        ) {
-          if (!route.query[URL_QUERY.pkKey]) {
-            return;
-          }
-          if (data.receiver === mySocketId.value) {
-            console.warn('是发给我的nativeWebRtcOffer-pk-tencent_css_pk');
-            updateWebRtcMeetingPkConfig({
-              roomId: roomId.value,
-              anchorStream: canvasVideoStream.value,
-              // userStream: userStream.value,
-            });
-            webRtcMeetingPk.newWebRtc({
-              // 因为这里是收到offer,而offer是房主发的,所以此时的data.data.sender是房主;data.data.receiver是接收者;
-              // 但是这里的nativeWebRtc的sender,得是自己,不能是data.data.sender,不要混淆
-              sender: mySocketId.value,
-              receiver: data.sender,
-              videoEl: createNullVideo(),
-            });
-            webRtcMeetingPk.addTrack({
-              stream: userStream.value,
-              receiver: data.sender,
-            });
-            await webRtcMeetingPk.sendAnswer({
-              sender: mySocketId.value,
-              // data.data.receiver是接收者;我们现在new pc,发送者是自己,接收者肯定是房主,不能是data.data.receiver,因为data.data.receiver是自己
-              receiver: data.sender,
-              sdp: data.sdp,
-            });
-          } else {
-            console.error('不是发给我的nativeWebRtcOffer');
-          }
-        }
-      }
-    );
-
-    // 收到nativeWebRtcAnswer
-    ws.socketIo.on(
-      WsMsgTypeEnum.nativeWebRtcAnswer,
-      async (data: WsAnswerType['data']) => {
-        console.log('收到nativeWebRtcAnswer', data);
-        if (data.receiver === mySocketId.value) {
-          console.warn('是发给我的nativeWebRtcAnswer');
-          const rtc = networkStore.rtcMap.get(data.sender);
-          if (rtc) {
-            await rtc.setRemoteDescription(data.sdp);
-          }
-        } else {
-          console.error('不是发给我的nativeWebRtcAnswer');
-        }
-      }
-    );
-
-    // 收到nativeWebRtcCandidate
-    ws.socketIo.on(
-      WsMsgTypeEnum.nativeWebRtcCandidate,
-      (data: WsCandidateType['data']) => {
-        console.log('收到nativeWebRtcCandidate', data);
-        if (data.receiver === mySocketId.value) {
-          console.warn('是发给我的nativeWebRtcCandidate');
-          const rtc = networkStore.rtcMap.get(data.sender);
-          rtc?.addIceCandidate(data.candidate);
-        } else {
-          console.error('不是发给我的nativeWebRtcCandidate');
-        }
-      }
-    );
-
-    // 主播正在直播
-    ws.socketIo.on(
-      WsMsgTypeEnum.roomLiving,
-      async (data: WsRoomLivingType['data']) => {
-        prettierReceiveWsMsg(WsMsgTypeEnum.roomLiving, data);
-        roomLiving.value = true;
-        if (data.live_room_id !== Number(roomId.value)) {
-          return;
-        }
-        if (
-          route.name === routerName.pull ||
-          route.name === routerName.h5Room
-        ) {
-          // 当前是拉流页面
-          if (
-            appStore.liveRoomInfo?.type === LiveRoomTypeEnum.wertc_meeting_one
-          ) {
-            await handleMeeting();
-          } else if (appStore.liveRoomInfo?.type === LiveRoomTypeEnum.pk) {
-            await handlePk();
-          }
-        } else if (route.name === routerName.push) {
-          // 当前是推流页面
-        }
-      }
-    );
-
-    // 主播不在直播
-    ws.socketIo.on(WsMsgTypeEnum.roomNoLive, (data) => {
-      prettierReceiveWsMsg(WsMsgTypeEnum.roomNoLive, data);
-      roomLiving.value = false;
-    });
-
-    // 收到用户发送消息
-    ws.socketIo.on(WsMsgTypeEnum.message, (data: WsMessageType) => {
-      prettierReceiveWsMsg(WsMsgTypeEnum.message, data);
-      // @ts-ignore
-      data.data.send_msg_time = new Date(
-        data.data.send_msg_time!
-      ).toLocaleString();
-      damuList.value.push(data.data);
-    });
-
-    // 收到disableSpeaking
-    ws.socketIo.on(
-      WsMsgTypeEnum.disableSpeaking,
-      (data: WsDisableSpeakingType['data']) => {
-        prettierReceiveWsMsg(WsMsgTypeEnum.disableSpeaking, data);
-        // if (data.is_disable_speaking) {
-        //   window.$message.error('你已被禁言!');
-        //   appStore.disableSpeaking.set(data.live_room_id, {
-        //     exp: data.disable_expired_at,
-        //     label: formatDownTime({
-        //       startTime: +new Date(),
-        //       endTime: data.disable_expired_at,
-        //     }),
-        //   });
-        //   clearTimeout(timerObj.value[data.live_room_id]);
-        //   timerObj.value[data.live_room_id] = setInterval(() => {
-        //     if (
-        //       data.disable_expired_at &&
-        //       +new Date() > data.disable_expired_at
-        //     ) {
-        //       clearTimeout(timerObj.value[data.live_room_id]);
-        //     }
-        //     appStore.disableSpeaking.set(data.live_room_id, {
-        //       exp: data.disable_expired_at!,
-        //       label: formatDownTime({
-        //         startTime: +new Date(),
-        //         endTime: data.disable_expired_at!,
-        //       }),
-        //     });
-        //   }, 1000);
-        //   damuList.value = damuList.value.filter(
-        //     (v) => v.request_id !== data.request_id
-        //   );
-        // }
-        if (data.user_id !== userStore.userInfo?.id && data.disable_ok) {
-          window.$message.success('禁言成功!');
-        }
-        if (
-          data.user_id !== userStore.userInfo?.id &&
-          data.restore_disable_ok
-        ) {
-          window.$message.success('解除禁言成功!');
-        }
-        if (
-          data.user_id === userStore.userInfo?.id &&
-          data.restore_disable_ok
-        ) {
-          window.$message.success('禁言接触了!');
-          clearTimeout(timerObj.value[data.live_room_id]);
-          appStore.disableSpeaking.delete(data.live_room_id);
-        }
-      }
-    );
-
-    async function handleMeeting() {
-      await useTip({
-        content: '是否加入会议?',
-      });
-      const stream = await handleUserMedia({
-        video: true,
-        audio: true,
-      });
-      userStream.value = stream;
-      networkStore.wsMap.get(roomId.value)?.send<WsBatchSendOffer['data']>({
-        requestId: getRandomString(8),
-        msgType: WsMsgTypeEnum.batchSendOffer,
-        data: {
-          roomId: roomId.value,
-        },
-      });
-    }
-
-    async function handlePk() {
-      if (!route.query[URL_QUERY.pkKey]) {
-        return;
-      }
-      const res = await fetchVerifyPkKey({
-        liveRoomId: Number(roomId.value),
-        key: route.query[URL_QUERY.pkKey],
-      });
-      if (res.code === 200 && res.data === true) {
-        await useTip({
-          content: '是否加入PK?',
-        });
-        const stream = await handleUserMedia({
-          video: true,
-          audio: true,
-        });
-        userStream.value = stream;
-        networkStore.wsMap.get(roomId.value)?.send<WsBatchSendOffer['data']>({
-          requestId: getRandomString(8),
-          msgType: WsMsgTypeEnum.batchSendOffer,
-          data: {
-            roomId: roomId.value,
-          },
-        });
-      } else {
-        await useTip({
-          content: '加入PK失败,验证pkKey错误!',
-          hiddenCancel: true,
-          hiddenClose: true,
-        });
-      }
-    }
-
-    // 用户加入房间完成
-    ws.socketIo.on(WsMsgTypeEnum.joined, async (data: WsJoinType['data']) => {
-      prettierReceiveWsMsg(WsMsgTypeEnum.joined, data);
-      setInterval(() => {
-        networkStore.wsMap.get(roomId.value)?.send<WsJoinType['data']>({
-          requestId: getRandomString(8),
-          msgType: WsMsgTypeEnum.keepJoined,
-          data: {
-            live_room_id: Number(roomId.value),
-            duration: joinedDelay / 1000,
-          },
-        });
-      }, joinedDelay);
-      if (route.name === routerName.pull || route.name === routerName.h5Room) {
-        // 当前是拉流页面
-        if (
-          roomLiving.value &&
-          data.live_room?.type === LiveRoomTypeEnum.wertc_meeting_one
-        ) {
-          await handleMeeting();
-        } else if (
-          roomLiving.value &&
-          data.live_room?.type === LiveRoomTypeEnum.pk
-        ) {
-          await handlePk();
-        }
-      }
-    });
-
-    // batchSendOffer
-    ws.socketIo.on(
-      WsMsgTypeEnum.batchSendOffer,
-      (data: WsBatchSendOffer['data']) => {
-        if (
-          appStore.liveRoomInfo?.type === LiveRoomTypeEnum.wertc_meeting_one
-        ) {
-          data.socket_list?.forEach((item) => {
-            if (item !== mySocketId.value) {
-              if (networkStore.rtcMap.get(item)) {
-                return;
-              }
-              webRtcMeetingOne.newWebRtc({
-                sender: mySocketId.value,
-                receiver: item,
-                videoEl: createNullVideo(),
-                sucessCb: () => {},
-              });
-              webRtcMeetingOne.sendOffer({
-                sender: mySocketId.value,
-                receiver: item,
-              });
-            }
-          });
-        } else if (appStore.liveRoomInfo?.type === LiveRoomTypeEnum.pk) {
-          data.socket_list?.forEach((item) => {
-            if (item !== mySocketId.value) {
-              if (networkStore.rtcMap.get(item)) {
-                return;
-              }
-              webRtcMeetingPk.newWebRtc({
-                sender: mySocketId.value,
-                receiver: item,
-                videoEl: createNullVideo(),
-              });
-              webRtcMeetingPk.sendOffer({
-                sender: mySocketId.value,
-                receiver: item,
-              });
-            }
-          });
-        }
-      }
-    );
-
-    // 其他用户加入房间
-    ws.socketIo.on(WsMsgTypeEnum.otherJoin, (data: WsOtherJoinType['data']) => {
-      prettierReceiveWsMsg(WsMsgTypeEnum.otherJoin, data);
-      const danmu: IWsMessage = {
-        username: data.join_user_info?.username,
-        send_msg_time: +new Date(),
-        live_room_id: data.live_room_id!,
-        id: -1,
-        content: '',
-        content_type: WsMessageContentTypeEnum.txt,
-        msg_type: DanmuMsgTypeEnum.otherJoin,
-      };
-      damuList.value.push(danmu);
-      if (route.name === routerName.push) {
-        // 当前是推流页面
-        if (!isAnchor.value) {
-          console.error('不是主播');
-          return;
-        }
-        if (!roomLiving.value) {
-          console.error('主播没点开始直播');
-          return;
-        }
-        if (userStore.userInfo?.id === data.join_user_info?.id) {
-          console.error('自己进入直播间,退出');
-          return;
-        }
-        const liveRoomType = appStore.liveRoomInfo?.type;
-        if (liveRoomType === LiveRoomTypeEnum.wertc_live) {
-          updateWebRtcLiveConfig({
-            roomId: roomId.value,
-            canvasVideoStream: canvasVideoStream.value,
-          });
-          data.socket_list.forEach((item) => {
-            if (item !== mySocketId.value) {
-              if (networkStore.rtcMap.get(item)) {
-                return;
-              }
-              webRtcLive.newWebRtc({
-                sender: mySocketId.value,
-                receiver: item,
-                videoEl: createNullVideo(),
-                sucessCb: () => {},
-              });
-              webRtcLive.sendOffer({
-                sender: mySocketId.value,
-                receiver: item,
-              });
-            }
-          });
-        } else if (liveRoomType === LiveRoomTypeEnum.wertc_meeting_one) {
-          updateWebRtcMeetingOneConfig({
-            roomId: roomId.value,
-            anchorStream: canvasVideoStream.value,
-          });
-          data.socket_list?.forEach((item) => {
-            if (item !== mySocketId.value) {
-              if (networkStore.rtcMap.get(item)) {
-                return;
-              }
-              webRtcMeetingOne.newWebRtc({
-                sender: mySocketId.value,
-                receiver: item,
-                videoEl: createNullVideo(),
-                sucessCb: () => {},
-              });
-              webRtcMeetingOne.sendOffer({
-                sender: mySocketId.value,
-                receiver: item,
-              });
-            }
-          });
-        } else if (liveRoomType === LiveRoomTypeEnum.pk) {
-          updateWebRtcMeetingPkConfig({
-            roomId: roomId.value,
-            anchorStream: canvasVideoStream.value,
-          });
-          // data.socket_list?.forEach((item) => {
-          //   if (item !== mySocketId.value) {
-          //     if (networkStore.rtcMap.get(item)) {
-          //       return;
-          //     }
-          //     webRtcMeetingPk.newWebRtc({
-          //       sender: mySocketId.value,
-          //       receiver: item,
-          //       videoEl: createNullVideo(),
-          //     });
-          //     webRtcMeetingPk.sendOffer({
-          //       sender: mySocketId.value,
-          //       receiver: item,
-          //     });
-          //   }
-          // });
-        } else if (liveRoomType === LiveRoomTypeEnum.tencent_css_pk) {
-          updateWebRtcMeetingPkConfig({
-            roomId: roomId.value,
-            anchorStream: canvasVideoStream.value,
-          });
-          data.socket_list?.forEach((item) => {
-            if (item !== mySocketId.value) {
-              if (networkStore.rtcMap.get(item)) {
-                return;
-              }
-              webRtcMeetingPk.newWebRtc({
-                sender: mySocketId.value,
-                receiver: item,
-                videoEl: createNullVideo(),
-              });
-              webRtcMeetingPk.sendOffer({
-                sender: mySocketId.value,
-                receiver: item,
-              });
-            }
-          });
-        }
-      } else {
-        // 当前不是推流页面
-      }
-    });
-
-    // 用户离开房间
-    ws.socketIo.on(WsMsgTypeEnum.leave, (data) => {
-      prettierReceiveWsMsg(WsMsgTypeEnum.leave, data);
-    });
-
-    // 用户离开房间完成
-    ws.socketIo.on(WsMsgTypeEnum.leaved, (data: WsLeavedType['data']) => {
-      prettierReceiveWsMsg(WsMsgTypeEnum.leaved, data);
-      console.log('用户离开房间完成', data);
-      networkStore.removeRtc(data.socket_id);
-      damuList.value.push({
-        ...data,
-        send_msg_time: +new Date(),
-        live_room_id: Number(roomId.value),
-        id: -1,
-        content: '',
-        content_type: WsMessageContentTypeEnum.txt,
-        msg_type: DanmuMsgTypeEnum.userLeaved,
-      });
-    });
-  }
-
-  function initRoomId(id: string) {
-    roomId.value = id;
-  }
-
-  function initWs(data: {
-    isAnchor: boolean;
-    roomId: string;
-    isBilibili?: boolean;
-    currentResolutionRatio?: number;
-    currentMaxFramerate?: number;
-    currentMaxBitrate?: number;
-  }) {
-    initRoomId(data.roomId);
-    isAnchor.value = data.isAnchor;
-
-    if (data.isBilibili !== undefined) {
-      isBilibili.value = data.isBilibili;
-    }
-    if (data.currentMaxBitrate !== undefined) {
-      currentMaxBitrate.value = data.currentMaxBitrate;
-    }
-    if (data.currentMaxFramerate !== undefined) {
-      currentMaxFramerate.value = data.currentMaxFramerate;
-    }
-    if (data.currentResolutionRatio !== undefined) {
-      currentResolutionRatio.value = data.currentResolutionRatio;
-    }
-    new WebSocketClass({
-      roomId: roomId.value,
-      url: WEBSOCKET_URL,
-      isAnchor: data.isAnchor,
-    });
-    initReceive();
-  }
-
-  return {
-    initRoomId,
-    initWs,
-    handleStartLive,
-    sendDanmuTxt,
-    sendDanmuImg,
-    sendDanmuReward,
-    keepRtcLivingTimer,
-    isBilibili,
-    connectStatus,
-    mySocketId,
-    canvasVideoStream,
-    lastCoverImg,
-    roomLiving,
-    liveUserList,
-    damuList,
-    currentMaxFramerate,
-    currentMaxBitrate,
-    currentResolutionRatio,
-    currentAudioContentHint,
-    currentVideoContentHint,
-  };
-};

+ 0 - 118
src/hooks/webrtc/forwardAll.ts

@@ -1,118 +0,0 @@
-import { ref } from 'vue';
-
-import { fetchRtcV1Publish } from '@/api/srs';
-import { SRS_CB_URL_QUERY } from '@/constant';
-import { useRTCParams } from '@/hooks/use-rtcParams';
-import { useNetworkStore } from '@/store/network';
-import { useUserStore } from '@/store/user';
-import { LiveRoomTypeEnum } from '@/types/ILiveRoom';
-import { WebRTCClass } from '@/utils/network/webRTC';
-
-export const useForwardAll = () => {
-  const userStore = useUserStore();
-  const networkStore = useNetworkStore();
-
-  const { maxBitrate, maxFramerate, resolutionRatio } = useRTCParams();
-  const currentMaxBitrate = ref(maxBitrate.value[3].value);
-  const currentMaxFramerate = ref(maxFramerate.value[2].value);
-  const currentResolutionRatio = ref(resolutionRatio.value[3].value);
-  const isPk = ref(false);
-  const roomId = ref('');
-  const canvasVideoStream = ref<MediaStream>();
-
-  function updateForwardAllConfig(data: { isPk; roomId; canvasVideoStream }) {
-    isPk.value = data.isPk;
-    roomId.value = data.roomId;
-    canvasVideoStream.value = data.canvasVideoStream;
-  }
-
-  const forwardAll = {
-    newWebRtc: (data: {
-      sender: string;
-      receiver: string;
-      videoEl: HTMLVideoElement;
-    }) => {
-      return new WebRTCClass({
-        maxBitrate: currentMaxBitrate.value,
-        maxFramerate: currentMaxFramerate.value,
-        resolutionRatio: currentResolutionRatio.value,
-        isSRS: true,
-        roomId: roomId.value,
-        videoEl: data.videoEl,
-        sender: data.sender,
-        receiver: data.receiver,
-      });
-    },
-    /**
-     * 主播发offer给观众
-     */
-    sendOffer: async ({
-      sender,
-      receiver,
-    }: {
-      sender: string;
-      receiver: string;
-    }) => {
-      console.log('开始ForwardAll的sendOffer', {
-        sender,
-        receiver,
-      });
-      try {
-        const ws = networkStore.wsMap.get(roomId.value);
-        if (!ws) return;
-        const rtc = networkStore.rtcMap.get(receiver);
-        if (rtc) {
-          canvasVideoStream.value?.getTracks().forEach((track) => {
-            if (canvasVideoStream.value) {
-              console.log(
-                'ForwardAll的canvasVideoStream插入track',
-                track.kind,
-                track
-              );
-              rtc.peerConnection?.addTrack(track, canvasVideoStream.value);
-            }
-          });
-          const offerSdp = await rtc.createOffer();
-          if (!offerSdp) {
-            console.error('ForwardAll的offerSdp为空');
-            window.$message.error('ForwardAll的offerSdp为空');
-            return;
-          }
-          await rtc.setLocalDescription(offerSdp!);
-          const liveRooms = userStore.userInfo?.live_rooms;
-          const myLiveRoom = liveRooms?.[0];
-          if (!myLiveRoom) {
-            window.$message.error('你没有开通直播间');
-            return;
-          }
-          const answerRes = await fetchRtcV1Publish({
-            sdp: offerSdp.sdp!,
-            streamurl: `${myLiveRoom.pull_rtmp_url!}?${
-              SRS_CB_URL_QUERY.publishKey
-            }=${myLiveRoom.key!}&${SRS_CB_URL_QUERY.publishType}=${
-              isPk.value ? LiveRoomTypeEnum.pk : LiveRoomTypeEnum.forward_all
-            }&${SRS_CB_URL_QUERY.userId}=${userStore.userInfo?.id!}`,
-          });
-          if (answerRes.data.code !== 0) {
-            console.error('/rtc/v1/publish/拿不到sdp');
-            window.$message.error('/rtc/v1/publish/拿不到sdp');
-            return;
-          }
-          await rtc.setRemoteDescription(
-            new RTCSessionDescription({
-              type: 'answer',
-              sdp: answerRes.data.sdp,
-            })
-          );
-        } else {
-          console.error('rtc不存在');
-        }
-      } catch (error) {
-        console.error('ForwardAll的sendOffer错误');
-        console.log(error);
-      }
-    },
-  };
-
-  return { updateForwardAllConfig, forwardAll };
-};

+ 0 - 124
src/hooks/webrtc/forwardBilibili.ts

@@ -1,124 +0,0 @@
-import { ref } from 'vue';
-
-import { fetchRtcV1Publish } from '@/api/srs';
-import { SRS_CB_URL_QUERY } from '@/constant';
-import { useRTCParams } from '@/hooks/use-rtcParams';
-import { useNetworkStore } from '@/store/network';
-import { useUserStore } from '@/store/user';
-import { LiveRoomTypeEnum } from '@/types/ILiveRoom';
-import { WebRTCClass } from '@/utils/network/webRTC';
-
-export const useForwardBilibili = () => {
-  const userStore = useUserStore();
-  const networkStore = useNetworkStore();
-
-  const { maxBitrate, maxFramerate, resolutionRatio } = useRTCParams();
-  const currentMaxBitrate = ref(maxBitrate.value[3].value);
-  const currentMaxFramerate = ref(maxFramerate.value[2].value);
-  const currentResolutionRatio = ref(resolutionRatio.value[3].value);
-  const isPk = ref(false);
-  const roomId = ref('');
-  const canvasVideoStream = ref<MediaStream>();
-
-  function updateForwardBilibiliConfig(data: {
-    isPk;
-    roomId;
-    canvasVideoStream;
-  }) {
-    isPk.value = data.isPk;
-    roomId.value = data.roomId;
-    canvasVideoStream.value = data.canvasVideoStream;
-  }
-
-  const forwardBilibili = {
-    newWebRtc: (data: {
-      sender: string;
-      receiver: string;
-      videoEl: HTMLVideoElement;
-    }) => {
-      return new WebRTCClass({
-        maxBitrate: currentMaxBitrate.value,
-        maxFramerate: currentMaxFramerate.value,
-        resolutionRatio: currentResolutionRatio.value,
-        isSRS: true,
-        roomId: roomId.value,
-        videoEl: data.videoEl,
-        sender: data.sender,
-        receiver: data.receiver,
-      });
-    },
-    /**
-     * 主播发offer给观众
-     */
-    sendOffer: async ({
-      sender,
-      receiver,
-    }: {
-      sender: string;
-      receiver: string;
-    }) => {
-      console.log('开始ForwardBilibili的sendOffer', {
-        sender,
-        receiver,
-      });
-      try {
-        const ws = networkStore.wsMap.get(roomId.value);
-        if (!ws) return;
-        const rtc = networkStore.rtcMap.get(receiver);
-        if (rtc) {
-          canvasVideoStream.value?.getTracks().forEach((track) => {
-            if (canvasVideoStream.value) {
-              console.log(
-                'ForwardBilibili的canvasVideoStream插入track',
-                track.kind,
-                track
-              );
-              rtc.peerConnection?.addTrack(track, canvasVideoStream.value);
-            }
-          });
-          const offerSdp = await rtc.createOffer();
-          if (!offerSdp) {
-            console.error('ForwardBilibili的offerSdp为空');
-            window.$message.error('ForwardBilibili的offerSdp为空');
-            return;
-          }
-          await rtc.setLocalDescription(offerSdp!);
-          const liveRooms = userStore.userInfo?.live_rooms;
-          const myLiveRoom = liveRooms?.[0];
-          if (!myLiveRoom) {
-            window.$message.error('你没有开通直播间');
-            return;
-          }
-          const answerRes = await fetchRtcV1Publish({
-            sdp: offerSdp.sdp!,
-            streamurl: `${myLiveRoom.pull_rtmp_url!}?${
-              SRS_CB_URL_QUERY.publishKey
-            }=${myLiveRoom.key!}&${SRS_CB_URL_QUERY.publishType}=${
-              isPk.value
-                ? LiveRoomTypeEnum.pk
-                : LiveRoomTypeEnum.forward_bilibili
-            }&${SRS_CB_URL_QUERY.userId}=${userStore.userInfo?.id!}`,
-          });
-          if (answerRes.data.code !== 0) {
-            console.error('/rtc/v1/publish/拿不到sdp');
-            window.$message.error('/rtc/v1/publish/拿不到sdp');
-            return;
-          }
-          await rtc.setRemoteDescription(
-            new RTCSessionDescription({
-              type: 'answer',
-              sdp: answerRes.data.sdp,
-            })
-          );
-        } else {
-          console.error('rtc不存在');
-        }
-      } catch (error) {
-        console.error('ForwardBilibili的sendOffer错误');
-        console.log(error);
-      }
-    },
-  };
-
-  return { updateForwardBilibiliConfig, forwardBilibili };
-};

+ 0 - 118
src/hooks/webrtc/forwardHuya.ts

@@ -1,118 +0,0 @@
-import { ref } from 'vue';
-
-import { fetchRtcV1Publish } from '@/api/srs';
-import { SRS_CB_URL_QUERY } from '@/constant';
-import { useRTCParams } from '@/hooks/use-rtcParams';
-import { useNetworkStore } from '@/store/network';
-import { useUserStore } from '@/store/user';
-import { LiveRoomTypeEnum } from '@/types/ILiveRoom';
-import { WebRTCClass } from '@/utils/network/webRTC';
-
-export const useForwardHuya = () => {
-  const userStore = useUserStore();
-  const networkStore = useNetworkStore();
-
-  const { maxBitrate, maxFramerate, resolutionRatio } = useRTCParams();
-  const currentMaxBitrate = ref(maxBitrate.value[3].value);
-  const currentMaxFramerate = ref(maxFramerate.value[2].value);
-  const currentResolutionRatio = ref(resolutionRatio.value[3].value);
-  const isPk = ref(false);
-  const roomId = ref('');
-  const canvasVideoStream = ref<MediaStream>();
-
-  function updateForwardHuyaConfig(data: { isPk; roomId; canvasVideoStream }) {
-    isPk.value = data.isPk;
-    roomId.value = data.roomId;
-    canvasVideoStream.value = data.canvasVideoStream;
-  }
-
-  const forwardHuya = {
-    newWebRtc: (data: {
-      sender: string;
-      receiver: string;
-      videoEl: HTMLVideoElement;
-    }) => {
-      return new WebRTCClass({
-        maxBitrate: currentMaxBitrate.value,
-        maxFramerate: currentMaxFramerate.value,
-        resolutionRatio: currentResolutionRatio.value,
-        isSRS: true,
-        roomId: roomId.value,
-        videoEl: data.videoEl,
-        sender: data.sender,
-        receiver: data.receiver,
-      });
-    },
-    /**
-     * 主播发offer给观众
-     */
-    sendOffer: async ({
-      sender,
-      receiver,
-    }: {
-      sender: string;
-      receiver: string;
-    }) => {
-      console.log('开始ForwardHuya的sendOffer', {
-        sender,
-        receiver,
-      });
-      try {
-        const ws = networkStore.wsMap.get(roomId.value);
-        if (!ws) return;
-        const rtc = networkStore.rtcMap.get(receiver);
-        if (rtc) {
-          canvasVideoStream.value?.getTracks().forEach((track) => {
-            if (canvasVideoStream.value) {
-              console.log(
-                'ForwardHuya的canvasVideoStream插入track',
-                track.kind,
-                track
-              );
-              rtc.peerConnection?.addTrack(track, canvasVideoStream.value);
-            }
-          });
-          const offerSdp = await rtc.createOffer();
-          if (!offerSdp) {
-            console.error('ForwardHuya的offerSdp为空');
-            window.$message.error('ForwardHuya的offerSdp为空');
-            return;
-          }
-          await rtc.setLocalDescription(offerSdp!);
-          const liveRooms = userStore.userInfo?.live_rooms;
-          const myLiveRoom = liveRooms?.[0];
-          if (!myLiveRoom) {
-            window.$message.error('你没有开通直播间');
-            return;
-          }
-          const answerRes = await fetchRtcV1Publish({
-            sdp: offerSdp.sdp!,
-            streamurl: `${myLiveRoom.pull_rtmp_url!}?${
-              SRS_CB_URL_QUERY.publishKey
-            }=${myLiveRoom.key!}&${SRS_CB_URL_QUERY.publishType}=${
-              isPk.value ? LiveRoomTypeEnum.pk : LiveRoomTypeEnum.forward_huya
-            }&${SRS_CB_URL_QUERY.userId}=${userStore.userInfo?.id!}`,
-          });
-          if (answerRes.data.code !== 0) {
-            console.error('/rtc/v1/publish/拿不到sdp');
-            window.$message.error('/rtc/v1/publish/拿不到sdp');
-            return;
-          }
-          await rtc.setRemoteDescription(
-            new RTCSessionDescription({
-              type: 'answer',
-              sdp: answerRes.data.sdp,
-            })
-          );
-        } else {
-          console.error('rtc不存在');
-        }
-      } catch (error) {
-        console.error('ForwardHuya的sendOffer错误');
-        console.log(error);
-      }
-    },
-  };
-
-  return { updateForwardHuyaConfig, forwardHuya };
-};

+ 0 - 153
src/hooks/webrtc/forwardThirdPartyLiveStreaming.ts

@@ -1,153 +0,0 @@
-import { ref } from 'vue';
-
-import { fetchRtcV1Publish } from '@/api/srs';
-import { fetchTencentcloudCssPush } from '@/api/tencentcloudCss';
-import { SRS_CB_URL_QUERY } from '@/constant';
-import { useRTCParams } from '@/hooks/use-rtcParams';
-import { SwitchEnum } from '@/interface';
-import { useNetworkStore } from '@/store/network';
-import { useUserStore } from '@/store/user';
-import { LiveRoomTypeEnum } from '@/types/ILiveRoom';
-import { WebRTCClass } from '@/utils/network/webRTC';
-
-export function useForwardThirdPartyLiveStreaming() {
-  const userStore = useUserStore();
-  const networkStore = useNetworkStore();
-  const { maxBitrate, maxFramerate, resolutionRatio } = useRTCParams();
-  const currentMaxBitrate = ref(maxBitrate.value[3].value);
-  const currentMaxFramerate = ref(maxFramerate.value[2].value);
-  const currentResolutionRatio = ref(resolutionRatio.value[3].value);
-  const isPk = ref(false);
-  const roomId = ref('');
-  const canvasVideoStream = ref<MediaStream>();
-  const cdn = ref<SwitchEnum>();
-  const isdev = ref<string>('2');
-  const liveRoomType = ref<LiveRoomTypeEnum>();
-
-  function updateForwardThirdPartyLiveStreamingConfig(data: {
-    cdn: SwitchEnum;
-    isdev: string;
-    liveRoomType: LiveRoomTypeEnum;
-    isPk;
-    roomId;
-    canvasVideoStream;
-  }) {
-    cdn.value = data.cdn;
-    isdev.value = data.isdev;
-    liveRoomType.value = data.liveRoomType;
-    isPk.value = data.isPk;
-    roomId.value = data.roomId;
-    canvasVideoStream.value = data.canvasVideoStream;
-  }
-
-  const forwardThirdPartyLiveStreaming = {
-    newWebRtc: (data: {
-      sender: string;
-      receiver: string;
-      videoEl: HTMLVideoElement;
-    }) => {
-      return new WebRTCClass({
-        maxBitrate: currentMaxBitrate.value,
-        maxFramerate: currentMaxFramerate.value,
-        resolutionRatio: currentResolutionRatio.value,
-        isSRS: true,
-        roomId: roomId.value,
-        videoEl: data.videoEl,
-        sender: data.sender,
-        receiver: data.receiver,
-      });
-    },
-    /**
-     * 主播发offer给观众
-     */
-    sendOffer: async ({
-      sender,
-      receiver,
-    }: {
-      sender: string;
-      receiver: string;
-    }) => {
-      console.log('开始ForwardThirdPartyLiveStreaming的sendOffer', {
-        sender,
-        receiver,
-      });
-      try {
-        const liveRooms = userStore.userInfo?.live_rooms;
-        const myLiveRoom = liveRooms?.[0];
-        if (!myLiveRoom) {
-          window.$message.error('你没有开通直播间');
-          return;
-        }
-        const ws = networkStore.wsMap.get(roomId.value);
-        if (!ws) return;
-        const rtc = networkStore.rtcMap.get(receiver);
-        if (rtc) {
-          canvasVideoStream.value?.getTracks().forEach((track) => {
-            if (canvasVideoStream.value) {
-              console.log(
-                'ForwardThirdPartyLiveStreaming的canvasVideoStream插入track',
-                track.kind,
-                track
-              );
-              rtc.peerConnection?.addTrack(track, canvasVideoStream.value);
-            }
-          });
-          const offerSdp = await rtc.createOffer();
-          if (!offerSdp) {
-            console.error('ForwardThirdPartyLiveStreaming的offerSdp为空');
-            window.$message.error(
-              'ForwardThirdPartyLiveStreaming的offerSdp为空'
-            );
-            return;
-          }
-          await rtc.setLocalDescription(offerSdp!);
-          if (cdn.value === SwitchEnum.no) {
-            const answerRes = await fetchRtcV1Publish({
-              sdp: offerSdp.sdp!,
-              streamurl: `${myLiveRoom.pull_rtmp_url!}?${
-                SRS_CB_URL_QUERY.publishKey
-              }=${myLiveRoom.key!}&${SRS_CB_URL_QUERY.publishType}=${
-                isPk.value ? LiveRoomTypeEnum.pk : liveRoomType.value!
-              }&${SRS_CB_URL_QUERY.userId}=${userStore.userInfo?.id!}&${
-                SRS_CB_URL_QUERY.isdev
-              }=${isdev.value}`,
-            });
-            if (answerRes.data.code !== 0) {
-              console.error('/rtc/v1/publish/拿不到sdp');
-              window.$message.error('/rtc/v1/publish/拿不到sdp');
-              return;
-            }
-            await rtc.setRemoteDescription(
-              new RTCSessionDescription({
-                type: 'answer',
-                sdp: answerRes.data.sdp,
-              })
-            );
-          } else {
-            const res = await fetchTencentcloudCssPush(myLiveRoom.id!);
-            if (res.code === 200) {
-              const livePusher = new window.TXLivePusher();
-              // https://cloud.tencent.com/document/product/267/92713#1a9164cf-9f99-47d5-9667-ea558886cb9f
-              // 使用用户自定义的音视频流。
-              await livePusher.startCustomCapture(canvasVideoStream.value);
-              const pushurl = res.data.webrtc_url
-                ?.replace(/&isdev=\w+/g, `&isdev=${isdev.value}`)
-                .replace(/&pushtype=\w+/g, `&pushtype=${liveRoomType.value!}`);
-              livePusher.startPush(pushurl);
-            }
-          }
-        } else {
-          console.error('rtc不存在');
-        }
-      } catch (error) {
-        console.error('ForwardThirdPartyLiveStreaming的sendOffer错误');
-        console.log(error);
-      }
-    },
-  };
-
-  return {
-    updateForwardThirdPartyLiveStreamingConfig,
-    forwardThirdPartyLiveStreaming,
-  };
-}

+ 0 - 148
src/hooks/webrtc/live.ts

@@ -1,148 +0,0 @@
-import { getRandomString } from 'billd-utils';
-import { ref } from 'vue';
-
-import { useRTCParams } from '@/hooks/use-rtcParams';
-import { useAppStore } from '@/store/app';
-import { useNetworkStore } from '@/store/network';
-import { WsAnswerType, WsMsgTypeEnum, WsOfferType } from '@/types/websocket';
-import { WebRTCClass } from '@/utils/network/webRTC';
-
-export const useWebRtcLive = () => {
-  const appStore = useAppStore();
-  const networkStore = useNetworkStore();
-
-  const { maxBitrate, maxFramerate, resolutionRatio } = useRTCParams();
-  const currentMaxBitrate = ref(maxBitrate.value[3].value);
-  const currentMaxFramerate = ref(maxFramerate.value[2].value);
-  const currentResolutionRatio = ref(resolutionRatio.value[3].value);
-  const roomId = ref('');
-  const canvasVideoStream = ref<MediaStream>();
-
-  function updateWebRtcLiveConfig(data: { roomId; canvasVideoStream }) {
-    roomId.value = data.roomId;
-    canvasVideoStream.value = data.canvasVideoStream;
-  }
-
-  const webRtcLive = {
-    newWebRtc: (data: {
-      sender: string;
-      receiver: string;
-      videoEl: HTMLVideoElement;
-      sucessCb: (stream) => void;
-    }) => {
-      return new WebRTCClass({
-        maxBitrate: currentMaxBitrate.value,
-        maxFramerate: currentMaxFramerate.value,
-        resolutionRatio: currentResolutionRatio.value,
-        isSRS: false,
-        roomId: roomId.value,
-        videoEl: data.videoEl,
-        sender: data.sender,
-        receiver: data.receiver,
-        sucessCb: data.sucessCb,
-      });
-    },
-    /**
-     * 主播发offer给观众
-     */
-    sendOffer: async ({
-      sender,
-      receiver,
-    }: {
-      sender: string;
-      receiver: string;
-    }) => {
-      console.log('开始webRtcLive的sendOffer', {
-        sender,
-        receiver,
-      });
-      try {
-        const ws = networkStore.wsMap.get(roomId.value);
-        if (!ws) return;
-        const rtc = networkStore.rtcMap.get(receiver);
-        if (rtc) {
-          canvasVideoStream.value?.getTracks().forEach((track) => {
-            if (canvasVideoStream.value) {
-              console.log(
-                'webRtcLive的canvasVideoStream插入track',
-                track.kind,
-                track
-              );
-              rtc.peerConnection?.addTrack(track, canvasVideoStream.value);
-            }
-          });
-          const offerSdp = await rtc.createOffer();
-          if (!offerSdp) {
-            console.error('webRtcLive的offerSdp为空');
-            return;
-          }
-          await rtc.setLocalDescription(offerSdp!);
-          networkStore.wsMap.get(roomId.value)?.send<WsOfferType['data']>({
-            requestId: getRandomString(8),
-            msgType: WsMsgTypeEnum.nativeWebRtcOffer,
-            data: {
-              live_room: appStore.liveRoomInfo!,
-              live_room_id: appStore.liveRoomInfo!.id!,
-              sender,
-              receiver,
-              sdp: offerSdp,
-            },
-          });
-        } else {
-          console.error('rtc不存在');
-        }
-      } catch (error) {
-        console.error('webRtcLive的sendOffer错误');
-        console.log(error);
-      }
-    },
-    /**
-     * 观众收到主播的offer,观众回复主播answer
-     */
-    sendAnswer: async ({
-      sdp,
-      sender,
-      receiver,
-    }: {
-      sdp: RTCSessionDescriptionInit;
-      sender: string;
-      receiver: string;
-    }) => {
-      console.log('开始webRtcLive的sendAnswer', {
-        sender,
-        receiver,
-      });
-      try {
-        const ws = networkStore.wsMap.get(roomId.value);
-        if (!ws) return;
-        const rtc = networkStore.rtcMap.get(receiver);
-        if (rtc) {
-          await rtc.setRemoteDescription(sdp);
-          const answerSdp = await rtc.createAnswer();
-          if (!answerSdp) {
-            console.error('webRtcLive的answerSdp为空');
-            return;
-          }
-          await rtc.setLocalDescription(answerSdp);
-          networkStore.wsMap.get(roomId.value)?.send<WsAnswerType['data']>({
-            requestId: getRandomString(8),
-            msgType: WsMsgTypeEnum.nativeWebRtcAnswer,
-            data: {
-              live_room_id: Number(roomId.value),
-              sender,
-              receiver,
-              sdp: answerSdp,
-            },
-          });
-        } else {
-          console.error('rtc不存在');
-        }
-      } catch (error) {
-        console.error('webRtcLive的sendAnswer错误');
-        console.log(error);
-      }
-    },
-  };
-
-  return { updateWebRtcLiveConfig, webRtcLive };
-};

+ 0 - 165
src/hooks/webrtc/meetingOne.ts

@@ -1,165 +0,0 @@
-import { getRandomString } from 'billd-utils';
-import { ref } from 'vue';
-
-import { useRTCParams } from '@/hooks/use-rtcParams';
-import { useAppStore } from '@/store/app';
-import { useNetworkStore } from '@/store/network';
-import { WsAnswerType, WsMsgTypeEnum, WsOfferType } from '@/types/websocket';
-import { WebRTCClass } from '@/utils/network/webRTC';
-
-export const useWebRtcMeetingOne = () => {
-  const appStore = useAppStore();
-  const networkStore = useNetworkStore();
-
-  const { maxBitrate, maxFramerate, resolutionRatio } = useRTCParams();
-  const currentMaxBitrate = ref(maxBitrate.value[3].value);
-  const currentMaxFramerate = ref(maxFramerate.value[2].value);
-  const currentResolutionRatio = ref(resolutionRatio.value[3].value);
-  const roomId = ref('');
-  const anchorStream = ref<MediaStream>();
-  const userStream = ref<MediaStream>();
-
-  function updateWebRtcMeetingOneConfig(data: {
-    roomId;
-    anchorStream;
-    userStream?;
-  }) {
-    roomId.value = data.roomId;
-    anchorStream.value = data.anchorStream;
-    userStream.value = data.userStream;
-  }
-
-  const webRtcMeetingOne = {
-    newWebRtc: (data: {
-      sender: string;
-      receiver: string;
-      videoEl: HTMLVideoElement;
-      sucessCb: (stream) => void;
-    }) => {
-      return new WebRTCClass({
-        maxBitrate: currentMaxBitrate.value,
-        maxFramerate: currentMaxFramerate.value,
-        resolutionRatio: currentResolutionRatio.value,
-        isSRS: false,
-        roomId: roomId.value,
-        videoEl: data.videoEl,
-        sender: data.sender,
-        receiver: data.receiver,
-        sucessCb: data.sucessCb,
-      });
-    },
-    /**
-     * 主播发offer给观众
-     */
-    sendOffer: async ({
-      sender,
-      receiver,
-    }: {
-      sender: string;
-      receiver: string;
-    }) => {
-      console.log('meetingOne的sendOffer', {
-        sender,
-        receiver,
-      });
-      try {
-        const ws = networkStore.wsMap.get(roomId.value);
-        if (!ws) return;
-        const rtc = networkStore.rtcMap.get(receiver);
-        if (rtc) {
-          anchorStream.value?.getTracks().forEach((track) => {
-            if (anchorStream.value) {
-              console.log('meetingOne的sendOffer插入track', track.kind, track);
-              rtc.peerConnection?.addTrack(track, anchorStream.value);
-            }
-          });
-          const offerSdp = await rtc.createOffer();
-          if (!offerSdp) {
-            console.error('meetingOne的offerSdp为空');
-            return;
-          }
-          await rtc.setLocalDescription(offerSdp!);
-          networkStore.wsMap.get(roomId.value)?.send<WsOfferType['data']>({
-            requestId: getRandomString(8),
-            msgType: WsMsgTypeEnum.nativeWebRtcOffer,
-            data: {
-              live_room: appStore.liveRoomInfo!,
-              live_room_id: appStore.liveRoomInfo!.id!,
-              sender,
-              receiver,
-              sdp: offerSdp,
-            },
-          });
-        } else {
-          console.error('rtc不存在');
-        }
-      } catch (error) {
-        console.error('meetingOne的sendOffer错误');
-        console.log(error);
-      }
-    },
-    /**
-     * 观众收到主播的offer,观众回复主播answer
-     */
-    sendAnswer: async ({
-      sdp,
-      sender,
-      receiver,
-    }: {
-      sdp: RTCSessionDescriptionInit;
-      sender: string;
-      receiver: string;
-    }) => {
-      console.log('meetingOne的sendAnswer', {
-        sender,
-        receiver,
-      });
-      try {
-        const ws = networkStore.wsMap.get(roomId.value);
-        if (!ws) return;
-        const rtc = networkStore.rtcMap.get(receiver);
-        if (rtc) {
-          await rtc.setRemoteDescription(sdp);
-          userStream.value?.getTracks().forEach((track) => {
-            if (userStream.value) {
-              console.log('meetingOne的sendAnswer插入track', track);
-              rtc.peerConnection?.addTrack(track, userStream.value);
-            }
-          });
-          const answerSdp = await rtc.createAnswer();
-          if (!answerSdp) {
-            console.error('meetingOne的answerSdp为空');
-            return;
-          }
-          await rtc.setLocalDescription(answerSdp);
-          networkStore.wsMap.get(roomId.value)?.send<WsAnswerType['data']>({
-            requestId: getRandomString(8),
-            msgType: WsMsgTypeEnum.nativeWebRtcAnswer,
-            data: {
-              live_room_id: Number(roomId.value),
-              sender,
-              receiver,
-              sdp: answerSdp,
-            },
-          });
-        } else {
-          console.error('rtc不存在');
-        }
-      } catch (error) {
-        console.error('meetingOne的sendAnswer错误');
-        console.log(error);
-      }
-    },
-    addTrack: ({ stream, receiver }: { stream; receiver: string }) => {
-      const rtc = networkStore.rtcMap.get(receiver);
-      if (rtc) {
-        stream.getTracks().forEach((track) => {
-          console.log('meetingOne的sendOffer插入track66', track.kind, track);
-          rtc.peerConnection?.addTrack(track, stream);
-        });
-      }
-    },
-  };
-
-  return { updateWebRtcMeetingOneConfig, webRtcMeetingOne };
-};

+ 0 - 163
src/hooks/webrtc/meetingPk.ts

@@ -1,163 +0,0 @@
-import { getRandomString } from 'billd-utils';
-import { ref } from 'vue';
-
-import { useRTCParams } from '@/hooks/use-rtcParams';
-import { useAppStore } from '@/store/app';
-import { useNetworkStore } from '@/store/network';
-import { WsAnswerType, WsMsgTypeEnum, WsOfferType } from '@/types/websocket';
-import { WebRTCClass } from '@/utils/network/webRTC';
-
-export const useWebRtcMeetingPk = () => {
-  const appStore = useAppStore();
-  const networkStore = useNetworkStore();
-
-  const { maxBitrate, maxFramerate, resolutionRatio } = useRTCParams();
-  const currentMaxBitrate = ref(maxBitrate.value[3].value);
-  const currentMaxFramerate = ref(maxFramerate.value[2].value);
-  const currentResolutionRatio = ref(resolutionRatio.value[3].value);
-  const roomId = ref('');
-  const anchorStream = ref<MediaStream>();
-  const userStream = ref<MediaStream>();
-
-  function updateWebRtcMeetingPkConfig(data: {
-    roomId;
-    anchorStream;
-    userStream?;
-  }) {
-    roomId.value = data.roomId;
-    anchorStream.value = data.anchorStream;
-    userStream.value = data.userStream;
-  }
-
-  const webRtcMeetingPk = {
-    newWebRtc: (data: {
-      sender: string;
-      receiver: string;
-      videoEl: HTMLVideoElement;
-    }) => {
-      return new WebRTCClass({
-        maxBitrate: currentMaxBitrate.value,
-        maxFramerate: currentMaxFramerate.value,
-        resolutionRatio: currentResolutionRatio.value,
-        isSRS: false,
-        roomId: roomId.value,
-        videoEl: data.videoEl,
-        sender: data.sender,
-        receiver: data.receiver,
-      });
-    },
-    /**
-     * 主播发offer给观众
-     */
-    sendOffer: async ({
-      sender,
-      receiver,
-    }: {
-      sender: string;
-      receiver: string;
-    }) => {
-      console.log('meetingPk的sendOffer', {
-        sender,
-        receiver,
-      });
-      try {
-        const ws = networkStore.wsMap.get(roomId.value);
-        if (!ws) return;
-        const rtc = networkStore.rtcMap.get(receiver);
-        if (rtc) {
-          anchorStream.value?.getTracks().forEach((track) => {
-            if (anchorStream.value) {
-              console.log('meetingPk的sendOffer插入track', track.kind, track);
-              rtc.peerConnection?.addTrack(track, anchorStream.value);
-            }
-          });
-          const offerSdp = await rtc.createOffer();
-          if (!offerSdp) {
-            console.error('meetingPk的offerSdp为空');
-            return;
-          }
-          await rtc.setLocalDescription(offerSdp!);
-          networkStore.wsMap.get(roomId.value)?.send<WsOfferType['data']>({
-            requestId: getRandomString(8),
-            msgType: WsMsgTypeEnum.nativeWebRtcOffer,
-            data: {
-              live_room: appStore.liveRoomInfo!,
-              live_room_id: appStore.liveRoomInfo!.id!,
-              sender,
-              receiver,
-              sdp: offerSdp,
-            },
-          });
-        } else {
-          console.error('rtc不存在');
-        }
-      } catch (error) {
-        console.error('meetingPk的sendOffer错误');
-        console.log(error);
-      }
-    },
-    /**
-     * 观众收到主播的offer,观众回复主播answer
-     */
-    sendAnswer: async ({
-      sdp,
-      sender,
-      receiver,
-    }: {
-      sdp: RTCSessionDescriptionInit;
-      sender: string;
-      receiver: string;
-    }) => {
-      console.log('meetingPk的sendAnswer', {
-        sender,
-        receiver,
-      });
-      try {
-        const ws = networkStore.wsMap.get(roomId.value);
-        if (!ws) return;
-        const rtc = networkStore.rtcMap.get(receiver);
-        if (rtc) {
-          await rtc.setRemoteDescription(sdp);
-          userStream.value?.getTracks().forEach((track) => {
-            if (userStream.value) {
-              console.log('meetingPk的sendAnswer插入track');
-              rtc.peerConnection?.addTrack(track, userStream.value);
-            }
-          });
-          const answerSdp = await rtc.createAnswer();
-          if (!answerSdp) {
-            console.error('meetingPk的answerSdp为空');
-            return;
-          }
-          await rtc.setLocalDescription(answerSdp);
-          networkStore.wsMap.get(roomId.value)?.send<WsAnswerType['data']>({
-            requestId: getRandomString(8),
-            msgType: WsMsgTypeEnum.nativeWebRtcAnswer,
-            data: {
-              live_room_id: Number(roomId.value),
-              sender,
-              receiver,
-              sdp: answerSdp,
-            },
-          });
-        } else {
-          console.error('rtc不存在');
-        }
-      } catch (error) {
-        console.error('meetingPk的sendAnswer错误');
-        console.log(error);
-      }
-    },
-    addTrack: ({ stream, receiver }: { stream; receiver: string }) => {
-      const rtc = networkStore.rtcMap.get(receiver);
-      if (rtc) {
-        stream.getTracks().forEach((track) => {
-          console.log('meetingPk的sendOffer插入track666', track.kind, track);
-          rtc.peerConnection?.addTrack(track, stream);
-        });
-      }
-    },
-  };
-
-  return { updateWebRtcMeetingPkConfig, webRtcMeetingPk };
-};

+ 0 - 163
src/hooks/webrtc/meetingTwo.ts

@@ -1,163 +0,0 @@
-import { getRandomString } from 'billd-utils';
-import { ref } from 'vue';
-
-import { useRTCParams } from '@/hooks/use-rtcParams';
-import { useAppStore } from '@/store/app';
-import { useNetworkStore } from '@/store/network';
-import { WsAnswerType, WsMsgTypeEnum, WsOfferType } from '@/types/websocket';
-import { WebRTCClass } from '@/utils/network/webRTC';
-
-// TODO
-export const useWebRtcManyToManyMeeting = () => {
-  const appStore = useAppStore();
-  const networkStore = useNetworkStore();
-
-  const { maxBitrate, maxFramerate, resolutionRatio } = useRTCParams();
-  const currentMaxBitrate = ref(maxBitrate.value[3].value);
-  const currentMaxFramerate = ref(maxFramerate.value[2].value);
-  const currentResolutionRatio = ref(resolutionRatio.value[3].value);
-  const roomId = ref('');
-  const meetingMyStream = ref<MediaStream>();
-  const meetingAnchorStream = ref<MediaStream>();
-
-  function updateWebRtcManyToManyMeetingConfig(data: {
-    roomId;
-    meetingMyStream;
-    meetingAnchorStream?;
-  }) {
-    roomId.value = data.roomId;
-    meetingMyStream.value = data.meetingMyStream;
-    meetingAnchorStream.value = data.meetingAnchorStream;
-  }
-
-  const webRtcManyToManyMeeting = {
-    newWebRtc: (data: {
-      sender: string;
-      receiver: string;
-      videoEl: HTMLVideoElement;
-    }) => {
-      return new WebRTCClass({
-        maxBitrate: currentMaxBitrate.value,
-        maxFramerate: currentMaxFramerate.value,
-        resolutionRatio: currentResolutionRatio.value,
-        isSRS: false,
-        roomId: roomId.value,
-        videoEl: data.videoEl,
-        sender: data.sender,
-        receiver: data.receiver,
-      });
-    },
-    /**
-     * 主播发offer给观众
-     */
-    sendOffer: async ({
-      sender,
-      receiver,
-    }: {
-      sender: string;
-      receiver: string;
-    }) => {
-      console.log('开始webRtcManyToManyMeeting的sendOffer', {
-        sender,
-        receiver,
-      });
-      try {
-        const ws = networkStore.wsMap.get(roomId.value);
-        if (!ws) return;
-        const rtc = networkStore.rtcMap.get(receiver);
-        if (rtc) {
-          meetingMyStream.value?.getTracks().forEach((track) => {
-            if (meetingMyStream.value) {
-              console.log(
-                'webRtcManyToManyMeeting的meetingMyStream插入track',
-                track.kind,
-                track
-              );
-              rtc.peerConnection?.addTrack(track, meetingMyStream.value);
-            }
-          });
-          const offerSdp = await rtc.createOffer();
-          if (!offerSdp) {
-            console.error('webRtcManyToManyMeeting的offerSdp为空');
-            return;
-          }
-          await rtc.setLocalDescription(offerSdp!);
-          networkStore.wsMap.get(roomId.value)?.send<WsOfferType['data']>({
-            requestId: getRandomString(8),
-            msgType: WsMsgTypeEnum.nativeWebRtcOffer,
-            data: {
-              live_room: appStore.liveRoomInfo!,
-              live_room_id: appStore.liveRoomInfo!.id!,
-              sender,
-              receiver,
-              sdp: offerSdp,
-            },
-          });
-        } else {
-          console.error('rtc不存在');
-        }
-      } catch (error) {
-        console.error('webRtcManyToManyMeeting的sendOffer错误');
-        console.log(error);
-      }
-    },
-    /**
-     * 观众收到主播的offer,观众回复主播answer
-     */
-    sendAnswer: async ({
-      sdp,
-      sender,
-      receiver,
-    }: {
-      sdp: RTCSessionDescriptionInit;
-      sender: string;
-      receiver: string;
-    }) => {
-      console.log('开始webRtcManyToManyMeeting的sendAnswer', {
-        sender,
-        receiver,
-      });
-      try {
-        const ws = networkStore.wsMap.get(roomId.value);
-        if (!ws) return;
-        const rtc = networkStore.rtcMap.get(receiver);
-        if (rtc) {
-          await rtc.setRemoteDescription(sdp);
-          meetingAnchorStream.value?.getTracks().forEach((track) => {
-            if (meetingAnchorStream.value) {
-              console.log(
-                'webRtcManyToManyMeeting的meetingAnchorStream插入track',
-                track.kind,
-                track
-              );
-              rtc.peerConnection?.addTrack(track, meetingAnchorStream.value);
-            }
-          });
-          const answerSdp = await rtc.createAnswer();
-          if (!answerSdp) {
-            console.error('webRtcManyToManyMeeting的answerSdp为空');
-            return;
-          }
-          await rtc.setLocalDescription(answerSdp);
-          networkStore.wsMap.get(roomId.value)?.send<WsAnswerType['data']>({
-            requestId: getRandomString(8),
-            msgType: WsMsgTypeEnum.nativeWebRtcAnswer,
-            data: {
-              live_room_id: Number(roomId.value),
-              sender,
-              receiver,
-              sdp: answerSdp,
-            },
-          });
-        } else {
-          console.error('rtc不存在');
-        }
-      } catch (error) {
-        console.error('webRtcManyToManyMeeting的sendAnswer错误');
-        console.log(error);
-      }
-    },
-  };
-
-  return { updateWebRtcManyToManyMeetingConfig, webRtcManyToManyMeeting };
-};

+ 0 - 140
src/hooks/webrtc/rtmpToRtc.ts

@@ -1,140 +0,0 @@
-import { ref } from 'vue';
-
-import { fetchRtcV1Whep } from '@/api/srs';
-import { useRTCParams } from '@/hooks/use-rtcParams';
-import { useNetworkStore } from '@/store/network';
-import { WebRTCClass } from '@/utils/network/webRTC';
-
-export const useWebRtcRtmpToRtc = () => {
-  const networkStore = useNetworkStore();
-
-  const { maxBitrate, maxFramerate, resolutionRatio } = useRTCParams();
-  const currentMaxBitrate = ref(maxBitrate.value[3].value);
-  const currentMaxFramerate = ref(maxFramerate.value[2].value);
-  const currentResolutionRatio = ref(resolutionRatio.value[3].value);
-  const isPk = ref(false);
-  const roomId = ref('');
-
-  function updateWebRtcRtmpToRtcConfig(data: { isPk; roomId }) {
-    isPk.value = data.isPk;
-    roomId.value = data.roomId;
-  }
-
-  const webRtcRtmpToRtc = {
-    newWebRtc: (data: {
-      sender: string;
-      receiver: string;
-      videoEl: HTMLVideoElement;
-      sucessCb: (stream) => void;
-    }) => {
-      console.log({
-        maxBitrate: currentMaxBitrate.value,
-        maxFramerate: currentMaxFramerate.value,
-        resolutionRatio: currentResolutionRatio.value,
-      });
-      return new WebRTCClass({
-        maxBitrate: currentMaxBitrate.value,
-        maxFramerate: currentMaxFramerate.value,
-        resolutionRatio: currentResolutionRatio.value,
-        isSRS: false,
-        roomId: roomId.value,
-        videoEl: data.videoEl,
-        sender: data.sender,
-        receiver: data.receiver,
-        sucessCb: data.sucessCb,
-      });
-    },
-    /**
-     * 主播发offer给观众
-     */
-    sendOffer: async ({
-      sender,
-      receiver,
-    }: {
-      sender: string;
-      receiver: string;
-    }) => {
-      console.log('开始webRtcRtmpToRtc的sendOffer', {
-        sender,
-        receiver,
-      });
-      try {
-        const ws = networkStore.wsMap.get(roomId.value);
-        if (!ws) return;
-        const rtc = networkStore.rtcMap.get(receiver);
-        if (rtc) {
-          rtc.peerConnection?.addTransceiver('audio', {
-            direction: 'recvonly',
-          });
-          rtc.peerConnection?.addTransceiver('video', {
-            direction: 'recvonly',
-          });
-          const offerSdp = await rtc.createOffer();
-          if (!offerSdp) {
-            console.error('webRtcRtmpToRtc的offerSdp为空');
-            window.$message.error('webRtcRtmpToRtc的offerSdp为空');
-            return;
-          }
-          await rtc.setLocalDescription(offerSdp!);
-          const answerRes = await fetchRtcV1Whep({
-            sdp: offerSdp.sdp!,
-            stream: `roomId___${roomId.value}`,
-            app: 'livestream',
-          });
-          if (!answerRes.data.answer) {
-            console.error('/rtc/v1/play/拿不到sdp');
-            window.$message.error('/rtc/v1/play/拿不到sdp');
-            return;
-          }
-          const arr = answerRes.data.answer.split('\r\n') as string[];
-          for (let i = 0; i < arr.length; i += 1) {
-            if (arr[i].match('candidate')) {
-              const mkcdd = arr[i].split(' ');
-              mkcdd[4] = '8.218.5.78';
-              arr[i] = mkcdd.join(' ');
-            }
-          }
-          const newSdp = arr.join('\r\n');
-          const sdpres =
-            process.env.NODE_ENV === 'development'
-              ? answerRes.data.answer
-              : newSdp;
-          console.log('sdpres', sdpres);
-          await rtc.setRemoteDescription(
-            new RTCSessionDescription({
-              type: 'answer',
-              sdp: sdpres,
-            })
-          );
-          // const answerRes = await fetchRtcV1Play({
-          //   sdp: offerSdp.sdp!,
-          //   streamurl: `${myLiveRoom.pull_rtmp_url!}`,
-          // });
-          // if (answerRes.data.code !== 0) {
-          //   console.error('/rtc/v1/play/拿不到sdp');
-          //   window.$message.error('/rtc/v1/play/拿不到sdp');
-          //   return;
-          // }
-          // await rtc.setRemoteDescription(
-          //   new RTCSessionDescription({
-          //     type: 'answer',
-          //     sdp: answerRes.data.sdp,
-          //   })
-          // );
-        } else {
-          console.error('rtc不存在');
-        }
-      } catch (error) {
-        console.error('webRtcRtmpToRtc的sendOffer错误');
-        console.log(error);
-      }
-    },
-
-    close: ({ receiver }: { receiver: string }) => {
-      const rtc = networkStore.rtcMap.get(receiver);
-      rtc?.close();
-    },
-  };
-
-  return { updateWebRtcRtmpToRtcConfig, webRtcRtmpToRtc };
-};

+ 0 - 123
src/hooks/webrtc/srs.ts

@@ -1,123 +0,0 @@
-import { ref } from 'vue';
-
-import { fetchRtcV1Publish } from '@/api/srs';
-import { SRS_CB_URL_QUERY } from '@/constant';
-import { useRTCParams } from '@/hooks/use-rtcParams';
-import { useNetworkStore } from '@/store/network';
-import { useUserStore } from '@/store/user';
-import { LiveRoomTypeEnum } from '@/types/ILiveRoom';
-import { WebRTCClass } from '@/utils/network/webRTC';
-
-export const useWebRtcSrs = () => {
-  const userStore = useUserStore();
-  const networkStore = useNetworkStore();
-
-  const { maxBitrate, maxFramerate, resolutionRatio } = useRTCParams();
-  const currentMaxBitrate = ref(maxBitrate.value[3].value);
-  const currentMaxFramerate = ref(maxFramerate.value[2].value);
-  const currentResolutionRatio = ref(resolutionRatio.value[3].value);
-  const isPk = ref(false);
-  const roomId = ref('');
-  const canvasVideoStream = ref<MediaStream>();
-
-  function updateWebRtcSrsConfig(data: { isPk; roomId; canvasVideoStream }) {
-    isPk.value = data.isPk;
-    roomId.value = data.roomId;
-    canvasVideoStream.value = data.canvasVideoStream;
-  }
-
-  const webRtcSrs = {
-    newWebRtc: (data: {
-      sender: string;
-      receiver: string;
-      videoEl: HTMLVideoElement;
-    }) => {
-      console.log({
-        maxBitrate: currentMaxBitrate.value,
-        maxFramerate: currentMaxFramerate.value,
-        resolutionRatio: currentResolutionRatio.value,
-      });
-      return new WebRTCClass({
-        maxBitrate: currentMaxBitrate.value,
-        maxFramerate: currentMaxFramerate.value,
-        resolutionRatio: currentResolutionRatio.value,
-        isSRS: true,
-        roomId: roomId.value,
-        videoEl: data.videoEl,
-        sender: data.sender,
-        receiver: data.receiver,
-      });
-    },
-    /**
-     * 主播发offer给观众
-     */
-    sendOffer: async ({
-      sender,
-      receiver,
-    }: {
-      sender: string;
-      receiver: string;
-    }) => {
-      console.log('开始webRtcSrs的sendOffer', {
-        sender,
-        receiver,
-      });
-      try {
-        const ws = networkStore.wsMap.get(roomId.value);
-        if (!ws) return;
-        const rtc = networkStore.rtcMap.get(receiver);
-        if (rtc) {
-          canvasVideoStream.value?.getTracks().forEach((track) => {
-            if (canvasVideoStream.value) {
-              console.log(
-                'webRtcSrs的canvasVideoStream插入track',
-                track.kind,
-                track
-              );
-              rtc.peerConnection?.addTrack(track, canvasVideoStream.value);
-            }
-          });
-          const offerSdp = await rtc.createOffer();
-          if (!offerSdp) {
-            console.error('webRtcSrs的offerSdp为空');
-            window.$message.error('webRtcSrs的offerSdp为空');
-            return;
-          }
-          await rtc.setLocalDescription(offerSdp!);
-          const liveRooms = userStore.userInfo?.live_rooms;
-          const myLiveRoom = liveRooms?.[0];
-          if (!myLiveRoom) {
-            window.$message.error('你没有开通直播间');
-            return;
-          }
-          const answerRes = await fetchRtcV1Publish({
-            sdp: offerSdp.sdp!,
-            streamurl: `${myLiveRoom.pull_rtmp_url!}?${
-              SRS_CB_URL_QUERY.publishKey
-            }=${myLiveRoom.key!}&${SRS_CB_URL_QUERY.publishType}=${
-              isPk.value ? LiveRoomTypeEnum.pk : LiveRoomTypeEnum.srs
-            }&${SRS_CB_URL_QUERY.userId}=${userStore.userInfo?.id!}`,
-          });
-          if (answerRes.data.code !== 0) {
-            console.error('/rtc/v1/publish/拿不到sdp');
-            window.$message.error('/rtc/v1/publish/拿不到sdp');
-            return;
-          }
-          await rtc.setRemoteDescription(
-            new RTCSessionDescription({
-              type: 'answer',
-              sdp: answerRes.data.sdp,
-            })
-          );
-        } else {
-          console.error('rtc不存在');
-        }
-      } catch (error) {
-        console.error('webRtcSrs的sendOffer错误');
-        console.log(error);
-      }
-    },
-  };
-
-  return { updateWebRtcSrsConfig, webRtcSrs };
-};

+ 0 - 92
src/hooks/webrtc/tencentcloudCss.ts

@@ -1,92 +0,0 @@
-import { ref } from 'vue';
-
-import { fetchTencentcloudCssPush } from '@/api/tencentcloudCss';
-import { useRTCParams } from '@/hooks/use-rtcParams';
-import { useNetworkStore } from '@/store/network';
-import { useUserStore } from '@/store/user';
-import { WebRTCClass } from '@/utils/network/webRTC';
-
-export const useWebRtcTencentcloudCss = () => {
-  const userStore = useUserStore();
-  const networkStore = useNetworkStore();
-
-  const { maxBitrate, maxFramerate, resolutionRatio } = useRTCParams();
-  const currentMaxBitrate = ref(maxBitrate.value[3].value);
-  const currentMaxFramerate = ref(maxFramerate.value[2].value);
-  const currentResolutionRatio = ref(resolutionRatio.value[3].value);
-  const isPk = ref(false);
-  const roomId = ref('');
-  const canvasVideoStream = ref<MediaStream>();
-
-  function updateWebRtcTencentcloudCssConfig(data: {
-    isPk;
-    roomId;
-    canvasVideoStream;
-  }) {
-    isPk.value = data.isPk;
-    roomId.value = data.roomId;
-    canvasVideoStream.value = data.canvasVideoStream;
-  }
-
-  const webRtcTencentcloudCss = {
-    newWebRtc: (data: {
-      sender: string;
-      receiver: string;
-      videoEl: HTMLVideoElement;
-    }) => {
-      return new WebRTCClass({
-        maxBitrate: currentMaxBitrate.value,
-        maxFramerate: currentMaxFramerate.value,
-        resolutionRatio: currentResolutionRatio.value,
-        isSRS: false,
-        roomId: roomId.value,
-        videoEl: data.videoEl,
-        sender: data.sender,
-        receiver: data.receiver,
-      });
-    },
-    /**
-     * 主播发offer给观众
-     */
-    sendOffer: async ({
-      sender,
-      receiver,
-    }: {
-      sender: string;
-      receiver: string;
-    }) => {
-      console.log('开始webRtcTencentcloudCss的sendOffer', {
-        sender,
-        receiver,
-      });
-      try {
-        const ws = networkStore.wsMap.get(roomId.value);
-        if (!ws) return;
-        const rtc = networkStore.rtcMap.get(receiver);
-        if (rtc) {
-          const liveRooms = userStore.userInfo?.live_rooms;
-          const myLiveRoom = liveRooms?.[0];
-          if (!myLiveRoom) {
-            window.$message.error('你没有开通直播间');
-            return;
-          }
-          const res = await fetchTencentcloudCssPush(myLiveRoom.id!);
-          if (res.code === 200) {
-            const livePusher = new window.TXLivePusher();
-            // https://cloud.tencent.com/document/product/267/92713#1a9164cf-9f99-47d5-9667-ea558886cb9f
-            // 使用用户自定义的音视频流。
-            await livePusher.startCustomCapture(canvasVideoStream.value);
-            livePusher.startPush(res.data.webrtc_url);
-          }
-        } else {
-          console.error('rtc不存在');
-        }
-      } catch (error) {
-        console.error('webRtcTencentcloudCss的sendOffer错误');
-        console.log(error);
-      }
-    },
-  };
-
-  return { updateWebRtcTencentcloudCssConfig, webRtcTencentcloudCss };
-};

+ 4 - 4
src/layout/mobile/head/index.vue

@@ -9,7 +9,7 @@
         <a
           class="github"
           target="_blank"
-          href="https://github.com/galaxy-s10/billd-live"
+          href="https://github.com/billd-project/live"
         >
           <img
             :src="githubStar"
@@ -37,8 +37,8 @@
           @select="handleSelect"
         >
           <div
-            class="btn"
             v-lazy:background-image="userStore.userInfo.avatar"
+            class="btn"
           ></div>
         </n-dropdown>
       </div>
@@ -77,9 +77,9 @@ const options = [
 
 onMounted(() => {
   githubStar.value =
-    'https://img.shields.io/github/stars/galaxy-s10/billd-live?label=Star&logo=GitHub&labelColor=white&logoColor=black&style=social&cacheSeconds=3600';
+    'https://img.shields.io/github/stars/billd-project/live?label=Star&logo=GitHub&labelColor=white&logoColor=black&style=social';
   githubFork.value =
-    'https://img.shields.io/github/forks/galaxy-s10/billd-live?label=Fork&logo=GitHub&labelColor=white&logoColor=black&style=social&cacheSeconds=3600';
+    'https://img.shields.io/github/forks/billd-project/live?label=Fork&logo=GitHub&labelColor=white&logoColor=black&style=social';
 });
 
 function handleSelect(key) {

+ 26 - 22
src/layout/pc/head/index.vue

@@ -32,18 +32,18 @@
           </a>
 
           <a
+            v-if="!isMobile()"
             class="item"
             :href="COMMON_URL.admin"
             @click.prevent="openToTarget(COMMON_URL.admin)"
-            v-if="!isMobile()"
           >
             {{ t('layout.liveAdmin') }}
           </a>
 
           <a
+            v-if="!isMobile()"
             class="item"
             @click.prevent="router.push({ name: routerName.downloadLive })"
-            v-if="!isMobile()"
           >
             {{ t('layout.download') }}
           </a>
@@ -91,8 +91,8 @@
 
       <div class="right">
         <Dropdown
-          class="doc"
           v-if="!isMobile()"
+          class="doc"
         >
           <template #btn>
             <div class="btn">
@@ -111,8 +111,8 @@
               >
                 <div class="txt">{{ t(item.label) }}</div>
                 <VPIconExternalLink
-                  class="icon"
                   v-if="item.url"
+                  class="icon"
                 ></VPIconExternalLink>
               </a>
             </div>
@@ -120,8 +120,8 @@
         </Dropdown>
 
         <Dropdown
-          class="ecosystem"
           v-if="!isMobile()"
+          class="ecosystem"
         >
           <template #btn>
             <div class="btn">
@@ -165,8 +165,8 @@
         </Dropdown>
 
         <Dropdown
-          class="about"
           v-if="!isMobile()"
+          class="about"
         >
           <template #btn>
             <div class="btn">
@@ -183,7 +183,10 @@
                 :href="item.url"
                 @click.prevent="handleJump(item)"
               >
-                <div class="txt">{{ t(item.label) }}</div>
+                <div class="txt">
+                  <s v-if="item.type === 'delete'">{{ t(item.label) }}</s>
+                  <span v-else>{{ t(item.label) }}</span>
+                </div>
                 <VPIconExternalLink
                   v-if="item.url"
                   class="icon"
@@ -194,18 +197,19 @@
         </Dropdown>
 
         <a
+          v-if="!isMobile() && userStore.userInfo"
           class="signin"
           @click="handleSignin"
-          v-if="!isMobile() && userStore.userInfo"
         >
           {{ t('layout.signin') }}
           <div
-            class="red-dot"
             v-if="appStore.showSigninRedDot"
+            class="red-dot"
           ></div>
         </a>
 
         <a
+          v-if="!isMobile()"
           class="privatizationDeployment"
           :class="{
             active:
@@ -216,7 +220,6 @@
           @click.prevent="
             router.push({ name: routerName.privatizationDeployment })
           "
-          v-if="!isMobile()"
         >
           {{ t('layout.deploy') }}
           <div class="badge">
@@ -242,7 +245,7 @@
         <a
           class="github"
           target="_blank"
-          href="https://github.com/galaxy-s10/billd-live"
+          href="https://github.com/billd-project/live"
         >
           <img
             :src="githubStar"
@@ -410,8 +413,8 @@
         </Dropdown>
 
         <Dropdown
-          class="switch-lang"
           v-if="!isMobile()"
+          class="switch-lang"
         >
           <template #btn>
             <div class="btn">
@@ -422,9 +425,9 @@
           <template #list>
             <div class="list">
               <a
-                class="item"
                 v-for="(item, index) in localeList"
                 :key="index"
+                class="item"
                 :class="{ active: item.value === cacheStore.locale }"
                 @click="changeLocale(item)"
               >
@@ -515,6 +518,7 @@ const aboutList = ref([
     label: 'layout.officialGroup',
     routerName: routerName.group,
     url: '',
+    type: 'delete',
   },
   {
     label: 'layout.release',
@@ -526,31 +530,31 @@ const aboutList = ref([
 const resourceList = ref([
   {
     label: 'billd-live',
-    url: 'https://github.com/galaxy-s10/billd-live',
+    url: 'https://github.com/billd-project/live',
   },
   {
     label: 'billd-live-electron',
-    url: 'https://github.com/galaxy-s10/billd-live-electron',
+    url: 'https://github.com/billd-project/live-electron',
   },
   {
     label: 'billd-live-server',
-    url: 'https://github.com/galaxy-s10/billd-live-server',
+    url: 'https://github.com/billd-project/live-server',
   },
   {
     label: 'billd-live-admin',
-    url: 'https://github.com/galaxy-s10/billd-live-admin',
+    url: 'https://github.com/billd-project/live-admin',
   },
   {
     label: 'billd-live-kotlin',
-    url: 'https://github.com/galaxy-s10/billd-live-kotlin',
+    url: 'https://github.com/billd-project/live-kotlin',
   },
   {
     label: 'billd-live-flutter',
-    url: 'https://github.com/galaxy-s10/billd-live-flutter',
+    url: 'https://github.com/billd-project/live-flutter',
   },
   {
     label: 'billd-live-react-native',
-    url: 'https://github.com/galaxy-s10/billd-live-react-native',
+    url: 'https://github.com/billd-project/live-react-native',
   },
   {
     label: 'billd-desk',
@@ -609,7 +613,7 @@ async function handleSignin() {
   const res = await fetchCreateSignin({});
   if (res.code === 200) {
     appStore.showSigninRedDot = false;
-    // eslint-disable-next-line
+
     window.$message.success(`签到成功!已连续签到${res.data.nums}天`);
   }
 }
@@ -652,7 +656,7 @@ function handleJump(item) {
 onMounted(() => {
   locale.value = cacheStore.locale;
   githubStar.value =
-    'https://img.shields.io/github/stars/galaxy-s10/billd-live?label=Star&logo=GitHub&labelColor=white&logoColor=black&style=social&cacheSeconds=3600';
+    'https://img.shields.io/github/stars/billd-project/live?label=Star&logo=GitHub&labelColor=white&logoColor=black&style=social';
 });
 
 function handleTip2() {

+ 1 - 1
src/layout/pc/sidebar/index.vue

@@ -22,9 +22,9 @@
       <div class="txt">{{ t('layout.siteOrder') }}</div>
     </div>
     <div
+      v-if="userStore.userInfo"
       class="item"
       @click="handleJump"
-      v-if="userStore.userInfo"
     >
       <div class="ico wallet"></div>
       <div class="txt">{{ t('layout.myWallet') }}</div>

+ 1 - 1
src/router/index.ts

@@ -315,7 +315,7 @@ const router = createRouter({
   history: createWebHistory(),
 });
 
-router.beforeEach((to, from, next) => {
+router.beforeEach((to, _from, next) => {
   if (to.name === routerName.oauth) {
     return next();
   }

+ 0 - 129
src/store/app/index.ts

@@ -1,129 +0,0 @@
-import { UploadFileInfo } from 'naive-ui';
-import { defineStore } from 'pinia';
-
-import {
-  IArea,
-  LiveLineEnum,
-  LiveRenderEnum,
-  MediaTypeEnum,
-} from '@/interface';
-import { mobileRouterName } from '@/router';
-import { ILiveRoom } from '@/types/ILiveRoom';
-import { isMSESupported } from '@/utils';
-
-export type AppRootState = {
-  pageIsClick: boolean;
-  useGoogleAd: boolean;
-  usePayCourse: boolean;
-  areaList: IArea[];
-  playing: boolean;
-  videoRatio: number;
-  normalVolume: number;
-  navList: { routeName: string; name: string }[];
-  allTrack: {
-    /** 1开启;2关闭 */
-    audio: number;
-    /** 1开启;2关闭 */
-    video: number;
-    id: string;
-    deviceId?: string;
-    mediaName: string;
-    type: MediaTypeEnum;
-    openEye: boolean;
-    track?: MediaStreamTrack;
-    stream?: MediaStream;
-    streamid?: string;
-    trackid?: string;
-    canvasDom?: any;
-    hidden?: boolean;
-    muted?: boolean;
-    volume?: number;
-    videoEl?: HTMLVideoElement;
-    imgInfo?: UploadFileInfo[];
-    mediaInfo?: UploadFileInfo[];
-    txtInfo?: { txt: string; color: string };
-    timeInfo?: { color: string };
-    stopwatchInfo?: { color: string };
-    rect?: { top: number; left: number };
-    scaleInfo: Record<number, { scaleX: number; scaleY: number }>;
-  }[];
-  videoControls: {
-    pipMode?: boolean;
-    pageFullMode?: boolean;
-    fullMode?: boolean;
-    renderMode?: LiveRenderEnum;
-    line?: boolean;
-    speed?: boolean;
-    networkSpeed?: boolean;
-    fps?: boolean;
-    kbs?: boolean;
-    resolution?: boolean;
-  };
-  videoControlsValue: {
-    pipMode?: boolean;
-    pageFullMode?: boolean;
-    kbs?: string;
-    fps?: number;
-  };
-  mseSupport: boolean;
-  liveLine: LiveLineEnum;
-  liveRoomInfo?: ILiveRoom;
-  showLoginModal: boolean;
-  disableSpeaking: Map<number, { exp: number; label: string }>;
-  showSigninRedDot: boolean;
-};
-
-export const useAppStore = defineStore('app', {
-  state: (): AppRootState => {
-    return {
-      pageIsClick: false,
-      useGoogleAd: false,
-      usePayCourse: false,
-      areaList: [],
-      playing: false,
-      videoRatio: 16 / 9,
-      videoControls: {
-        renderMode: LiveRenderEnum.video,
-      },
-      videoControlsValue: {
-        pipMode: false,
-      },
-      normalVolume: 80,
-      navList: [
-        { routeName: mobileRouterName.h5, name: '频道' },
-        { routeName: mobileRouterName.h5Shop, name: '商店' },
-        { routeName: mobileRouterName.h5Rank, name: '排行' },
-        { routeName: mobileRouterName.h5My, name: '我的' },
-      ],
-      allTrack: [],
-      mseSupport: isMSESupported(),
-      liveLine: isMSESupported() ? LiveLineEnum.flv : LiveLineEnum.hls,
-      liveRoomInfo: undefined,
-      showLoginModal: false,
-      disableSpeaking: new Map(),
-      showSigninRedDot: false,
-    };
-  },
-  actions: {
-    setLiveRoomInfo(res: AppRootState['liveRoomInfo']) {
-      this.liveRoomInfo = res;
-    },
-    setAllTrack(res: AppRootState['allTrack']) {
-      this.allTrack = res;
-    },
-    getTrackInfo() {
-      const res = { audio: 0, video: 0 };
-      this.allTrack.forEach((item) => {
-        // if (item.stream) {
-        if (item.audio === 1) {
-          res.audio += 1;
-        }
-        if (item.video === 1) {
-          res.video += 1;
-        }
-        // }
-      });
-      return res;
-    },
-  },
-});

+ 0 - 30
src/store/cache/index.ts

@@ -1,30 +0,0 @@
-import { defineStore } from 'pinia';
-
-import { lsKeyPrefix } from '@/constant';
-import { AppRootState } from '@/store/app';
-
-export type PiniaCacheRootState = {
-  locale: string;
-  muted: boolean;
-  volume: number;
-  'resource-list': AppRootState['allTrack'];
-};
-
-export const useCacheStore = defineStore(`${lsKeyPrefix}pinia-cache`, {
-  persist: {
-    key: `${lsKeyPrefix}pinia-cache`,
-  },
-  state: (): PiniaCacheRootState => {
-    return {
-      locale: 'zh',
-      muted: true,
-      volume: 80,
-      'resource-list': [],
-    };
-  },
-  actions: {
-    setResourceList(res: PiniaCacheRootState['resource-list']) {
-      this['resource-list'] = res;
-    },
-  },
-});

+ 0 - 6
src/store/index.ts

@@ -1,6 +0,0 @@
-import { createPinia } from 'pinia';
-import piniaPluginPersistedstate from 'pinia-plugin-persistedstate';
-
-const store = createPinia();
-store.use(piniaPluginPersistedstate);
-export default store;

+ 0 - 34
src/store/network/index.ts

@@ -1,34 +0,0 @@
-import { defineStore } from 'pinia';
-
-import { WebRTCClass } from '@/utils/network/webRTC';
-import { WebSocketClass } from '@/utils/network/webSocket';
-
-type NetworkRootState = {
-  wsMap: Map<string, WebSocketClass>;
-  rtcMap: Map<string, WebRTCClass>;
-};
-
-export const useNetworkStore = defineStore('network', {
-  state: (): NetworkRootState => {
-    return {
-      wsMap: new Map(),
-      rtcMap: new Map(),
-    };
-  },
-  actions: {
-    removeWs(roomId: string) {
-      const old = this.wsMap.get(roomId);
-      if (old) {
-        old.close();
-      }
-      this.wsMap.delete(roomId);
-    },
-    removeRtc(socketId: string) {
-      const old = this.rtcMap.get(socketId);
-      if (old) {
-        old.close();
-      }
-      this.rtcMap.delete(socketId);
-    },
-  },
-});

+ 0 - 81
src/store/user/index.ts

@@ -1,81 +0,0 @@
-import { defineStore } from 'pinia';
-
-import { fetchUserInfo, fetchUsernameLogin } from '@/api/user';
-import { fetchMyWallet } from '@/api/wallet';
-import { IAuth, IRole } from '@/interface';
-import { IUser } from '@/types/IUser';
-import cache from '@/utils/cache';
-
-type UserRootState = {
-  userInfo?: IUser;
-  token?: string | null;
-  roles?: IRole[];
-  auths?: IAuth[];
-};
-
-export const useUserStore = defineStore('user', {
-  state: (): UserRootState => {
-    return {
-      token: cache.getStorageExp('token'),
-      roles: undefined,
-      userInfo: undefined,
-      auths: undefined,
-    };
-  },
-  actions: {
-    setUserInfo(res: UserRootState['userInfo']) {
-      this.userInfo = res;
-    },
-    setToken(res: UserRootState['token'], exp: number) {
-      cache.setStorageExp('token', res, exp);
-      this.token = res;
-    },
-    setRoles(res: UserRootState['roles']) {
-      this.roles = res;
-    },
-    setAuths(res: UserRootState['auths']) {
-      this.auths = res;
-    },
-    logout() {
-      cache.clearStorage('token');
-      this.token = undefined;
-      this.userInfo = undefined;
-      this.roles = undefined;
-    },
-    async usernameLogin({ username, password }) {
-      try {
-        const exp = 24 * 7;
-        const { data: token } = await fetchUsernameLogin({
-          username,
-          password,
-          exp,
-        });
-        this.setToken(token, exp);
-        return token;
-      } catch (error: any) {
-        // 错误返回401,全局的响应拦截会打印报错信息
-        console.log(error);
-        return null;
-      }
-    },
-    async updateMyWallet() {
-      const res = await fetchMyWallet({});
-      if (res.code === 200) {
-        if (this.userInfo?.wallet?.balance) {
-          this.userInfo.wallet.balance = res.data.balance;
-        }
-      }
-    },
-    async getUserInfo() {
-      try {
-        const { code, data } = await fetchUserInfo();
-        this.setUserInfo(data);
-        this.setRoles(data.roles);
-        this.setAuths(data.auths);
-        return { code, data };
-      } catch (error) {
-        return error;
-      }
-    },
-  },
-});

+ 0 - 183
src/types/ILiveRoom.ts

@@ -1,183 +0,0 @@
-import { IArea, ILive, SwitchEnum } from '@/interface';
-import { IUser } from '@/types/IUser';
-
-/** 直播间类型 */
-export enum LiveRoomTypeEnum {
-  /** 系统推流 */
-  system,
-  /** 主播使用srs推流 */
-  srs,
-  /** 主播使用obs/ffmpeg推流 */
-  obs,
-  /** 主播使用webrtc推流,直播 */
-  wertc_live,
-  /** 主播使用webrtc推流,会议,实现一 */
-  wertc_meeting_one,
-  /** 主播使用webrtc推流,会议,实现二 */
-  wertc_meeting_two,
-  /** 主播使用msr推流 */
-  msr,
-  /** 主播打pk */
-  pk,
-  /** 主播使用腾讯云css推流 */
-  tencent_css,
-  /** 主播使用腾讯云css推流打pk */
-  tencent_css_pk,
-  /** 转推b站 */
-  forward_bilibili,
-  /** 转推虎牙 */
-  forward_huya,
-  /** 转推斗鱼 */
-  forward_douyu,
-  /** 转推抖音 */
-  forward_douyin,
-  /** 转推抖音 */
-  forward_kuaishou,
-  /** 转推小红书 */
-  forward_xiaohongshu,
-  /** 转推所有 */
-  forward_all,
-}
-
-/** 拉流是否需要鉴权 */
-export enum LiveRoomPullIsShouldAuthEnum {
-  /** 需要鉴权 */
-  yes,
-  /** 不需要鉴权 */
-  no,
-}
-
-/** 直播间状态 */
-export enum LiveRoomStatusEnum {
-  /** 正常 */
-  normal,
-  /** 禁用 */
-  disable,
-}
-
-/** 提醒游客登录 */
-export enum LiveRoomTipTouristLoginEnum {
-  /** 关闭,即不提醒游客登录 */
-  close,
-  /** 开启提醒游客登录,游客可关闭 */
-  open,
-  /** 强制游客登录,即游客不可关闭 */
-  force,
-}
-
-export interface ILiveRoom {
-  id?: number;
-  /** 直播间名称 */
-  name?: string;
-  /** 直播间简介 */
-  desc?: string;
-  /** 是否使用cdn */
-  cdn?: SwitchEnum;
-  /** 权重 */
-  priority?: number;
-  /** 推流秘钥 */
-  key?: string;
-  /** 直播间类型 */
-  type?: LiveRoomTypeEnum;
-  /** 开播预览图 */
-  cover_img?: string;
-  /** 直播间背景图 */
-  bg_img?: string;
-  /** 直播间状态 */
-  status?: LiveRoomStatusEnum;
-  /** 直播间是否显示 */
-  is_show?: SwitchEnum;
-  /** 直播间是否开启聊天 */
-  open_chat?: SwitchEnum;
-  /** 提醒游客登录 */
-  tip_tourist_login?: LiveRoomTipTouristLoginEnum;
-  /** 提醒游客登录间隔 */
-  tip_tourist_login_delay?: number;
-  /** 游客能否发言 */
-  tourist_send_msg?: SwitchEnum;
-  /** 聊天关键词过滤 */
-  keyword_filter_msg?: string;
-  /** 用户名关键词过滤 */
-  keyword_filter_username?: string;
-  /** 历史消息条数 */
-  history_msg_total?: number;
-  /** 新注册用户不能发言时间(秒) */
-  newuser_send_msg_delay?: number;
-  /** 房间密码 */
-  room_pwd?: string;
-  /** 关闭房间 */
-  is_close?: SwitchEnum;
-  /** 关闭房间描述 */
-  is_close_desc?: string;
-  /** 发送消息间隔(秒) */
-  send_msg_throttle?: number;
-  /** 是否开启签到 */
-  is_show_signin?: SwitchEnum;
-  /** 是否开启手机看直播 */
-  is_show_phone_live?: SwitchEnum;
-  /** 公告 */
-  announcement_msg?: string;
-  /** 通知 */
-  notice_msg?: string;
-  /** 系统消息 */
-  system_msg?: string;
-  /** 显示直播间在线人数 */
-  is_show_live_user_nums?: SwitchEnum;
-  /** 设置直播间最低在线人数 */
-  mock_live_user_nums_min?: number;
-  /** 设置直播间最高在线人数 */
-  mock_live_user_nums_max?: number;
-  /** 直播间最在线人数刷新间隔 */
-  mock_live_user_nums_refresh_delay?: number;
-  /** 聊天消息审核 */
-  msg_verify?: SwitchEnum;
-
-  pull_rtmp_url?: string;
-  pull_flv_url?: string;
-  pull_hls_url?: string;
-  pull_webrtc_url?: string;
-
-  pull_cdn_rtmp_url?: string;
-  pull_cdn_flv_url?: string;
-  pull_cdn_hls_url?: string;
-  pull_cdn_webrtc_url?: string;
-
-  push_rtmp_url?: string;
-  push_obs_server?: string;
-  push_obs_stream_key?: string;
-  push_webrtc_url?: string;
-  push_srt_url?: string;
-
-  push_cdn_rtmp_url?: string;
-  push_cdn_obs_server?: string;
-  push_cdn_obs_stream_key?: string;
-  push_cdn_webrtc_url?: string;
-  push_cdn_srt_url?: string;
-
-  forward_bilibili_url?: string;
-  forward_douyu_url?: string;
-  forward_huya_url?: string;
-  forward_douyin_url?: string;
-  forward_kuaishou_url?: string;
-  forward_xiaohongshu_url?: string;
-
-  /** 直播间备注 */
-  remark?: string;
-
-  /** 用户信息 */
-  user?: IUser;
-  /** 用户信息 */
-  users?: IUser[];
-  /** 分区信息 */
-  area?: IArea;
-  /** 分区信息 */
-  areas?: IArea[];
-  /** 直播信息 */
-  live?: ILive;
-
-  is_fake?: SwitchEnum;
-
-  created_at?: string;
-  updated_at?: string;
-  deleted_at?: string;
-}

+ 0 - 166
src/types/IUser.ts

@@ -1,166 +0,0 @@
-import { IAuth, IRole, IWallet } from '@/interface';
-import { ILiveRoom } from '@/types/ILiveRoom';
-
-export interface IQqUser {
-  id?: number;
-  client_id?: number;
-  openid?: string;
-  unionid?: string;
-  nickname?: string;
-  figureurl?: string;
-  figureurl_1?: string;
-  figureurl_2?: string;
-  figureurl_qq_1?: string;
-  figureurl_qq_2?: string;
-  constellation?: string;
-  gender?: string;
-  city?: string;
-  province?: string;
-  year?: string;
-  ret?: number;
-  created_at?: string;
-  updated_at?: string;
-  deleted_at?: string;
-}
-
-export interface IWechatUser {
-  id?: number;
-  appid?: string;
-  openid?: string;
-  nickname?: string;
-  sex?: number;
-  province?: string;
-  city?: string;
-  country?: string;
-  headimgurl?: string;
-  privilege?: string;
-  unionid?: string;
-  created_at?: string;
-  updated_at?: string;
-  deleted_at?: string;
-}
-
-export interface IEmailUser {
-  id?: number;
-  email?: string;
-  created_at?: string;
-  updated_at?: string;
-  deleted_at?: any;
-}
-
-export interface IGithubUser {
-  id?: number;
-  client_id?: string;
-  login?: string;
-  github_id?: number;
-  node_id?: string;
-  avatar_url?: string;
-  gravatar_id?: string;
-  url?: string;
-  html_url?: string;
-  type?: string;
-  site_admin?: string;
-  name?: string;
-  company?: string;
-  blog?: string;
-  location?: string;
-  email?: any;
-  hireable?: any;
-  bio?: string;
-  twitter_username?: any;
-  public_repos?: number;
-  public_gists?: number;
-  followers?: number;
-  following?: number;
-  github_created_at?: string;
-  github_updated_at?: string;
-  private_gists?: number;
-  total_private_repos?: number;
-  owned_private_repos?: number;
-  disk_usage?: number;
-  collaborators?: number;
-  two_factor_authentication?: string;
-  created_at?: string;
-  updated_at?: string;
-  deleted_at?: any;
-}
-
-export interface IThirdUser {
-  id?: number;
-  user_id?: number;
-  third_user_id?: number;
-  third_platform?: number;
-  created_at?: string;
-  updated_at?: string;
-  deleted_at?: string;
-}
-
-/** 用户状态 */
-export enum UserStatusEnum {
-  /** 正常 */
-  normal,
-  /** 禁用 */
-  disable,
-}
-
-export enum UserIsTouristEnum {
-  yes,
-  no,
-}
-
-export enum UserIsRobotEnum {
-  yes,
-  no,
-}
-
-export enum UserCanMsgEnum {
-  yes,
-  no,
-}
-
-export enum UserCanWatchLiveEnum {
-  yes,
-  no,
-}
-
-export enum UserIsKickEnum {
-  yes,
-  no,
-}
-
-export interface IUser {
-  id?: number;
-  username?: string;
-  password?: string;
-  status?: UserStatusEnum;
-  avatar?: string;
-  desc?: string;
-  token?: string;
-  is_tourist?: UserIsTouristEnum;
-  is_robot?: UserIsRobotEnum;
-  can_msg?: UserCanMsgEnum;
-  can_watch_live?: UserCanWatchLiveEnum;
-  is_kick?: UserIsKickEnum;
-  remark?: string;
-  batch_create_user?: IUser[];
-
-  qq_users?: IQqUser[];
-  wechat_users?: IWechatUser[];
-  github_users?: IGithubUser[];
-  email_users?: IEmailUser[];
-  parent_user_id?: number;
-  parent_user_username?: string;
-
-  roles?: IRole[];
-  auths?: IAuth[];
-
-  user_roles?: number[];
-  wallet?: IWallet;
-
-  live_room?: ILiveRoom;
-  live_rooms?: ILiveRoom[];
-
-  created_at?: string;
-  updated_at?: string;
-  deleted_at?: string;
-}

+ 0 - 15
src/types/shims-vue.d.ts

@@ -1,15 +0,0 @@
-declare module '*.vue' {
-  /* eslint-disable */
-  import type { DefineComponent } from 'vue';
-  const component: DefineComponent<{}, {}, any>;
-  export default component;
-}
-
-declare module '*.webp';
-declare module '*.png';
-
-interface Window {
-  $message: import('naive-ui/es/message/src/MessageProvider').MessageApiInjection;
-  $modal: import('naive-ui/es/modal/src/ModalProvider').ModalApiInjection;
-  TXLivePusher: any;
-}

+ 0 - 66
src/types/srs.ts

@@ -1,66 +0,0 @@
-export interface IApiV1Streams {
-  code: number;
-  server: string;
-  service: string;
-  pid: string;
-  streams: {
-    id: string;
-    name: string;
-    vhost: string;
-    app: string;
-    tcUrl: string;
-    url: string;
-    live_ms: number;
-    clients: number;
-    frames: number;
-    send_bytes: number;
-    recv_bytes: number;
-    kbps: {
-      recv_30s: number;
-      send_30s: number;
-    };
-    publish: {
-      active: boolean;
-      cid: string;
-    };
-    video: {
-      codec: string;
-      profile: string;
-      level: string;
-      width: number;
-      height: number;
-    };
-    audio: {
-      codec: string;
-      sample_rate: number;
-      channel: number;
-      profile: string;
-    };
-  }[];
-}
-export interface IApiV1Clients {
-  code: number;
-  server: string;
-  service: string;
-  pid: string;
-  clients: {
-    id: string;
-    vhost: string;
-    stream: string;
-    ip: string;
-    pageUrl: string;
-    swfUrl: string;
-    tcUrl: string;
-    url: string;
-    name: string;
-    type: string;
-    publish: boolean;
-    alive: number;
-    send_bytes: number;
-    recv_bytes: number;
-    kbps: {
-      recv_30s: number;
-      send_30s: number;
-    };
-  }[];
-}

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels