about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/tools/continuous-integration
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/tools/continuous-integration')
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/agola/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/buildbot/default.nix47
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/buildbot/master.nix151
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/buildbot/pkg.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/buildbot/plugins.nix179
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/buildbot/skip_test_linux_distro.patch11
-rwxr-xr-xnixpkgs/pkgs/development/tools/continuous-integration/buildbot/update.sh14
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/buildbot/worker.nix64
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/buildkite-agent/default.nix52
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/buildkite-cli/default.nix33
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/buildkite-test-collector-rust/default.nix31
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/cirrus-cli/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/codeberg-pages/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/codeberg-pages/disable_httptest.patch55
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/dagger/default.nix35
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/0001-use-builtin-go-syscerts.patch39
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/default.nix36
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-docker/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-exec/default.nix27
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-ssh/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/drone/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/fly/default.nix39
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/forgejo-actions-runner/default.nix43
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/gitea-actions-runner/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/github-runner/default.nix320
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/github-runner/deps.nix256
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/dont-install-service.patch28
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/env-sh-use-runner-root.patch76
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/host-context-dirs.patch20
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/use-get-directory-for-diag.patch25
-rwxr-xr-xnixpkgs/pkgs/development/tools/continuous-integration/github-runner/update.sh19
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/default.nix74
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/fix-shell-path.patch25
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/remove-bash-test.patch82
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/gocd-agent/default.nix30
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/gocd-server/default.nix41
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/hci/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/hercules-ci-agent/default.nix72
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/jenkins/default.nix77
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/laminar/default.nix67
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/laminar/patches/no-network.patch39
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/woodpecker-pipeline-transform/default.nix23
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/woodpecker-plugin-git/default.nix42
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/agent.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/cli.nix17
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/common.nix38
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/frontend.nix57
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/server.nix27
-rwxr-xr-xnixpkgs/pkgs/development/tools/continuous-integration/woodpecker/update.sh53
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/woodpecker-package.json76
-rw-r--r--nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/yarn.lock3219
51 files changed, 5962 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/agola/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/agola/default.nix
new file mode 100644
index 000000000000..02cd0f25acd5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/agola/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+let
+  version = "0.8.0";
+in
+
+buildGoModule {
+  pname = "agola";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "agola-io";
+    repo = "agola";
+    rev = "v${version}";
+    hash = "sha256-nU04MVkUC+m6Ga4qDUH9KrA0zbYmttAicpvdxbaBG0Y=";
+  };
+
+  vendorHash = "sha256-k3Sip9CqTGRTWxr3RzZf0jCrm4AfUrpY/wSTmHy+yik=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X agola.io/agola/cmd.Version=${version}"
+  ];
+
+  tags = [
+    "sqlite_unlock_notify"
+  ];
+
+  # somehow the tests get stuck
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Agola: CI/CD Redefined ";
+    homepage = "https://agola.io";
+    maintainers = with maintainers; [ happysalada ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/default.nix
new file mode 100644
index 000000000000..43752d828b63
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/default.nix
@@ -0,0 +1,47 @@
+{ python3
+, fetchPypi
+, recurseIntoAttrs
+, callPackage
+}:
+let
+  python = python3.override {
+    packageOverrides = self: super: {
+      sqlalchemy = super.sqlalchemy.overridePythonAttrs (oldAttrs: rec {
+        version = "1.4.40";
+        src = fetchPypi {
+          pname = "SQLAlchemy";
+          inherit version;
+          hash = "sha256-RKZgUGCAzJdeHfpXdv5fYxXdxiane1C/Du4YsDieomU=";
+        };
+        disabledTestPaths = [
+           "test/aaa_profiling"
+           "test/ext/mypy"
+        ];
+      });
+      moto = super.moto.overridePythonAttrs (oldAttrs: rec {
+        # a lot of tests -> very slow, we already build them when building python packages
+        doCheck = false;
+      });
+    };
+  };
+
+  buildbot-pkg = python.pkgs.callPackage ./pkg.nix {
+    inherit buildbot;
+  };
+  buildbot-worker = python3.pkgs.callPackage ./worker.nix {
+    inherit buildbot;
+  };
+  buildbot = python.pkgs.callPackage ./master.nix {
+    inherit buildbot-pkg buildbot-worker buildbot-plugins;
+  };
+  buildbot-plugins = recurseIntoAttrs (callPackage ./plugins.nix {
+    inherit buildbot-pkg;
+  });
+in
+{
+  inherit buildbot buildbot-plugins buildbot-worker;
+  buildbot-ui = buildbot.withPlugins (with buildbot-plugins; [ www ]);
+  buildbot-full = buildbot.withPlugins (with buildbot-plugins; [
+    www console-view waterfall-view grid-view wsgi-dashboards badges
+  ]);
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/master.nix b/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/master.nix
new file mode 100644
index 000000000000..d4c08cafbf26
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/master.nix
@@ -0,0 +1,151 @@
+{ lib
+, stdenv
+, buildPythonPackage
+, buildPythonApplication
+, fetchPypi
+, makeWrapper
+, pythonOlder
+, python
+, twisted
+, jinja2
+, msgpack
+, zope_interface
+, sqlalchemy
+, alembic
+, python-dateutil
+, txaio
+, autobahn
+, pyjwt
+, pyyaml
+, treq
+, txrequests
+, pypugjs
+, boto3
+, moto
+, markdown
+, lz4
+, setuptoolsTrial
+, buildbot-worker
+, buildbot-plugins
+, buildbot-pkg
+, parameterized
+, git
+, openssh
+, glibcLocales
+, nixosTests
+, callPackage
+}:
+
+let
+  withPlugins = plugins: buildPythonApplication {
+    pname = "${package.pname}-with-plugins";
+    inherit (package) version;
+    format = "other";
+
+    dontUnpack = true;
+    dontBuild = true;
+    doCheck = false;
+
+    nativeBuildInputs = [
+      makeWrapper
+    ];
+
+    propagatedBuildInputs = plugins ++ package.propagatedBuildInputs;
+
+    installPhase = ''
+      makeWrapper ${package}/bin/buildbot $out/bin/buildbot \
+        --prefix PYTHONPATH : "${package}/${python.sitePackages}:$PYTHONPATH"
+      ln -sfv ${package}/lib $out/lib
+    '';
+
+    passthru = package.passthru // {
+      withPlugins = morePlugins: withPlugins (morePlugins ++ plugins);
+    };
+  };
+
+  package = buildPythonApplication rec {
+    pname = "buildbot";
+    version = "3.9.2";
+    format = "setuptools";
+
+    disabled = pythonOlder "3.7";
+
+    src = fetchPypi {
+      inherit pname version;
+      hash = "sha256-7QhIMUpzmxbh8qjz0hgqzibLkWADhTV523neo1wpGSA=";
+    };
+
+    propagatedBuildInputs = [
+      # core
+      twisted
+      jinja2
+      msgpack
+      zope_interface
+      sqlalchemy
+      alembic
+      python-dateutil
+      txaio
+      autobahn
+      pyjwt
+      pyyaml
+    ]
+      # tls
+      ++ twisted.optional-dependencies.tls;
+
+    nativeCheckInputs = [
+      treq
+      txrequests
+      pypugjs
+      boto3
+      moto
+      markdown
+      lz4
+      setuptoolsTrial
+      buildbot-worker
+      buildbot-pkg
+      buildbot-plugins.www
+      parameterized
+      git
+      openssh
+      glibcLocales
+    ];
+
+    patches = [
+      # This patch disables the test that tries to read /etc/os-release which
+      # is not accessible in sandboxed builds.
+      ./skip_test_linux_distro.patch
+    ];
+
+    postPatch = ''
+      substituteInPlace buildbot/scripts/logwatcher.py --replace '/usr/bin/tail' "$(type -P tail)"
+    '';
+
+    # TimeoutErrors on slow machines -> aarch64
+    doCheck = !stdenv.isAarch64;
+
+    preCheck = ''
+      export LC_ALL="en_US.UTF-8"
+      export PATH="$out/bin:$PATH"
+
+      # remove testfile which is missing configuration file from sdist
+      rm buildbot/test/integration/test_graphql.py
+      # tests in this file are flaky, see https://github.com/buildbot/buildbot/issues/6776
+      rm buildbot/test/integration/test_try_client.py
+    '';
+
+    passthru = {
+      inherit withPlugins;
+      tests.buildbot = nixosTests.buildbot;
+      updateScript = ./update.sh;
+    };
+
+    meta = with lib; {
+      description = "An open-source continuous integration framework for automating software build, test, and release processes";
+      homepage = "https://buildbot.net/";
+      changelog = "https://github.com/buildbot/buildbot/releases/tag/v${version}";
+      maintainers = with maintainers; [ ryansydnor lopsided98 ];
+      license = licenses.gpl2Only;
+      broken = stdenv.isDarwin;
+    };
+  };
+in package
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/pkg.nix b/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/pkg.nix
new file mode 100644
index 000000000000..2af7289000e2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/pkg.nix
@@ -0,0 +1,31 @@
+{ lib, buildPythonPackage, fetchPypi, isPy3k, buildbot }:
+
+buildPythonPackage rec {
+  pname = "buildbot-pkg";
+  inherit (buildbot) version;
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-HmkJHN81AcQdKrA/XnH3REURCssXnzmoKjcmvinfzFo=";
+  };
+
+  postPatch = ''
+    # Their listdir function filters out `node_modules` folders.
+    # Do we have to care about that with Nix...?
+    substituteInPlace buildbot_pkg.py --replace "os.listdir = listdir" ""
+  '';
+
+  # No tests
+  doCheck = false;
+
+  pythonImportsCheck = [ "buildbot_pkg" ];
+
+  disabled = !isPy3k;
+
+  meta = with lib; {
+    homepage = "https://buildbot.net/";
+    description = "Buildbot Packaging Helper";
+    maintainers = with maintainers; [ ryansydnor lopsided98 ];
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/plugins.nix b/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/plugins.nix
new file mode 100644
index 000000000000..429c19ecfcee
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/plugins.nix
@@ -0,0 +1,179 @@
+{ lib, buildPythonPackage, fetchPypi, fetchurl, callPackage, mock, cairosvg, klein, jinja2, buildbot-pkg, unzip, zip }:
+{
+  # this is exposed for potential plugins to use and for nix-update
+  inherit buildbot-pkg;
+  www = buildPythonPackage rec {
+    pname = "buildbot-www";
+    inherit (buildbot-pkg) version;
+
+    src = fetchPypi {
+      inherit pname version;
+      hash = "sha256-fwWzgIf0/+UiKRyiFUKPN4WUbmxQE5sU/ChAOqqLHE4=";
+    };
+
+    # Remove unnecessary circular dependency on buildbot
+    postPatch = ''
+      sed -i "s/'buildbot'//" setup.py
+    '';
+
+    buildInputs = [ buildbot-pkg mock ];
+
+    # No tests
+    doCheck = false;
+
+    meta = with lib; {
+      homepage = "https://buildbot.net/";
+      description = "Buildbot UI";
+      maintainers = with maintainers; [ ryansydnor lopsided98 ];
+      license = licenses.gpl2;
+    };
+  };
+
+  www-react = buildPythonPackage rec {
+    pname = "buildbot-www-react";
+    inherit (buildbot-pkg) version;
+    format = "wheel";
+
+    # fetchpypy returns a 404 for the wheel?
+    # normal source release doesn't have any assets
+    src = fetchurl {
+      url = "https://github.com/buildbot/buildbot/releases/download/v${version}/buildbot_www_react-${version}-py3-none-any.whl";
+      hash = "sha256-pEzuMiDhGQtIWQm80lgKIcTjnS7Z8UJhH9plJup5O84=";
+    };
+
+    # Remove unneccessary circular dependency on buildbot
+    postPatch = ''
+      pushd dist
+      unzip buildbot_www_react-${version}-py3-none-any.whl
+      sed -i "s/Requires-Dist: buildbot//" buildbot_www_react-${version}.dist-info/METADATA
+      chmod -R u+w buildbot_www_react-${version}-py3-none-any.whl
+      zip -r buildbot_www_react-${version}-py3-none-any.whl buildbot_www_react-${version}.dist-info
+      popd
+    '';
+
+    buildInputs = [ buildbot-pkg ];
+    nativeBuildInputs = [ unzip zip ];
+
+    # No tests
+    doCheck = false;
+
+    meta = with lib; {
+      homepage = "https://buildbot.net/";
+      description = "Buildbot UI (React)";
+      maintainers = with maintainers; [ mic92 ];
+      license = licenses.gpl2Only;
+    };
+  };
+
+  console-view = buildPythonPackage rec {
+    pname = "buildbot-console-view";
+    inherit (buildbot-pkg) version;
+
+    src = fetchPypi {
+      inherit pname version;
+      hash = "sha256-ghCmbUw/Gj23J5X3fDn/FGkVvXUE9QWrPFTRXSsxEZ4=";
+    };
+
+    buildInputs = [ buildbot-pkg ];
+
+    # No tests
+    doCheck = false;
+
+    meta = with lib; {
+      homepage = "https://buildbot.net/";
+      description = "Buildbot Console View Plugin";
+      maintainers = with maintainers; [ ryansydnor lopsided98 ];
+      license = licenses.gpl2;
+    };
+  };
+
+  waterfall-view = buildPythonPackage rec {
+    pname = "buildbot-waterfall-view";
+    inherit (buildbot-pkg) version;
+
+    src = fetchPypi {
+      inherit pname version;
+      hash = "sha256-B+xUsZBQWt4TwiBqukHO6o0R0XbjLxbCxQKLaWW0/Fw=";
+    };
+
+    buildInputs = [ buildbot-pkg ];
+
+    # No tests
+    doCheck = false;
+
+    meta = with lib; {
+      homepage = "https://buildbot.net/";
+      description = "Buildbot Waterfall View Plugin";
+      maintainers = with maintainers; [ ryansydnor lopsided98 ];
+      license = licenses.gpl2;
+    };
+  };
+
+  grid-view = buildPythonPackage rec {
+    pname = "buildbot-grid-view";
+    inherit (buildbot-pkg) version;
+
+    src = fetchPypi {
+      inherit pname version;
+      hash = "sha256-LFZ3VquRHAHkRcQbw9apOlGlWCK42WT1tPGhW8zSXyo=";
+    };
+
+    buildInputs = [ buildbot-pkg ];
+
+    # No tests
+    doCheck = false;
+
+    meta = with lib; {
+      homepage = "https://buildbot.net/";
+      description = "Buildbot Grid View Plugin";
+      maintainers = with maintainers; [ lopsided98 ];
+      license = licenses.gpl2;
+    };
+  };
+
+  wsgi-dashboards = buildPythonPackage rec {
+    pname = "buildbot-wsgi-dashboards";
+    inherit (buildbot-pkg) version;
+
+    src = fetchPypi {
+      inherit pname version;
+      hash = "sha256-NGI4T0eVV4MxYpD7+BTKbi3r6USt28lXXInrgSd4ASU=";
+    };
+
+    buildInputs = [ buildbot-pkg ];
+
+    # No tests
+    doCheck = false;
+
+    meta = with lib; {
+      homepage = "https://buildbot.net/";
+      description = "Buildbot WSGI dashboards Plugin";
+      maintainers = with maintainers; [ lopsided98 ];
+      license = licenses.gpl2;
+    };
+  };
+
+  badges = buildPythonPackage rec {
+    pname = "buildbot-badges";
+    inherit (buildbot-pkg) version;
+
+    src = fetchPypi {
+      inherit pname version;
+      hash = "sha256-BtKA8zuJEyg3q3GnHS4XSGBLBk3IqCR8NOKui2rIn6Q=";
+    };
+
+    buildInputs = [ buildbot-pkg ];
+    propagatedBuildInputs = [ cairosvg klein jinja2 ];
+
+    # No tests
+    doCheck = false;
+
+    meta = with lib; {
+      homepage = "https://buildbot.net/";
+      description = "Buildbot Badges Plugin";
+      maintainers = with maintainers; [ julienmalka ];
+      license = licenses.gpl2;
+    };
+  };
+
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/skip_test_linux_distro.patch b/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/skip_test_linux_distro.patch
new file mode 100644
index 000000000000..8fe5c7b56b4f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/skip_test_linux_distro.patch
@@ -0,0 +1,11 @@
+diff -Nur buildbot-0.9.6/buildbot/test/unit/test_buildbot_net_usage_data.py buildbot-0.9.6.patched/buildbot/test/unit/test_buildbot_net_usage_data.py
+--- buildbot-0.9.6/buildbot/test/unit/test_buildbot_net_usage_data.py	2017-04-19 16:57:02.000000000 +0200
++++ buildbot-0.9.6.patched/buildbot/test/unit/test_buildbot_net_usage_data.py	2017-05-04 12:22:54.575762551 +0200
+@@ -147,6 +147,7 @@
+         _sendBuildbotNetUsageData({'foo': 'bar'})
+ 
+     def test_linux_distro(self):
++        raise SkipTest("NixOS sandboxed builds hides /etc/os-release")
+         system = platform.system()
+         if system != "Linux":
+             raise SkipTest("test is only for linux")
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/update.sh b/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/update.sh
new file mode 100755
index 000000000000..3bbbfc840e44
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/update.sh
@@ -0,0 +1,14 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p nix-update
+set -eu -o pipefail
+
+nix-update buildbot
+nix-update --version=skip buildbot-worker
+nix-update --version=skip buildbot-plugins.buildbot-pkg
+nix-update --version=skip buildbot-plugins.www
+nix-update --version=skip buildbot-plugins.www-react
+nix-update --version=skip buildbot-plugins.console-view
+nix-update --version=skip buildbot-plugins.waterfall-view
+nix-update --version=skip buildbot-plugins.grid-view
+nix-update --version=skip buildbot-plugins.wsgi-dashboards
+nix-update --version=skip buildbot-plugins.badges
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/worker.nix b/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/worker.nix
new file mode 100644
index 000000000000..5f3c0efab417
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/buildbot/worker.nix
@@ -0,0 +1,64 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, buildbot
+
+# patch
+, coreutils
+
+# propagates
+, autobahn
+, future
+, msgpack
+, twisted
+
+# tests
+, parameterized
+, psutil
+, setuptoolsTrial
+
+# passthru
+, nixosTests
+}:
+
+buildPythonPackage (rec {
+  pname = "buildbot-worker";
+  inherit (buildbot) version;
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-jI38ZhCcHbjah6lST6YtSZAwaeZPBWsgY3VTUf6s2x8=";
+  };
+
+  postPatch = ''
+    substituteInPlace buildbot_worker/scripts/logwatcher.py \
+      --replace /usr/bin/tail "${coreutils}/bin/tail"
+  '';
+
+  nativeBuildInputs = [
+    setuptoolsTrial
+  ];
+
+  propagatedBuildInputs = [
+    autobahn
+    future
+    msgpack
+    twisted
+  ];
+
+  nativeCheckInputs = [
+    parameterized
+    psutil
+  ];
+
+  passthru.tests = {
+    smoke-test = nixosTests.buildbot;
+  };
+
+  meta = with lib; {
+    homepage = "https://buildbot.net/";
+    description = "Buildbot Worker Daemon";
+    maintainers = with maintainers; [ ryansydnor lopsided98 ];
+    license = licenses.gpl2;
+  };
+})
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-agent/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-agent/default.nix
new file mode 100644
index 000000000000..215de1235822
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-agent/default.nix
@@ -0,0 +1,52 @@
+{ fetchFromGitHub, lib, buildGoModule,
+  makeWrapper, coreutils, git, openssh, bash, gnused, gnugrep,
+  nixosTests }:
+buildGoModule rec {
+  pname = "buildkite-agent";
+  version = "3.49.0";
+
+  src = fetchFromGitHub {
+    owner = "buildkite";
+    repo = "agent";
+    rev = "v${version}";
+    sha256 = "sha256-gsGG0NljFBbqsuY0nk5PVpIPLgusE5C/ruxANl4F9Xg=";
+  };
+
+  vendorHash = "sha256-Gz7A0pbbLuxzNIfcUh5ki2EiSJY/qtBeWxv0Y6pQkTc=";
+
+  postPatch = ''
+    substituteInPlace bootstrap/shell/shell.go --replace /bin/bash ${bash}/bin/bash
+  '';
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  doCheck = false;
+
+  postInstall = ''
+    # Fix binary name
+    mv $out/bin/{agent,buildkite-agent}
+
+    # These are runtime dependencies
+    wrapProgram $out/bin/buildkite-agent \
+      --prefix PATH : '${lib.makeBinPath [ openssh git coreutils gnused gnugrep ]}'
+  '';
+
+  passthru.tests = {
+    smoke-test = nixosTests.buildkite-agents;
+  };
+
+  meta = with lib; {
+    description = "Build runner for buildkite.com";
+    longDescription = ''
+      The buildkite-agent is a small, reliable, and cross-platform build runner
+      that makes it easy to run automated builds on your own infrastructure.
+      It’s main responsibilities are polling buildkite.com for work, running
+      build jobs, reporting back the status code and output log of the job,
+      and uploading the job's artifacts.
+    '';
+    homepage = "https://buildkite.com/docs/agent";
+    license = licenses.mit;
+    maintainers = with maintainers; [ pawelpacana zimbatm rvl techknowlogick ];
+    platforms = with platforms; unix ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-cli/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-cli/default.nix
new file mode 100644
index 000000000000..5e191cb83b32
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-cli/default.nix
@@ -0,0 +1,33 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "buildkite-cli";
+  version = "2.0.0";
+
+  src = fetchFromGitHub {
+    owner = "buildkite";
+    repo = "cli";
+    rev = "v${version}";
+    sha256 = "sha256-4MUgyUKyycsreAMVtyKJFpQOHvI6JJSn7TUZtbQANyc=";
+  };
+
+  vendorHash = "sha256-3x7yJenJ2BHdqVPaBaqfFVeOSJZ/VRNF/TTfSsw+2os=";
+
+  doCheck = false;
+
+  postPatch = ''
+    patchShebangs .buildkite/steps/{lint,run-local}.sh
+  '';
+
+  subPackages = [ "cmd/bk" ];
+
+  ldflags = [ "-s" "-w" "-X main.VERSION=${version}" ];
+
+  meta = with lib; {
+    description = "A command line interface for Buildkite";
+    homepage = "https://github.com/buildkite/cli";
+    license = licenses.mit;
+    maintainers = with maintainers; [ groodt ];
+    mainProgram = "bk";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-test-collector-rust/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-test-collector-rust/default.nix
new file mode 100644
index 000000000000..7f1e6c55f5fa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/buildkite-test-collector-rust/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, stdenv
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "buildkite-test-collector-rust";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "buildkite";
+    repo = "test-collector-rust";
+    rev = "v${version}";
+    sha256 = "sha256-rY/+AwxO0+xcnRj0A8TRhCUJQ0ecosybI6It1mDOdQM=";
+  };
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  cargoSha256 = "sha256-qfJ0ROi0S0mmPl6kKrW3dp3VLjYqK+sBVj+iKDNTjyM=";
+
+  meta = with lib; {
+    description = "Rust adapter for Buildkite Test Analytics";
+    homepage = "https://buildkite.com/test-analytics";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ jfroche ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/cirrus-cli/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/cirrus-cli/default.nix
new file mode 100644
index 000000000000..fa95291295dc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/cirrus-cli/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "cirrus-cli";
+  version = "0.102.0";
+
+  src = fetchFromGitHub {
+    owner = "cirruslabs";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-JF93tVEwGY4wHNNkQyzxjai6S+qLzBd0SPdDgkn4Wdc=";
+  };
+
+  vendorHash = "sha256-ryEFSFQFASH+yzmHbxLSywg9xewbvg9JGliSJrFC4U0=";
+
+  ldflags = [
+    "-X github.com/cirruslabs/cirrus-cli/internal/version.Version=v${version}"
+    "-X github.com/cirruslabs/cirrus-cli/internal/version.Commit=v${version}"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+  postInstall = ''
+    installShellCompletion --cmd cirrus \
+      --bash <($out/bin/cirrus completion bash) \
+      --zsh <($out/bin/cirrus completion zsh) \
+      --fish <($out/bin/cirrus completion fish)
+  '';
+
+  # tests fail on read-only filesystem
+  doCheck = false;
+
+  meta = with lib; {
+    description = "CLI for executing Cirrus tasks locally and in any CI";
+    homepage = "https://github.com/cirruslabs/cirrus-cli";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ techknowlogick ];
+    mainProgram = "cirrus";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/codeberg-pages/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/codeberg-pages/default.nix
new file mode 100644
index 000000000000..d252266f2377
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/codeberg-pages/default.nix
@@ -0,0 +1,30 @@
+{ lib, fetchFromGitea, buildGoModule }:
+
+buildGoModule rec {
+  pname = "codeberg-pages";
+  version = "4.6.2";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "Codeberg";
+    repo = "pages-server";
+    rev = "ce241fa40adee2b12f8e225db98e09a45bc2acbb";
+    sha256 = "sha256-mL2Xs7eyldoZK4zrX6WFlFtwdLN0iVyl1Qh8X6b2u9c=";
+  };
+
+  vendorHash = "sha256-R/LuZkA2xHmu7SO3BVyK1C6n9U+pYn50kNkyLltn2ng=";
+
+  patches = [ ./disable_httptest.patch ];
+
+  ldflags = [ "-s" "-w" ];
+
+  tags = [ "sqlite" "sqlite_unlock_notify" "netgo" ];
+
+  meta = with lib; {
+    mainProgram = "codeberg-pages";
+    maintainers = with maintainers; [ laurent-f1z1 ];
+    license = licenses.eupl12;
+    homepage = "https://codeberg.org/Codeberg/pages-server";
+    description = "Static websites hosting from Gitea repositories";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/codeberg-pages/disable_httptest.patch b/nixpkgs/pkgs/development/tools/continuous-integration/codeberg-pages/disable_httptest.patch
new file mode 100644
index 000000000000..2095b603badc
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/codeberg-pages/disable_httptest.patch
@@ -0,0 +1,55 @@
+diff --git a/server/handler/handler_test.go b/server/handler/handler_test.go
+deleted file mode 100644
+index 626564a..0000000
+--- a/server/handler/handler_test.go
++++ /dev/null
+@@ -1,49 +0,0 @@
+-package handler
+-
+-import (
+-	"net/http/httptest"
+-	"testing"
+-	"time"
+-
+-	"codeberg.org/codeberg/pages/server/cache"
+-	"codeberg.org/codeberg/pages/server/gitea"
+-	"github.com/rs/zerolog/log"
+-)
+-
+-func TestHandlerPerformance(t *testing.T) {
+-	giteaClient, _ := gitea.NewClient("https://codeberg.org", "", cache.NewKeyValueCache(), false, false)
+-	testHandler := Handler(
+-		"codeberg.page", "raw.codeberg.org",
+-		giteaClient,
+-		"https://docs.codeberg.org/pages/raw-content/",
+-		[]string{"/.well-known/acme-challenge/"},
+-		[]string{"raw.codeberg.org", "fonts.codeberg.org", "design.codeberg.org"},
+-		cache.NewKeyValueCache(),
+-		cache.NewKeyValueCache(),
+-	)
+-
+-	testCase := func(uri string, status int) {
+-		t.Run(uri, func(t *testing.T) {
+-			req := httptest.NewRequest("GET", uri, nil)
+-			w := httptest.NewRecorder()
+-
+-			log.Printf("Start: %v\n", time.Now())
+-			start := time.Now()
+-			testHandler(w, req)
+-			end := time.Now()
+-			log.Printf("Done: %v\n", time.Now())
+-
+-			resp := w.Result()
+-
+-			if resp.StatusCode != status {
+-				t.Errorf("request failed with status code %d", resp.StatusCode)
+-			} else {
+-				t.Logf("request took %d milliseconds", end.Sub(start).Milliseconds())
+-			}
+-		})
+-	}
+-
+-	testCase("https://mondstern.codeberg.page/", 404) // TODO: expect 200
+-	testCase("https://codeberg.page/", 404)           // TODO: expect 200
+-	testCase("https://example.momar.xyz/", 424)
+-}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/dagger/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/dagger/default.nix
new file mode 100644
index 000000000000..816702d263ed
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/dagger/default.nix
@@ -0,0 +1,35 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, dagger }:
+
+buildGoModule rec {
+  pname = "dagger";
+  version = "0.8.4";
+
+  src = fetchFromGitHub {
+    owner = "dagger";
+    repo = "dagger";
+    rev = "v${version}";
+    hash = "sha256-iFuPbSat555QHPqqP6j/6uTid19x1+OtRHADmGxTYzs=";
+  };
+
+  vendorHash = "sha256-DWmHq8BIR00QTh3ZcbEgTtbHwTmsMFAhV7kQVRSKNdQ=";
+  proxyVendor = true;
+
+  subPackages = [
+    "cmd/dagger"
+  ];
+
+  ldflags = [ "-s" "-w" "-X github.com/dagger/dagger/engine.Version=${version}" ];
+
+  passthru.tests.version = testers.testVersion {
+    package = dagger;
+    command = "dagger version";
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    description = "A portable devkit for CICD pipelines";
+    homepage = "https://dagger.io";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jfroche sagikazarmark ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/0001-use-builtin-go-syscerts.patch b/nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/0001-use-builtin-go-syscerts.patch
new file mode 100644
index 000000000000..6dfb50271a49
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/0001-use-builtin-go-syscerts.patch
@@ -0,0 +1,39 @@
+From 93f4f92b017935a35988e7210036db8020753f9e Mon Sep 17 00:00:00 2001
+From: Jake Hillion <jake@hillion.co.uk>
+Date: Sun, 21 Feb 2021 21:26:39 +0000
+Subject: [PATCH] removed dependency for systemcertpool
+
+---
+ drone/internal/util.go | 7 +++++--
+ go.mod                 | 1 -
+ 2 files changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/drone/internal/util.go b/drone/internal/util.go
+index 46c8ec6f..25d4def7 100644
+--- a/drone/internal/util.go
++++ b/drone/internal/util.go
+@@ -2,11 +2,11 @@ package internal
+ 
+ import (
+ 	"crypto/tls"
++	"crypto/x509"
+ 	"fmt"
+ 	"net/http"
+ 	"strings"
+ 
+-	"github.com/jackspirou/syscerts"
+ 	"github.com/urfave/cli"
+ 	"golang.org/x/net/proxy"
+ 	"golang.org/x/oauth2"
+@@ -35,7 +35,10 @@ func NewClient(c *cli.Context) (drone.Client, error) {
+ 	}
+ 
+ 	// attempt to find system CA certs
+-	certs := syscerts.SystemRootsPool()
++	certs, err := x509.SystemCertPool()
++	if err != nil {
++		return nil, err
++	}
+ 	tlsConfig := &tls.Config{
+ 		RootCAs:            certs,
+ 		InsecureSkipVerify: skip,
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/default.nix
new file mode 100644
index 000000000000..ce5849048a66
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/drone-cli/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+}:
+
+buildGoModule rec {
+  version = "1.7.0";
+  pname = "drone-cli";
+  revision = "v${version}";
+
+  src = fetchFromGitHub {
+    owner = "harness";
+    repo = "drone-cli";
+    rev = revision;
+    hash = "sha256-PZ0M79duSctPepD5O+NdJZKhkyR21g/4P6loJtoWZiU=";
+  };
+
+  vendorHash = "sha256-JC7OR4ySDsVWmrBBTjpwZrkJlM8RJehbsvXW/VtA4VA=";
+
+  # patch taken from https://patch-diff.githubusercontent.com/raw/harness/drone-cli/pull/179.patch
+  # but with go.mod changes removed due to conflict
+  patches = [ ./0001-use-builtin-go-syscerts.patch ];
+
+  ldflags = [
+    "-X main.version=${version}"
+  ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    mainProgram = "drone";
+    maintainers = with maintainers; [ techknowlogick ];
+    license = licenses.asl20;
+    description = "Command line client for the Drone continuous integration server";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-docker/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-docker/default.nix
new file mode 100644
index 000000000000..974cd8f464cb
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-docker/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "drone-runner-docker";
+  version = "1.8.3";
+
+  src = fetchFromGitHub {
+    owner = "drone-runners";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-ZoQeCuT5FRhxp/ikB0gkp3QVOQ6OS7ukkz4QanWT9G0=";
+  };
+
+  vendorHash = "sha256-KcNp3VdJ201oxzF0bLXY4xWHqHNz54ZrVSI96cfhU+k=";
+
+  meta = with lib; {
+    maintainers = with maintainers; [ endocrimes emilylange ];
+    license = licenses.unfreeRedistributable;
+    homepage = "https://github.com/drone-runners/drone-runner-docker";
+    description = "Drone pipeline runner that executes builds inside Docker containers";
+    mainProgram = "drone-runner-docker";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-exec/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-exec/default.nix
new file mode 100644
index 000000000000..1e9d1e96a9a9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-exec/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "drone-runner-exec";
+  version = "unstable-2020-04-19";
+
+  src = fetchFromGitHub {
+    owner = "drone-runners";
+    repo = "drone-runner-exec";
+    rev = "c0a612ef2bdfdc6d261dfbbbb005c887a0c3668d";
+    sha256 = "sha256-0UIJwpC5Y2TQqyZf6C6neICYBZdLQBWAZ8/K1l6KVRs=";
+  };
+
+  vendorHash = "sha256-ypYuQKxRhRQGX1HtaWt6F6BD9vBpD8AJwx/4esLrJsw=";
+
+  meta = with lib; {
+    description = "Drone pipeline runner that executes builds directly on the host machine";
+    homepage = "https://github.com/drone-runners/drone-runner-exec";
+    # https://polyformproject.org/licenses/small-business/1.0.0/
+    license = licenses.unfree;
+    maintainers = with maintainers; [ mic92 ];
+    mainProgram = "drone-runner-exec";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-ssh/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-ssh/default.nix
new file mode 100644
index 000000000000..92a015f8e95a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/drone-runner-ssh/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "drone-runner-ssh";
+  version = "unstable-2022-12-22";
+
+  src = fetchFromGitHub {
+    owner = "drone-runners";
+    repo = pname;
+    rev = "ee70745c60e070a7fac57d9cecc41252e7a3ff55";
+    sha256 = "sha256-YUyhEA1kYIFLN+BI2A8PFeSgifoVNmNPKtdS58MwwVU=";
+  };
+
+  vendorHash = "sha256-Vj6ZmNwegKBVJPh6MsjtLMmX9WR76msuR2DPM8Qyhe0=";
+
+  meta = with lib; {
+    description = "Experimental Drone runner that executes a pipeline on a remote machine";
+    homepage = "https://github.com/drone-runners/drone-runner-ssh";
+    license = licenses.unfreeRedistributable;
+    maintainers = teams.c3d2.members;
+    mainProgram = "drone-runner-ssh";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/drone/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/drone/default.nix
new file mode 100644
index 000000000000..a7092f3c1f9a
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/drone/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+, enableUnfree ? true
+}:
+
+buildGoModule rec {
+  pname = "drone.io${lib.optionalString (!enableUnfree) "-oss"}";
+  version = "2.20.0";
+
+  src = fetchFromGitHub {
+    owner = "harness";
+    repo = "drone";
+    rev = "v${version}";
+    sha256 = "sha256-YiKULnLSP5wgrYob1t4HssGS9ubSR5dHECIwnAicg8M=";
+  };
+
+  vendorHash = "sha256-3GPe76zcyKItYWedmnAnmN4c1AorQePxxWXkRk0vNpk=";
+
+  tags = lib.optionals (!enableUnfree) [ "oss" "nolimit" ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Continuous Integration platform built on container technology";
+    homepage = "https://github.com/harness/drone";
+    maintainers = with maintainers; [ elohmeier vdemeester techknowlogick ];
+    license = with licenses; if enableUnfree then unfreeRedistributable else asl20;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/fly/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/fly/default.nix
new file mode 100644
index 000000000000..cc6d2a70f211
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/fly/default.nix
@@ -0,0 +1,39 @@
+{ buildGoModule, fetchFromGitHub, stdenv, lib, installShellFiles }:
+
+buildGoModule rec {
+  pname = "fly";
+  version = "7.10.0";
+
+  src = fetchFromGitHub {
+    owner = "concourse";
+    repo = "concourse";
+    rev = "v${version}";
+    hash = "sha256-KmKIr7Y3CQmv1rXdju6xwUHABqj/dkXpgWc/yNrAza8=";
+  };
+
+  vendorHash = "sha256-lc0okniezfTNLsnCBIABQxSgakRUidsprrEnkH8il2g=";
+
+  subPackages = [ "fly" ];
+
+  ldflags = [
+    "-s" "-w" "-X github.com/concourse/concourse.Version=${version}"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  doCheck = false;
+
+  postInstall = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
+    installShellCompletion --cmd fly \
+      --bash <($out/bin/fly completion --shell bash) \
+      --fish <($out/bin/fly completion --shell fish) \
+      --zsh <($out/bin/fly completion --shell zsh)
+  '';
+
+  meta = with lib; {
+    description = "Command line interface to Concourse CI";
+    homepage = "https://concourse-ci.org";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ivanbrennan SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/forgejo-actions-runner/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/forgejo-actions-runner/default.nix
new file mode 100644
index 000000000000..8b9a108d3db5
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/forgejo-actions-runner/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildGoModule
+, fetchFromGitea
+, testers
+, forgejo-actions-runner
+}:
+
+buildGoModule rec {
+  pname = "forgejo-actions-runner";
+  version = "2.4.0";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "forgejo";
+    repo = "runner";
+    rev = "v${version}";
+    hash = "sha256-EEwXo2MvdBlSMho4rrYD4wXLccS/30NbCuxO0CUktgE=";
+  };
+
+  vendorHash = "sha256-FspNmiphGHSeZFmdlWIDsEUrCc8THfb0Wm67cMCTtHI=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X gitea.com/gitea/act_runner/internal/pkg/ver.version=${src.rev}"
+  ];
+
+  doCheck = false; # Test try to lookup code.forgejo.org.
+
+  passthru.tests.version = testers.testVersion {
+    package = forgejo-actions-runner;
+    version = src.rev;
+  };
+
+  meta = with lib; {
+    description = "A runner for Forgejo based on act";
+    homepage = "https://code.forgejo.org/forgejo/runner";
+    changelog = "https://gitea.com/gitea/act_runner/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kranzes ];
+    mainProgram = "act_runner";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/gitea-actions-runner/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/gitea-actions-runner/default.nix
new file mode 100644
index 000000000000..cd2a9788f406
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/gitea-actions-runner/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, fetchFromGitea
+, buildGoModule
+, testers
+, gitea-actions-runner
+}:
+
+buildGoModule rec {
+  pname = "gitea-actions-runner";
+  version = "0.2.5";
+
+  src = fetchFromGitea {
+    domain = "gitea.com";
+    owner = "gitea";
+    repo = "act_runner";
+    rev = "v${version}";
+    hash = "sha256-HWJrgZJfI5fOeZvQkmpd6wciJWh1JOmZMlyGHSbgHpc=";
+  };
+
+  vendorHash = "sha256-Z61kTbKHSUpt2F6jVUUK4KwMJ0ILT1FI4/62AkNQuZI=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X gitea.com/gitea/act_runner/internal/pkg/ver.version=v${version}"
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = gitea-actions-runner;
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    mainProgram = "act_runner";
+    maintainers = with maintainers; [ techknowlogick ];
+    license = licenses.mit;
+    changelog = "https://gitea.com/gitea/act_runner/releases/tag/v${version}";
+    homepage = "https://gitea.com/gitea/act_runner";
+    description = "A runner for Gitea based on act";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/default.nix
new file mode 100644
index 000000000000..0b1a21c2852b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/default.nix
@@ -0,0 +1,320 @@
+{ autoPatchelfHook
+, autoSignDarwinBinariesHook
+, buildDotnetModule
+, dotnetCorePackages
+, fetchFromGitHub
+, fetchpatch
+, git
+, glibc
+, glibcLocales
+, lib
+, nixosTests
+, stdenv
+, which
+, buildPackages
+, runtimeShell
+  # List of Node.js runtimes the package should support
+, nodeRuntimes ? [ "node20" ]
+, nodejs_16
+, nodejs_20
+}:
+
+# Node.js runtimes supported by upstream
+assert builtins.all (x: builtins.elem x [ "node16" "node20" ]) nodeRuntimes;
+
+buildDotnetModule rec {
+  pname = "github-runner";
+  version = "2.308.0";
+
+  src = fetchFromGitHub {
+    owner = "actions";
+    repo = "runner";
+    rev = "v${version}";
+    hash = "sha256-LrHScQbBkRPSNsfPxvE2+K9tON8xuR0e4JpKVuI+Gu0=";
+    leaveDotGit = true;
+    postFetch = ''
+      git -C $out rev-parse --short HEAD > $out/.git-revision
+      rm -rf $out/.git
+    '';
+  };
+
+  # The git commit is read during the build and some tests depend on a git repo to be present
+  # https://github.com/actions/runner/blob/22d1938ac420a4cb9e3255e47a91c2e43c38db29/src/dir.proj#L5
+  unpackPhase = ''
+    cp -r $src $TMPDIR/src
+    chmod -R +w $TMPDIR/src
+    cd $TMPDIR/src
+    (
+      export PATH=${buildPackages.git}/bin:$PATH
+      git init
+      git config user.email "root@localhost"
+      git config user.name "root"
+      git add .
+      git commit -m "Initial commit"
+      git checkout -b v${version}
+    )
+    mkdir -p $TMPDIR/bin
+    cat > $TMPDIR/bin/git <<EOF
+    #!${runtimeShell}
+    if [ \$# -eq 1 ] && [ "\$1" = "rev-parse" ]; then
+      echo $(cat $TMPDIR/src/.git-revision)
+      exit 0
+    fi
+    exec ${buildPackages.git}/bin/git "\$@"
+    EOF
+    chmod +x $TMPDIR/bin/git
+    export PATH=$TMPDIR/bin:$PATH
+  '';
+
+  patches = [
+    # Replace some paths that originally point to Nix's read-only store
+    ./patches/host-context-dirs.patch
+    # Use GetDirectory() to obtain "diag" dir
+    ./patches/use-get-directory-for-diag.patch
+    # Don't try to install service
+    ./patches/dont-install-service.patch
+    # Access `.env` and `.path` relative to `$RUNNER_ROOT`, if set
+    ./patches/env-sh-use-runner-root.patch
+    # Fix FHS path: https://github.com/actions/runner/pull/2464
+    (fetchpatch {
+      name = "ln-fhs.patch";
+      url = "https://github.com/actions/runner/commit/5ff0ce1.patch";
+      hash = "sha256-2Vg3cKZK3cE/OcPDZkdN2Ro2WgvduYTTwvNGxwCfXas=";
+    })
+  ];
+
+  postPatch = ''
+    # Ignore changes to src/Runner.Sdk/BuildConstants.cs
+    substituteInPlace src/dir.proj \
+      --replace 'git update-index --assume-unchanged ./Runner.Sdk/BuildConstants.cs' \
+                'true'
+  '';
+
+  DOTNET_SYSTEM_GLOBALIZATION_INVARIANT = isNull glibcLocales;
+  LOCALE_ARCHIVE = lib.optionalString (!DOTNET_SYSTEM_GLOBALIZATION_INVARIANT) "${glibcLocales}/lib/locale/locale-archive";
+
+  postConfigure = ''
+    # Generate src/Runner.Sdk/BuildConstants.cs
+    dotnet msbuild \
+      -t:GenerateConstant \
+      -p:ContinuousIntegrationBuild=true \
+      -p:Deterministic=true \
+      -p:PackageRuntime="${dotnetCorePackages.systemToDotnetRid stdenv.hostPlatform.system}" \
+      -p:RunnerVersion="${version}" \
+      src/dir.proj
+  '';
+
+  nativeBuildInputs = [
+    which
+    git
+  ] ++ lib.optionals stdenv.isLinux [
+    autoPatchelfHook
+  ] ++ lib.optionals (stdenv.isDarwin && stdenv.isAarch64) [
+    autoSignDarwinBinariesHook
+  ];
+
+  buildInputs = [ stdenv.cc.cc.lib ];
+
+  dotnet-sdk = dotnetCorePackages.sdk_6_0;
+  dotnet-runtime = dotnetCorePackages.runtime_6_0;
+
+  dotnetFlags = [ "-p:PackageRuntime=${dotnetCorePackages.systemToDotnetRid stdenv.hostPlatform.system}" ];
+
+  # As given here: https://github.com/actions/runner/blob/0befa62/src/dir.proj#L33-L41
+  projectFile = [
+    "src/Sdk/Sdk.csproj"
+    "src/Runner.Common/Runner.Common.csproj"
+    "src/Runner.Listener/Runner.Listener.csproj"
+    "src/Runner.Worker/Runner.Worker.csproj"
+    "src/Runner.PluginHost/Runner.PluginHost.csproj"
+    "src/Runner.Sdk/Runner.Sdk.csproj"
+    "src/Runner.Plugins/Runner.Plugins.csproj"
+  ];
+  nugetDeps = ./deps.nix;
+
+  doCheck = true;
+
+  __darwinAllowLocalNetworking = true;
+
+  # Fully qualified name of disabled tests
+  disabledTests =
+    [
+      "GitHub.Runner.Common.Tests.Listener.SelfUpdaterL0.TestSelfUpdateAsync"
+      "GitHub.Runner.Common.Tests.ProcessInvokerL0.OomScoreAdjIsInherited"
+    ]
+    ++ map (x: "GitHub.Runner.Common.Tests.Listener.SelfUpdaterL0.TestSelfUpdateAsync_${x}") [
+      "Cancel_CloneHashTask_WhenNotNeeded"
+      "CloneHash_RuntimeAndExternals"
+      "DownloadRetry"
+      "FallbackToFullPackage"
+      "NoUpdateOnOldVersion"
+      "NotUseExternalsRuntimeTrimmedPackageOnHashMismatch"
+      "UseExternalsRuntimeTrimmedPackage"
+      "UseExternalsTrimmedPackage"
+      "ValidateHash"
+    ]
+    ++ map (x: "GitHub.Runner.Common.Tests.Worker.ActionManagerL0.PrepareActions_${x}") [
+      "CompositeActionWithActionfile_CompositeContainerNested"
+      "CompositeActionWithActionfile_CompositePrestepNested"
+      "CompositeActionWithActionfile_MaxLimit"
+      "CompositeActionWithActionfile_Node"
+      "DownloadActionFromGraph"
+      "NotPullOrBuildImagesMultipleTimes"
+      "RepositoryActionWithActionYamlFile_DockerHubImage"
+      "RepositoryActionWithActionfileAndDockerfile"
+      "RepositoryActionWithActionfile_DockerHubImage"
+      "RepositoryActionWithActionfile_Dockerfile"
+      "RepositoryActionWithActionfile_DockerfileRelativePath"
+      "RepositoryActionWithActionfile_Node"
+      "RepositoryActionWithDockerfile"
+      "RepositoryActionWithDockerfileInRelativePath"
+      "RepositoryActionWithDockerfilePrepareActions_Repository"
+      "RepositoryActionWithInvalidWrapperActionfile_Node"
+      "RepositoryActionWithWrapperActionfile_PreSteps"
+    ]
+    ++ map (x: "GitHub.Runner.Common.Tests.DotnetsdkDownloadScriptL0.${x}") [
+      "EnsureDotnetsdkBashDownloadScriptUpToDate"
+      "EnsureDotnetsdkPowershellDownloadScriptUpToDate"
+    ]
+    ++ [ "GitHub.Runner.Common.Tests.Listener.RunnerL0.TestRunOnceHandleUpdateMessage" ]
+    # Tests for trimmed runner packages which aim at reducing the update size. Not relevant for Nix.
+    ++ map (x: "GitHub.Runner.Common.Tests.PackagesTrimL0.${x}") [
+      "RunnerLayoutParts_CheckExternalsHash"
+      "RunnerLayoutParts_CheckDotnetRuntimeHash"
+    ]
+    ++ lib.optionals (stdenv.hostPlatform.system == "aarch64-linux") [
+      # "JavaScript Actions in Alpine containers are only supported on x64 Linux runners. Detected Linux Arm64"
+      "GitHub.Runner.Common.Tests.Worker.StepHostL0.DetermineNodeRuntimeVersionInAlpineContainerAsync"
+      "GitHub.Runner.Common.Tests.Worker.StepHostL0.DetermineNode20RuntimeVersionInAlpineContainerAsync"
+    ]
+    ++ lib.optionals DOTNET_SYSTEM_GLOBALIZATION_INVARIANT [
+      "GitHub.Runner.Common.Tests.ProcessExtensionL0.SuccessReadProcessEnv"
+      "GitHub.Runner.Common.Tests.Util.StringUtilL0.FormatUsesInvariantCulture"
+      "GitHub.Runner.Common.Tests.Worker.VariablesL0.Constructor_SetsOrdinalIgnoreCaseComparer"
+      "GitHub.Runner.Common.Tests.Worker.WorkerL0.DispatchCancellation"
+      "GitHub.Runner.Common.Tests.Worker.WorkerL0.DispatchRunNewJob"
+    ]
+    ++ lib.optionals (!lib.elem "node16" nodeRuntimes) [
+      "GitHub.Runner.Common.Tests.ProcessExtensionL0.SuccessReadProcessEnv"
+    ];
+
+  testProjectFile = [ "src/Test/Test.csproj" ];
+
+  preCheck = ''
+    mkdir -p _layout/externals
+  '' + lib.optionalString (lib.elem "node16" nodeRuntimes) ''
+    ln -s ${nodejs_16} _layout/externals/node16
+  '' + lib.optionalString (lib.elem "node20" nodeRuntimes) ''
+    ln -s ${nodejs_20} _layout/externals/node20
+  '';
+
+  postInstall = ''
+    mkdir -p $out/bin
+
+    install -m755 src/Misc/layoutbin/runsvc.sh                 $out/lib/github-runner
+    install -m755 src/Misc/layoutbin/RunnerService.js          $out/lib/github-runner
+    install -m755 src/Misc/layoutroot/run.sh                   $out/lib/github-runner
+    install -m755 src/Misc/layoutroot/run-helper.sh.template   $out/lib/github-runner/run-helper.sh
+    install -m755 src/Misc/layoutroot/config.sh                $out/lib/github-runner
+    install -m755 src/Misc/layoutroot/env.sh                   $out/lib/github-runner
+
+    # env.sh is patched to not require any wrapping
+    ln -sr "$out/lib/github-runner/env.sh" "$out/bin/"
+
+    substituteInPlace $out/lib/github-runner/config.sh \
+      --replace './bin/Runner.Listener' "$out/bin/Runner.Listener"
+  '' + lib.optionalString stdenv.isLinux ''
+    substituteInPlace $out/lib/github-runner/config.sh \
+      --replace 'command -v ldd' 'command -v ${glibc.bin}/bin/ldd' \
+      --replace 'ldd ./bin' '${glibc.bin}/bin/ldd ${dotnet-runtime}/shared/Microsoft.NETCore.App/${dotnet-runtime.version}/' \
+      --replace '/sbin/ldconfig' '${glibc.bin}/bin/ldconfig'
+  '' + ''
+    # Remove uneeded copy for run-helper template
+    substituteInPlace $out/lib/github-runner/run.sh --replace 'cp -f "$DIR"/run-helper.sh.template "$DIR"/run-helper.sh' ' '
+    substituteInPlace $out/lib/github-runner/run-helper.sh --replace '"$DIR"/bin/' '"$DIR"/'
+
+    # Make paths absolute
+    substituteInPlace $out/lib/github-runner/runsvc.sh \
+      --replace './externals' "$out/lib/externals" \
+      --replace './bin/RunnerService.js' "$out/lib/github-runner/RunnerService.js"
+
+    # The upstream package includes Node and expects it at the path
+    # externals/node$version. As opposed to the official releases, we don't
+    # link the Alpine Node flavors.
+    mkdir -p $out/lib/externals
+  '' + lib.optionalString (lib.elem "node16" nodeRuntimes) ''
+    ln -s ${nodejs_16} $out/lib/externals/node16
+  '' + lib.optionalString (lib.elem "node20" nodeRuntimes) ''
+    ln -s ${nodejs_20} $out/lib/externals/node20
+  '' + ''
+    # Install Nodejs scripts called from workflows
+    install -D src/Misc/layoutbin/hashFiles/index.js $out/lib/github-runner/hashFiles/index.js
+    mkdir -p $out/lib/github-runner/checkScripts
+    install src/Misc/layoutbin/checkScripts/* $out/lib/github-runner/checkScripts/
+  '' + lib.optionalString stdenv.isLinux ''
+    # Wrap explicitly to, e.g., prevent extra entries for LD_LIBRARY_PATH
+    makeWrapperArgs=()
+
+    # We don't wrap with libicu
+    substituteInPlace $out/lib/github-runner/config.sh \
+      --replace '$LDCONFIG_COMMAND -NXv ''${libpath//:/ }' 'echo libicu'
+  '' + ''
+    # XXX: Using the corresponding Nix argument does not work as expected:
+    #      https://github.com/NixOS/nixpkgs/issues/218449
+    # Common wrapper args for `executables`
+    makeWrapperArgs+=(
+      --run 'export RUNNER_ROOT="''${RUNNER_ROOT:-"$HOME/.github-runner"}"'
+      --run 'mkdir -p "$RUNNER_ROOT"'
+      --chdir "$out"
+    )
+  '';
+
+  # List of files to wrap
+  executables = [
+    "config.sh"
+    "Runner.Listener"
+    "Runner.PluginHost"
+    "Runner.Worker"
+    "run.sh"
+    "runsvc.sh"
+  ];
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    export RUNNER_ROOT="$TMPDIR"
+
+    $out/bin/config.sh --help >/dev/null
+    $out/bin/Runner.Listener --help >/dev/null
+
+    version=$($out/bin/Runner.Listener --version)
+    if [[ "$version" != "${version}" ]]; then
+      printf 'Unexpected version %s' "$version"
+      exit 1
+    fi
+
+    commit=$($out/bin/Runner.Listener --commit)
+    if [[ "$commit" != "$(git rev-parse HEAD)" ]]; then
+      printf 'Unexpected commit %s' "$commit"
+      exit 1
+    fi
+
+    runHook postInstallCheck
+  '';
+
+  passthru = {
+    tests.smoke-test = nixosTests.github-runner;
+    updateScript = ./update.sh;
+  };
+
+  meta = with lib; {
+    changelog = "https://github.com/actions/runner/releases/tag/v${version}";
+    description = "Self-hosted runner for GitHub Actions";
+    homepage = "https://github.com/actions/runner";
+    license = licenses.mit;
+    maintainers = with maintainers; [ veehaitch newam kfollesdal aanderse zimbatm ];
+    platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/deps.nix b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/deps.nix
new file mode 100644
index 000000000000..caa00cad9af2
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/deps.nix
@@ -0,0 +1,256 @@
+# This file was automatically generated by passthru.fetch-deps.
+# Please dont edit it manually, your changes might get overwritten!
+
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "Castle.Core"; version = "4.4.0"; sha256 = "0rpcbmyhckvlvp6vbzpj03c1gqz56ixc6f15vgmxmyf1g40c24pf"; })
+  (fetchNuGet { pname = "Microsoft.AspNet.WebApi.Client"; version = "5.2.4"; sha256 = "00fkczf69z2rwarcd8kjjdp47517a0ca6lggn72qbilsp03a5scj"; })
+  (fetchNuGet { pname = "Microsoft.CodeCoverage"; version = "17.2.0"; sha256 = "018yl113i037m5qhm3z6csb0c4l8kj412dxw2dagdbj07qbxwikj"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.0.1"; sha256 = "0zxc0apx1gcx361jlq8smc9pfdgmyjh6hpka8dypc9w23nlsh6yj"; })
+  (fetchNuGet { pname = "Microsoft.IdentityModel.Logging"; version = "5.2.1"; sha256 = "1gpka9jm2gl6f07pcwzwvaxw9xq1a19i9fskn0qs921c5grhlp3g"; })
+  (fetchNuGet { pname = "Microsoft.IdentityModel.Tokens"; version = "5.2.1"; sha256 = "03v6145vr1winq8xxfikydicds4f10qmy1ybyz2gfimnzzx51w00"; })
+  (fetchNuGet { pname = "Microsoft.NET.Test.Sdk"; version = "17.2.0"; sha256 = "0ncnq378pk1immy2dyf75xjf2xn72r4m5gma1njhc4rvhzx9qz11"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.0.1"; sha256 = "01al6cfxp68dscl15z7rxfw9zvhm64dncsw09a1vmdkacsa2v6lr"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.0.1-rc2-24027"; sha256 = "1a0w5fv8slfr4q7m3mh78lb9awdwyz4zv3bb73vybkyq1f6z7lx8"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "2.0.0"; sha256 = "1fk2fk2639i7nzy58m9dvpdnzql4vb8yl8vr19r2fp8lmj9w2jr0"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Runtime"; version = "1.0.2-rc2-24027"; sha256 = "0ippdn16381l8i2iy63i45nk0p303fjbd4amh7biwvqxgagfbvhh"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Runtime.CoreCLR"; version = "1.0.2-rc2-24027"; sha256 = "05y0jz6vfl9zs0lmmwsz6arf7r0mg2dm93ymizrzmqn706krz45x"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Runtime.Native"; version = "1.0.2-rc2-24027"; sha256 = "11hpbbmnjbskw7s6sx32l6qzz63kshx0gyp3sawyxk82nbqrissl"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.0.1"; sha256 = "0ppdkwy6s9p7x9jix3v4402wb171cdiibq7js7i13nxpdky7074p"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.0.1-rc2-24027"; sha256 = "1j1458jska7540ng7fdf5i06k2vy71mxl5dld4x5s8gfndxpdzdj"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Windows.ApiSets"; version = "1.0.1-rc2-24027"; sha256 = "034m9p417iq3yzipg393wp4bddsh80di9iad78vvvh7w5difdv0x"; })
+  (fetchNuGet { pname = "Microsoft.TestPlatform.ObjectModel"; version = "17.2.0"; sha256 = "0l05smcgjzdfa5f60f9q5lylap3i21aswxbava92s19bgv46w2rv"; })
+  (fetchNuGet { pname = "Microsoft.TestPlatform.TestHost"; version = "17.2.0"; sha256 = "1238hx3hdg22s123cxygdfm89h54abw1jv6az6hl8h76ip39ybdp"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Primitives"; version = "4.0.1-rc2-24027"; sha256 = "1rvb076s4ksvmbvnxi4sv2f9f22izqp2rca0scjqya5x1qhcgkp0"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0j0c1wj4ndj21zsgivsc24whiya605603kxrbiw6wkfdync464wq"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "4.4.0"; sha256 = "088j2anh1rnkxdcycw5kgp97ahk7cj741y6kask84880835arsb6"; })
+  (fetchNuGet { pname = "Minimatch"; version = "2.0.0"; sha256 = "1k84q1bz1qq2nh35nip8vmi65wixsh5y7piln5b4n172xzhfqvx0"; })
+  (fetchNuGet { pname = "Moq"; version = "4.11.0"; sha256 = "08bnk80scjjqnkdbjam8grcqrw2rvj9z7556hiznac7in3fcp77w"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "1.5.0-rc2-24027"; sha256 = "1kazwidj63w53r1s6fd8sgykb70kdic27fg9qhg74qzwm354imwm"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "1.6.1"; sha256 = "1z70wvsx2d847a2cjfii7b83pjfs34q05gb037fdjikv5kbagml8"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "13.0.1"; sha256 = "0fijg0w6iwap8gvzyjnndds0q4b8anwxxvik7y8vgq97dram4srb"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "9.0.1"; sha256 = "0mcy0i7pnfpqm4pcaiyzzji4g0c8i3a5gjz28rrr28110np8304r"; })
+  (fetchNuGet { pname = "Newtonsoft.Json.Bson"; version = "1.0.1"; sha256 = "1r1hvj5gjl466bya2bfl5aaj8rbwyf5x1msg710wf3k2llbci1xa"; })
+  (fetchNuGet { pname = "NuGet.Frameworks"; version = "5.11.0"; sha256 = "0wv26gq39hfqw9md32amr5771s73f5zn1z9vs4y77cgynxr73s4z"; })
+  (fetchNuGet { pname = "runtime.any.System.Collections"; version = "4.3.0"; sha256 = "0bv5qgm6vr47ynxqbnkc7i797fdi8gbjjxii173syrx14nmrkwg0"; })
+  (fetchNuGet { pname = "runtime.any.System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "1wl76vk12zhdh66vmagni66h5xbhgqq7zkdpgw21jhxhvlbcl8pk"; })
+  (fetchNuGet { pname = "runtime.any.System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "00j6nv2xgmd3bi347k00m7wr542wjlig53rmj28pmw7ddcn97jbn"; })
+  (fetchNuGet { pname = "runtime.any.System.Globalization"; version = "4.3.0"; sha256 = "1daqf33hssad94lamzg01y49xwndy2q97i2lrb7mgn28656qia1x"; })
+  (fetchNuGet { pname = "runtime.any.System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1ghhhk5psqxcg6w88sxkqrc35bxcz27zbqm2y5p5298pv3v7g201"; })
+  (fetchNuGet { pname = "runtime.any.System.IO"; version = "4.3.0"; sha256 = "0l8xz8zn46w4d10bcn3l4yyn4vhb3lrj2zw8llvz7jk14k4zps5x"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection"; version = "4.3.0"; sha256 = "02c9h3y35pylc0zfq3wcsvc5nqci95nrkq0mszifc0sjx7xrzkly"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection.Extensions"; version = "4.3.0"; sha256 = "0zyri97dfc5vyaz9ba65hjj1zbcrzaffhsdlpxc9bh09wy22fq33"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection.Primitives"; version = "4.3.0"; sha256 = "0x1mm8c6iy8rlxm8w9vqw7gb7s1ljadrn049fmf70cyh42vdfhrf"; })
+  (fetchNuGet { pname = "runtime.any.System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "03kickal0iiby82wa5flar18kyv82s9s6d4xhk5h4bi5kfcyfjzl"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime"; version = "4.3.0"; sha256 = "1cqh1sv3h5j7ixyb7axxbdkqx6cxy00p4np4j91kpm492rf4s25b"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.Handles"; version = "4.3.0"; sha256 = "0bh5bi25nk9w9xi8z23ws45q5yia6k7dg3i4axhfqlnj145l011x"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "0c3g3g3jmhlhw4klrc86ka9fjbl7i59ds1fadsb2l8nqf8z3kb19"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding"; version = "4.3.0"; sha256 = "0aqqi1v4wx51h51mk956y783wzags13wa7mgqyclacmsmpv02ps3"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "0lqhgqi0i8194ryqq6v2gqx0fb86db2gqknbm0aq31wb378j7ip8"; })
+  (fetchNuGet { pname = "runtime.any.System.Threading.Tasks"; version = "4.3.0"; sha256 = "03mnvkhskbzxddz4hm113zsch1jyzh2cs450dk3rgfjp8crlw1va"; })
+  (fetchNuGet { pname = "runtime.any.System.Threading.Timer"; version = "4.3.0"; sha256 = "0aw4phrhwqz9m61r79vyfl5la64bjxj8l34qnrcwb28v49fg2086"; })
+  (fetchNuGet { pname = "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "16rnxzpk5dpbbl1x354yrlsbvwylrq456xzpsha1n9y3glnhyx9d"; })
+  (fetchNuGet { pname = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0hkg03sgm2wyq8nqk6dbm9jh5vcq57ry42lkqdmfklrw89lsmr59"; })
+  (fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0c2p354hjx58xhhz7wv6div8xpi90sc6ibdm40qin21bvi7ymcaa"; })
+  (fetchNuGet { pname = "runtime.native.System"; version = "4.0.0-rc2-24027"; sha256 = "0n3ndk1g5qdd892sjcz3y2qmg8ki8b001qfgl2fkwv5f52m65pz9"; })
+  (fetchNuGet { pname = "runtime.native.System"; version = "4.3.0"; sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4"; })
+  (fetchNuGet { pname = "runtime.native.System.IO.Compression"; version = "4.1.0-rc2-24027"; sha256 = "1qnd05bsrz88cr4wnkq7haf2bwml2zzjcscjk94v8ka4isi1i89b"; })
+  (fetchNuGet { pname = "runtime.native.System.IO.Compression"; version = "4.3.0"; sha256 = "1vvivbqsk6y4hzcid27pqpm5bsi6sc50hvqwbcx8aap5ifrxfs8d"; })
+  (fetchNuGet { pname = "runtime.native.System.Net.Http"; version = "4.0.1-rc2-24027"; sha256 = "0dpgj544rfdqlgjc1nwslwbq49mp286wyy6rfnklxlbfgc2mr216"; })
+  (fetchNuGet { pname = "runtime.native.System.Net.Http"; version = "4.3.0"; sha256 = "1n6rgz5132lcibbch1qlf0g9jk60r0kqv087hxc0lisy50zpm7kk"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography"; version = "4.0.0-rc2-24027"; sha256 = "0pkd72vrqn1jxc20g8h2pgqz02xn2rfbl0m4i7b82xa8bc483jmz"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "1b61p6gw1m02cc1ry996fl49liiwky6181dzr873g9ds92zl326q"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "18pzfdlwsg2nb1jjjjzyb5qlgy6xjxzmhnfaijq5s2jw3cm3ab97"; })
+  (fetchNuGet { pname = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0qyynf9nz5i7pc26cwhgi8j62ps27sqmf78ijcfgzab50z9g8ay3"; })
+  (fetchNuGet { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1klrs545awhayryma6l7g2pvnp9xy4z0r1i40r80zb45q3i9nbyf"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "10yc8jdrwgcl44b4g93f1ds76b176bajd3zqi2faf5rvh1vy9smi"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0zcxjv5pckplvkg0r6mw3asggm7aqzbdjimhvsasb0cgm59x09l3"; })
+  (fetchNuGet { pname = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0vhynn79ih7hw7cwjazn87rm9z9fj0rvxgzlab36jybgcpcgphsn"; })
+  (fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "160p68l2c7cqmyqjwxydcvgw7lvl1cr0znkw8fp24d1by9mqc8p3"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "15zrc8fgd8zx28hdghcj5f5i34wf3l6bq5177075m2bc2j34jrqy"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1p4dgxax6p7rlgj4q73k73rslcnz4wdcv8q2flg1s8ygwcm58ld5"; })
+  (fetchNuGet { pname = "runtime.unix.Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0y61k9zbxhdi0glg154v30kkq7f8646nif8lnnxbvkjpakggd5id"; })
+  (fetchNuGet { pname = "runtime.unix.System.Console"; version = "4.3.0"; sha256 = "1pfpkvc6x2if8zbdzg9rnc5fx51yllprl8zkm5npni2k50lisy80"; })
+  (fetchNuGet { pname = "runtime.unix.System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "1lps7fbnw34bnh3lm31gs5c0g0dh7548wfmb8zz62v0zqz71msj5"; })
+  (fetchNuGet { pname = "runtime.unix.System.IO.FileSystem"; version = "4.3.0"; sha256 = "14nbkhvs7sji5r1saj2x8daz82rnf9kx28d3v2qss34qbr32dzix"; })
+  (fetchNuGet { pname = "runtime.unix.System.Net.Primitives"; version = "4.3.0"; sha256 = "0bdnglg59pzx9394sy4ic66kmxhqp8q8bvmykdxcbs5mm0ipwwm4"; })
+  (fetchNuGet { pname = "runtime.unix.System.Net.Sockets"; version = "4.3.0"; sha256 = "03npdxzy8gfv035bv1b9rz7c7hv0rxl5904wjz51if491mw0xy12"; })
+  (fetchNuGet { pname = "runtime.unix.System.Private.Uri"; version = "4.3.0"; sha256 = "1jx02q6kiwlvfksq1q9qr17fj78y5v6mwsszav4qcz9z25d5g6vk"; })
+  (fetchNuGet { pname = "runtime.unix.System.Runtime.Extensions"; version = "4.3.0"; sha256 = "0pnxxmm8whx38dp6yvwgmh22smknxmqs5n513fc7m4wxvs1bvi4p"; })
+  (fetchNuGet { pname = "System.AppContext"; version = "4.1.0-rc2-24027"; sha256 = "0c0x3sg12a5zwiamvxs9c4bhdwmmm9by6x5da58fbrzz7afbaaag"; })
+  (fetchNuGet { pname = "System.AppContext"; version = "4.3.0"; sha256 = "1649qvy3dar900z3g817h17nl8jp4ka5vcfmsr05kh0fshn7j3ya"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.0.0-rc2-24027"; sha256 = "1mqnay87pkxih73984jf5fm14d0m6yjq4cv4cqbj37nmgm54ssjp"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.3.0"; sha256 = "0fgns20ispwrfqll4q1zc1waqcmylb3zc50ys9x8zlwxh9pmd9jy"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.0.11"; sha256 = "1ga40f5lrwldiyw6vy67d0sg7jd7ww6kgwbksm19wrvq9hr0bsm6"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.0.11-rc2-24027"; sha256 = "0ijpgf7iy3mcvr9327craxsb0lsznprajqzjy59sspc75gk0yahq"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; })
+  (fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.0.12-rc2-24027"; sha256 = "0yhc5q74vb9vb9cmyrr9p4dfql62dr7c8ajbaxnzzs917v2z68q4"; })
+  (fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.3.0"; sha256 = "0wi10md9aq33jrkh2c24wr2n9hrpyamsdhsxdcnf43b7y86kkii8"; })
+  (fetchNuGet { pname = "System.Collections.NonGeneric"; version = "4.3.0"; sha256 = "07q3k0hf3mrcjzwj8fwk6gv3n51cb513w4mgkfxzm3i37sc9kz7k"; })
+  (fetchNuGet { pname = "System.Collections.Specialized"; version = "4.3.0"; sha256 = "1sdwkma4f6j85m3dpb53v9vcgd0zyc9jb33f8g63byvijcj39n20"; })
+  (fetchNuGet { pname = "System.ComponentModel"; version = "4.3.0"; sha256 = "0986b10ww3nshy30x9sjyzm0jx339dkjxjj3401r3q0f6fx2wkcb"; })
+  (fetchNuGet { pname = "System.ComponentModel.Primitives"; version = "4.3.0"; sha256 = "1svfmcmgs0w0z9xdw2f2ps05rdxmkxxhf0l17xk9l1l8xfahkqr0"; })
+  (fetchNuGet { pname = "System.ComponentModel.TypeConverter"; version = "4.3.0"; sha256 = "17ng0p7v3nbrg3kycz10aqrrlw4lz9hzhws09pfh8gkwicyy481x"; })
+  (fetchNuGet { pname = "System.Console"; version = "4.0.0-rc2-24027"; sha256 = "072m313av0s5cfpr2rpq07p7c13dy4rh1ngigv3dnr1yyvab9081"; })
+  (fetchNuGet { pname = "System.Console"; version = "4.3.0"; sha256 = "1flr7a9x920mr5cjsqmsy9wgnv3lvd0h1g521pdr1lkb2qycy7ay"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.0.11"; sha256 = "0gmjghrqmlgzxivd2xl50ncbglb7ljzb66rlx8ws6dv8jm0d5siz"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.0.11-rc2-24027"; sha256 = "11rz0kdzk4bw9yc85jmskxla7i1bs61kladqzvymrg8xn3lk488a"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "4.0.0-rc2-24027"; sha256 = "1cizj1xvaz7dm701r4bl6s08858j1r2794y7xx8abyw8j91c957w"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "4.3.0"; sha256 = "0z6m3pbiy0qw6rn3n209rrzf9x1k4002zh90vwcrsym09ipm2liq"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.0.1"; sha256 = "19cknvg07yhakcvpxg3cxa0bwadplin6kyxd8mpjjpwnp56nl85x"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.0.1-rc2-24027"; sha256 = "080gd86c1pkfkzz67ispkzxc426lfh82zajayiizbgwd6yqa7fv5"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "0in3pic3s2ddyibi8cvgl102zmvp9r9mchh82ns9f0ms4basylw1"; })
+  (fetchNuGet { pname = "System.Diagnostics.TraceSource"; version = "4.3.0"; sha256 = "1kyw4d7dpjczhw6634nrmg7yyyzq72k75x38y0l0nwhigdlp1766"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.1.0-rc2-24027"; sha256 = "0a0c24lm8yn0hbvd5m64lv7xhs2bmhm5fdpk89xvxj14zdarqhm6"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4"; })
+  (fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.0.11"; sha256 = "1pla2dx8gkidf7xkciig6nifdsb494axjvzvann8g2lp3dbqasm9"; })
+  (fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.3.0"; sha256 = "1d951hrvrpndk7insiag80qxjbf2y0y39y8h5hnq9612ws661glk"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.0.11"; sha256 = "070c5jbas2v7smm660zaf1gh0489xanjqymkvafcs4f8cdrs1d5d"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.0.11-rc2-24027"; sha256 = "0yl161lr85smzdfzb7fbk0lfrqk5ns71hcnws6vm3sn2aqvfmhpn"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; })
+  (fetchNuGet { pname = "System.Globalization.Calendars"; version = "4.0.1-rc2-24027"; sha256 = "0whr2qird567iyc137s10qs0xi6607kjii9wi8a8g1f9lybzlz5k"; })
+  (fetchNuGet { pname = "System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1xwl230bkakzzkrggy1l1lxmm3xlhk4bq2pkv790j5lm8g887lxq"; })
+  (fetchNuGet { pname = "System.Globalization.Extensions"; version = "4.3.0"; sha256 = "02a5zfxavhv3jd437bsncbhd2fp1zv4gxzakp1an9l6kdq1mcqls"; })
+  (fetchNuGet { pname = "System.IdentityModel.Tokens.Jwt"; version = "5.2.1"; sha256 = "08n1z9ngsi26qlhwpjzxafhwl3p279widfci64l2ahxf1gprfqsx"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.1.0"; sha256 = "1g0yb8p11vfd0kbkyzlfsbsp5z44lwsvyc0h3dpw6vqnbi035ajp"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.1.0-rc2-24027"; sha256 = "0rwqmn743gl21xnb3rwqkdacshd5l86pn23mc4bviva3pbncbjs4"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; })
+  (fetchNuGet { pname = "System.IO.Compression"; version = "4.1.0-rc2-24027"; sha256 = "07s5zxdw3ihxdv0mjxb2ywzg9phcp4bayrhkadzm95l4kcv0xaij"; })
+  (fetchNuGet { pname = "System.IO.Compression"; version = "4.3.0"; sha256 = "084zc82yi6yllgda0zkgl2ys48sypiswbiwrv7irb3r0ai1fp4vz"; })
+  (fetchNuGet { pname = "System.IO.Compression.ZipFile"; version = "4.0.1-rc2-24027"; sha256 = "0np6vf9rnfasz0sqys56kpryc84qcqi1a1rfskmycdlxk182p3s2"; })
+  (fetchNuGet { pname = "System.IO.Compression.ZipFile"; version = "4.3.0"; sha256 = "1yxy5pq4dnsm9hlkg9ysh5f6bf3fahqqb6p8668ndy5c0lk7w2ar"; })
+  (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.0.1"; sha256 = "0kgfpw6w4djqra3w5crrg8xivbanh1w9dh3qapb28q060wb9flp1"; })
+  (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.0.1-rc2-24027"; sha256 = "0hpw3ssnbcv9l1lnlcym2bv3h3sf2znif4brys2i3868s6h946k6"; })
+  (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.3.0"; sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.AccessControl"; version = "4.4.0"; sha256 = "11sna2bv5ai4sivrs7g2gp7g0yjp02s0kasl01j3fa1cvnwwvgkv"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.0.1"; sha256 = "1s0mniajj3lvbyf7vfb5shp4ink5yibsx945k6lvxa96r8la1612"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.0.1-rc2-24027"; sha256 = "04q3sxrfxqgig9scmxblxlb6n6fypv535lby26pi20ixszs19dxc"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.3.0"; sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Watcher"; version = "4.0.0-rc2-24027"; sha256 = "0g2h4q0w42frdz101z2cxs4n9zpxvzb43wnzawx1f26vpilz7km4"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.1.0"; sha256 = "1ppg83svb39hj4hpp5k7kcryzrf3sfnm08vxd5sm2drrijsla2k5"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.1.0-rc2-24027"; sha256 = "0icbsy0vq07achclz32jvnnfdchkgylsjj67gra3fn5906s40n24"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.3.0"; sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7"; })
+  (fetchNuGet { pname = "System.Linq.Expressions"; version = "4.1.0"; sha256 = "1gpdxl6ip06cnab7n3zlcg6mqp7kknf73s8wjinzi4p0apw82fpg"; })
+  (fetchNuGet { pname = "System.Linq.Expressions"; version = "4.3.0"; sha256 = "0ky2nrcvh70rqq88m9a5yqabsl4fyd17bpr63iy2mbivjs2nyypv"; })
+  (fetchNuGet { pname = "System.Net.Http"; version = "4.0.1-rc2-24027"; sha256 = "1j9z5as3k7ydr4yi83lwh09hqj32g2ndpjgj25xvny5a32dl2mhz"; })
+  (fetchNuGet { pname = "System.Net.Http"; version = "4.3.0"; sha256 = "1i4gc757xqrzflbk7kc5ksn20kwwfjhw9w7pgdkn19y3cgnl302j"; })
+  (fetchNuGet { pname = "System.Net.NameResolution"; version = "4.3.0"; sha256 = "15r75pwc0rm3vvwsn8rvm2krf929mjfwliv0mpicjnii24470rkq"; })
+  (fetchNuGet { pname = "System.Net.Primitives"; version = "4.0.11-rc2-24027"; sha256 = "16wv24cb39639i7fcw005hh1rggyz2bgn51dpkdc67aq9lz76ivm"; })
+  (fetchNuGet { pname = "System.Net.Primitives"; version = "4.3.0"; sha256 = "0c87k50rmdgmxx7df2khd9qj7q35j9rzdmm2572cc55dygmdk3ii"; })
+  (fetchNuGet { pname = "System.Net.Sockets"; version = "4.1.0-rc2-24027"; sha256 = "062kbbvm17nhwmcxjnakfv3i23vrk6c9gmz6x8q79kcr5hxr40qs"; })
+  (fetchNuGet { pname = "System.Net.Sockets"; version = "4.3.0"; sha256 = "1ssa65k6chcgi6mfmzrznvqaxk8jp0gvl77xhf1hbzakjnpxspla"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.0.12"; sha256 = "1sybkfi60a4588xn34nd9a58png36i0xr4y4v4kqpg8wlvy5krrj"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.0.12-rc2-24027"; sha256 = "065p89awfiz9kb304hqs7wkfpykd9z9kkv84ihm813msv54i8lvj"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.3.0"; sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2"; })
+  (fetchNuGet { pname = "System.Private.DataContractSerialization"; version = "4.3.0"; sha256 = "06fjipqvjp559rrm825x6pll8gimdj9x1n3larigh5hsm584gndw"; })
+  (fetchNuGet { pname = "System.Private.Uri"; version = "4.3.0"; sha256 = "04r1lkdnsznin0fj4ya1zikxiqr0h6r6a1ww2dsm60gqhdrf0mvx"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.1.0"; sha256 = "1js89429pfw79mxvbzp8p3q93il6rdff332hddhzi5wqglc4gml9"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.1.0-rc2-24027"; sha256 = "0717y8iqcw19g2zkcs0hkalvjhnpaq5mapd82kxkhiq1djgjhhi2"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.3.0"; sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m"; })
+  (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.0.1"; sha256 = "0ydqcsvh6smi41gyaakglnv252625hf29f7kywy2c70nhii2ylqp"; })
+  (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.3.0"; sha256 = "11f8y3qfysfcrscjpjym9msk7lsfxkk4fmz9qq95kn3jd0769f74"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.0.1"; sha256 = "1pcd2ig6bg144y10w7yxgc9d22r7c7ww7qn1frdfwgxr24j9wvv0"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.3.0"; sha256 = "0w1n67glpv8241vnpz1kl14sy7zlnw414aqwj4hcx5nd86f6994q"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.0.1"; sha256 = "1s4b043zdbx9k39lfhvsk68msv1nxbidhkq6nbm27q7sf8xcsnxr"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.3.0"; sha256 = "0ql7lcakycrvzgi9kxz1b3lljd990az1x6c4jsiwcacrvimpib5c"; })
+  (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.0.1"; sha256 = "0m7wqwq0zqq9gbpiqvgk3sr92cbrw7cp3xn53xvw7zj6rz6fdirn"; })
+  (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.0.1-rc2-24027"; sha256 = "0lgz7wwdb02vapa17hgdkf1jnq1mcsbq8gwy6a9iqd04d2mfanv7"; })
+  (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.3.0"; sha256 = "02bly8bdc98gs22lqsfx9xicblszr2yan7v2mmw3g7hy6miq5hwq"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "1.6.0"; sha256 = "1wdbavrrkajy7qbdblpbpbalbdl48q3h34cchz24gvdgyrlf15r4"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.0.1"; sha256 = "1bangaabhsl4k9fg8khn83wm6yial8ik1sza7401621jc6jrym28"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.0.1-rc2-24027"; sha256 = "1xjbwji89s69f9lq8wcjfkz8y9ym9zffgj2mg9bv0rxwyqcynpz8"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.3.0"; sha256 = "0y2ssg08d817p0vdag98vn238gyrrynjdj4181hdg780sif3ykp1"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.4.0"; sha256 = "0n9r1w4lp2zmadyqkgp4sk9wy90sj4ygq4dh7kzamx26i9biys5h"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.0.1"; sha256 = "0b4i7mncaf8cnai85jv3wnw6hps140cxz8vylv2bik6wyzgvz7bi"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.0.1-rc2-24027"; sha256 = "06lkqk5hjkcna19inpda5fqbxvd9pq5cs61di7kmhrd2sgzbs6xj"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.1.0"; sha256 = "02hdkgk13rvsd6r9yafbwzss8kr55wnj8d5c7xjnp8gqrwc8sn0m"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.1.0-rc2-24027"; sha256 = "1g5ghiyfb8njzfz39cswizjbxgaamil7kgkzgab93fhgk7jksmyg"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.1.0"; sha256 = "0rw4rm4vsm3h3szxp9iijc3ksyviwsv6f63dng3vhqyg4vjdkc2z"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.1.0-rc2-24027"; sha256 = "09k4c6is31dpccwgb749055m2ad0b84rnapk69fmj3wjswacg26p"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.3.0"; sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.0.1"; sha256 = "1g0zrdi5508v49pfm3iii2hn6nm00bgvfpjq1zxknfjrxxa20r4g"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.0.1-rc2-24027"; sha256 = "0lw4amgaryahvija5xxb2vmybq7ks4b4ir7g7nc1xw6x9x58jf2q"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.1.0"; sha256 = "01kxqppx3dr3b6b286xafqilv4s2n0gqvfgzfd4z943ga9i81is1"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.1.0-rc2-24027"; sha256 = "0v5phdy7yr6d1q13fvb6hhd32k89l93z6x4hlkh5qhm1zlavaabl"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices.PInvoke"; version = "4.0.0-rc2-24027"; sha256 = "0qsgwvr6ppvllblb64p5plr7ssbmwfxxc4qf6l1xfincza8np34r"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices.RuntimeInformation"; version = "4.0.0-rc2-24027"; sha256 = "03pgqbgahfgvigyrsd08snzsryg90shfjlbdv4jk6yzfr27va3n2"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices.RuntimeInformation"; version = "4.3.0"; sha256 = "0q18r1sh4vn7bvqgd6dmqlw5v28flbpj349mkdish2vjyvmnb2ii"; })
+  (fetchNuGet { pname = "System.Runtime.Loader"; version = "4.3.0"; sha256 = "07fgipa93g1xxgf7193a6vw677mpzgr0z0cfswbvqqb364cva8dk"; })
+  (fetchNuGet { pname = "System.Runtime.Numerics"; version = "4.0.1-rc2-24027"; sha256 = "1gkkc7njymmb12dd952q89x2h2jdrhp171vszsjqzh5q2ryj25gh"; })
+  (fetchNuGet { pname = "System.Runtime.Numerics"; version = "4.3.0"; sha256 = "19rav39sr5dky7afygh309qamqqmi9kcwvz3i0c5700v0c5cg61z"; })
+  (fetchNuGet { pname = "System.Runtime.Serialization.Primitives"; version = "4.1.1"; sha256 = "042rfjixknlr6r10vx2pgf56yming8lkjikamg3g4v29ikk78h7k"; })
+  (fetchNuGet { pname = "System.Runtime.Serialization.Primitives"; version = "4.3.0"; sha256 = "01vv2p8h4hsz217xxs0rixvb7f2xzbh6wv1gzbfykcbfrza6dvnf"; })
+  (fetchNuGet { pname = "System.Runtime.Serialization.Xml"; version = "4.3.0"; sha256 = "1b2cxl2h7s8cydbhbmxhvvq071n9ck61g08npg4gyw7nvg37rfni"; })
+  (fetchNuGet { pname = "System.Security.AccessControl"; version = "4.4.0"; sha256 = "0ixqw47krkazsw0ycm22ivkv7dpg6cjz8z8g0ii44bsx4l8gcx17"; })
+  (fetchNuGet { pname = "System.Security.Claims"; version = "4.3.0"; sha256 = "0jvfn7j22l3mm28qjy3rcw287y9h65ha4m940waaxah07jnbzrhn"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Algorithms"; version = "4.1.0-rc2-24027"; sha256 = "183qanczf0jb6njgr9pibyr5jh0m8xwrja3j0pcdnzab0cii3n17"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Algorithms"; version = "4.3.0"; sha256 = "03sq183pfl5kp7gkvq77myv7kbpdnq3y0xj7vi4q1kaw54sny0ml"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "4.3.0"; sha256 = "1k468aswafdgf56ab6yrn7649kfqx2wm9aslywjam1hdmk5yypmv"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "4.4.0"; sha256 = "1grg9id80m358crr5y4q4rhhbrm122yw8jrlcl1ybi7nkmmck40n"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Csp"; version = "4.0.0-rc2-24027"; sha256 = "0nny9yvnhf3l5hjsy3ina8cha6sjln993vzkzdqka9d7rq1z23d5"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Csp"; version = "4.3.0"; sha256 = "1x5wcrddf2s3hb8j78cry7yalca4lb5vfnkrysagbn6r9x6xvrx1"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Encoding"; version = "4.0.0-rc2-24027"; sha256 = "19f83159vrfnfppzchjclk82w2x1mkvnx1y5yg1f238dpjb2ri8w"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Encoding"; version = "4.3.0"; sha256 = "1jr6w70igqn07k5zs1ph6xja97hxnb3mqbspdrff6cvssgrixs32"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.OpenSsl"; version = "4.0.0-rc2-24027"; sha256 = "1mqw7xkh4pj110f249c4jpv9mg1sd8c2cr6kj2zc0mic325vvg0s"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0givpvvj8yc7gv4lhb6s1prq6p2c4147204a0wib89inqzd87gqc"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Pkcs"; version = "4.4.0"; sha256 = "1bn7d2czpc994qzdph4drv7p1cv4x55j2dhbmr113p0gs4hx33zh"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Primitives"; version = "4.0.0-rc2-24027"; sha256 = "16zwyw3glsq2flq1crd0c24i336bc42rj28a9rjvvkg428vz4rf8"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Primitives"; version = "4.3.0"; sha256 = "0pyzncsv48zwly3lw4f2dayqswcfvdwq2nz0dgwmi7fj3pn64wby"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.ProtectedData"; version = "4.4.0"; sha256 = "1q8ljvqhasyynp94a1d7jknk946m20lkwy2c3wa8zw2pc517fbj6"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.X509Certificates"; version = "4.1.0-rc2-24027"; sha256 = "1gfxc9p73zak46klrfsyxgkcyzbvqnjarsm0wkvmj31n9g4dpjkz"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.X509Certificates"; version = "4.3.0"; sha256 = "0valjcz5wksbvijylxijjxb1mp38mdhv03r533vnx1q3ikzdav9h"; })
+  (fetchNuGet { pname = "System.Security.Principal"; version = "4.3.0"; sha256 = "12cm2zws06z4lfc4dn31iqv7072zyi4m910d4r6wm8yx85arsfxf"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.3.0"; sha256 = "00a0a7c40i3v4cb20s2cmh9csb5jv2l0frvnlzyfxh848xalpdwr"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.4.0"; sha256 = "11rr16fp68apc0arsymgj18w8ajs9a4366wgx9iqwny4glrl20wp"; })
+  (fetchNuGet { pname = "System.ServiceProcess.ServiceController"; version = "4.4.0"; sha256 = "0hyijvysbcjh20mbbgajg9wh04nkjd6y5lqxgm0a6m28zjcjshl6"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.0.11"; sha256 = "1dyqv0hijg265dwxg6l7aiv74102d6xjiwplh2ar1ly6xfaa4iiw"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.0.11-rc2-24027"; sha256 = "0qkaldb06dwmi8gb940h75n9cs5rgy6sqcpa6f443mhahmagmsbd"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "4.4.0"; sha256 = "07bzjnflxjk9vgpljfybrpqmvsr9qr2f20nq5wf11imwa5pbhgfc"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.0.11"; sha256 = "08nsfrpiwsg9x5ml4xyl3zyvjfdi4mvbqf93kjdh11j4fwkznizs"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.0.11-rc2-24027"; sha256 = "02xic3hhfy48s50bxh25as1l9v3afgrhlxqfnd5ki4qirxly7qs6"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy"; })
+  (fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.0.12-rc2-24027"; sha256 = "1111sgvbxrxq9c1i0nziqddlzfdc2bsawd0jcf2nna9nkcn4d6br"; })
+  (fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.1.0"; sha256 = "1mw7vfkkyd04yn2fbhm38msk7dz2xwvib14ygjsb8dq2lcvr18y7"; })
+  (fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.3.0"; sha256 = "1bgq51k7fwld0njylfn7qc5fmwrk2137gdq7djqdsw347paa9c2l"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.0.11"; sha256 = "19x946h926bzvbsgj28csn46gak2crv2skpwsx80hbgazmkgb1ls"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.0.11-rc2-24027"; sha256 = "0aa4zaqma4yagjd44m2j13gr9qzn8rv8dbz3p9mjdk0dx1zpi4iq"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; })
+  (fetchNuGet { pname = "System.Threading.Channels"; version = "4.5.0"; sha256 = "0n6z3wjia7h2a5vl727p97riydnb6jhhkb1pdcnizza02dwkz0nz"; })
+  (fetchNuGet { pname = "System.Threading.Overlapped"; version = "4.0.1-rc2-24027"; sha256 = "1ansaxwkc4xi2ngpiv8gjmv02d75y0nb4lfqzxy73r3radakqvdp"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.0.11"; sha256 = "0nr1r41rak82qfa5m0lhk9mp0k93bvfd7bbd9sdzwx9mb36g28p5"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.0.11-rc2-24027"; sha256 = "0fsgdzdxm3yj1cym421ymn8x8anhyzgzc1529q5xd1vq4yknwfq0"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.3.0"; sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.0.0"; sha256 = "1cb51z062mvc2i8blpzmpn9d9mm4y307xrwi65di8ri18cz5r1zr"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.0.0-rc2-24027"; sha256 = "108sdqpy3ga6gzksl59w1k21a3jlrh8x2igyxh3dm3212rca1pyg"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.3.0"; sha256 = "1xxcx2xh8jin360yjwm4x4cf5y3a2bwpn2ygkfkwkicz7zk50s2z"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.1"; sha256 = "1ikrplvw4m6pzjbq3bfbpr572n4i9mni577zvmrkaygvx85q3myw"; })
+  (fetchNuGet { pname = "System.Threading.Thread"; version = "4.0.0-rc2-24027"; sha256 = "1gv963m4523m3m9gbn819bfzmhxqsv93m5kaqmbv4ijyziby2872"; })
+  (fetchNuGet { pname = "System.Threading.ThreadPool"; version = "4.3.0"; sha256 = "027s1f4sbx0y1xqw2irqn6x161lzj8qwvnh2gn78ciiczdv10vf1"; })
+  (fetchNuGet { pname = "System.Threading.Timer"; version = "4.0.1-rc2-24027"; sha256 = "06kwi42lgf3zw3b5yw668ammbjl6208y182wyqaaqrxgn5gs4yh7"; })
+  (fetchNuGet { pname = "System.Threading.Timer"; version = "4.3.0"; sha256 = "1nx773nsx6z5whv8kaa1wjh037id2f1cxhb69pvgv12hd2b6qs56"; })
+  (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.0.11"; sha256 = "0c6ky1jk5ada9m94wcadih98l6k1fvf6vi7vhn1msjixaha419l5"; })
+  (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.0.11-rc2-24027"; sha256 = "0vywggi6mqkbr6g1a1fh821hqfnyq1k829vlhfw908l7mj75k34d"; })
+  (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.3.0"; sha256 = "0c47yllxifzmh8gq6rq6l36zzvw4kjvlszkqa9wq3fr59n0hl3s1"; })
+  (fetchNuGet { pname = "System.Xml.XDocument"; version = "4.0.11"; sha256 = "0n4lvpqzy9kc7qy1a4acwwd7b7pnvygv895az5640idl2y9zbz18"; })
+  (fetchNuGet { pname = "System.Xml.XDocument"; version = "4.0.11-rc2-24027"; sha256 = "1rvglifac6xq1lawm78w49fq9cl8zvs1g4vrsd2hhf0vb4i85p1z"; })
+  (fetchNuGet { pname = "System.Xml.XDocument"; version = "4.3.0"; sha256 = "08h8fm4l77n0nd4i4fk2386y809bfbwqb7ih9d7564ifcxr5ssxd"; })
+  (fetchNuGet { pname = "System.Xml.XmlDocument"; version = "4.3.0"; sha256 = "0bmz1l06dihx52jxjr22dyv5mxv6pj4852lx68grjm7bivhrbfwi"; })
+  (fetchNuGet { pname = "System.Xml.XmlSerializer"; version = "4.3.0"; sha256 = "07pa4sx196vxkgl3csvdmw94nydlsm9ir38xxcs84qjn8cycd912"; })
+  (fetchNuGet { pname = "xunit"; version = "2.4.1"; sha256 = "0xf3kaywpg15flqaqfgywqyychzk15kz0kz34j21rcv78q9ywq20"; })
+  (fetchNuGet { pname = "xunit.abstractions"; version = "2.0.3"; sha256 = "00wl8qksgkxld76fgir3ycc5rjqv1sqds6x8yx40927q5py74gfh"; })
+  (fetchNuGet { pname = "xunit.analyzers"; version = "0.10.0"; sha256 = "15n02q3akyqbvkp8nq75a8rd66d4ax0rx8fhdcn8j78pi235jm7j"; })
+  (fetchNuGet { pname = "xunit.assert"; version = "2.4.1"; sha256 = "1imynzh80wxq2rp9sc4gxs4x1nriil88f72ilhj5q0m44qqmqpc6"; })
+  (fetchNuGet { pname = "xunit.core"; version = "2.4.1"; sha256 = "1nnb3j4kzmycaw1g76ii4rfqkvg6l8gqh18falwp8g28h802019a"; })
+  (fetchNuGet { pname = "xunit.extensibility.core"; version = "2.4.1"; sha256 = "103qsijmnip2pnbhciqyk2jyhdm6snindg5z2s57kqf5pcx9a050"; })
+  (fetchNuGet { pname = "xunit.extensibility.execution"; version = "2.4.1"; sha256 = "1pbilxh1gp2ywm5idfl0klhl4gb16j86ib4x83p8raql1dv88qia"; })
+  (fetchNuGet { pname = "xunit.runner.visualstudio"; version = "2.4.1"; sha256 = "0fln5pk18z98gp0zfshy1p9h6r9wc55nyqhap34k89yran646vhn"; })
+  (fetchNuGet { pname = "YamlDotNet.Signed"; version = "5.3.0"; sha256 = "1gnp5aa2zzg7v61bbn2ra1npy0p07szp5w8vqk44fdj3fcvrdxib"; })
+]
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/dont-install-service.patch b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/dont-install-service.patch
new file mode 100644
index 000000000000..5590fa3df027
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/dont-install-service.patch
@@ -0,0 +1,28 @@
+From 369b3d98b44abbf061080ab1b17b22f99706ef69 Mon Sep 17 00:00:00 2001
+From: Vincent Haupert <mail@vincent-haupert.de>
+Date: Sun, 26 Feb 2023 12:55:38 +0100
+Subject: [PATCH] Don't generate service config on Linux and OSX
+
+---
+ src/Runner.Listener/Configuration/ConfigurationManager.cs | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/src/Runner.Listener/Configuration/ConfigurationManager.cs b/src/Runner.Listener/Configuration/ConfigurationManager.cs
+index 392eb0e..4c75324 100644
+--- a/src/Runner.Listener/Configuration/ConfigurationManager.cs
++++ b/src/Runner.Listener/Configuration/ConfigurationManager.cs
+@@ -367,11 +367,6 @@ namespace GitHub.Runner.Listener.Configuration
+                 var serviceControlManager = HostContext.GetService<IWindowsServiceControlManager>();
+                 serviceControlManager.ConfigureService(runnerSettings, command);
+             }
+-
+-#elif OS_LINUX || OS_OSX
+-            // generate service config script for OSX and Linux, GenerateScripts() will no-opt on windows.
+-            var serviceControlManager = HostContext.GetService<ILinuxServiceControlManager>();
+-            serviceControlManager.GenerateScripts(runnerSettings);
+ #endif
+         }
+ 
+-- 
+2.38.1
+
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/env-sh-use-runner-root.patch b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/env-sh-use-runner-root.patch
new file mode 100644
index 000000000000..d87e00d0f349
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/env-sh-use-runner-root.patch
@@ -0,0 +1,76 @@
+From 84b2fcdf042771ae8adc0f59f1a3ecd9788a808d Mon Sep 17 00:00:00 2001
+From: Vincent Haupert <mail@vincent-haupert.de>
+Date: Sun, 26 Feb 2023 11:37:01 +0100
+Subject: [PATCH] Access `.env` and `.path` relative to `$RUNNER_ROOT`, if set
+
+---
+ src/Misc/layoutbin/runsvc.sh   |  4 ++--
+ src/Misc/layoutroot/env.sh     | 10 +++++-----
+ src/Runner.Listener/Program.cs |  2 +-
+ 3 files changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/src/Misc/layoutbin/runsvc.sh b/src/Misc/layoutbin/runsvc.sh
+index c135645..bb0fbf6 100755
+--- a/src/Misc/layoutbin/runsvc.sh
++++ b/src/Misc/layoutbin/runsvc.sh
+@@ -4,9 +4,9 @@
+ # for more info on how to propagate SIGTERM to a child process see: http://veithen.github.io/2014/11/16/sigterm-propagation.html
+ trap 'kill -INT $PID' TERM INT
+ 
+-if [ -f ".path" ]; then
++if [ -f "${RUNNER_ROOT:-"."}/.path" ]; then
+     # configure
+-    export PATH=`cat .path`
++    export PATH=`cat "${RUNNER_ROOT:-"."}/.path"`
+     echo ".path=${PATH}"
+ fi
+ 
+diff --git a/src/Misc/layoutroot/env.sh b/src/Misc/layoutroot/env.sh
+index 641d244..85379bf 100755
+--- a/src/Misc/layoutroot/env.sh
++++ b/src/Misc/layoutroot/env.sh
+@@ -16,10 +16,10 @@ varCheckList=(
+ 
+ envContents=""
+ 
+-if [ -f ".env" ]; then
+-    envContents=`cat .env`
++if [ -f "${RUNNER_ROOT:-"."}/.env" ]; then
++    envContents=`cat "${RUNNER_ROOT:-"."}/.env"`
+ else
+-    touch .env
++    touch "${RUNNER_ROOT:-"."}/.env"
+ fi
+ 
+ function writeVar()
+@@ -29,12 +29,12 @@ function writeVar()
+     if test "${envContents#*$checkDelim}" = "$envContents"
+     then
+         if [ ! -z "${!checkVar}" ]; then
+-            echo "${checkVar}=${!checkVar}">>.env
++            echo "${checkVar}=${!checkVar}">>"${RUNNER_ROOT:-"."}/.env"
+         fi
+     fi 
+ }
+ 
+-echo $PATH>.path
++echo $PATH>"${RUNNER_ROOT:-"."}/.path"
+ 
+ for var_name in ${varCheckList[@]}
+ do
+diff --git a/src/Runner.Listener/Program.cs b/src/Runner.Listener/Program.cs
+index d4d5e43..beacc9d 100644
+--- a/src/Runner.Listener/Program.cs
++++ b/src/Runner.Listener/Program.cs
+@@ -148,7 +148,7 @@ namespace GitHub.Runner.Listener
+         private static void LoadAndSetEnv()
+         {
+             var binDir = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
+-            var rootDir = new DirectoryInfo(binDir).Parent.FullName;
++            var rootDir = Environment.GetEnvironmentVariable("RUNNER_ROOT") ?? new DirectoryInfo(binDir).Parent.FullName;
+             string envFile = Path.Combine(rootDir, ".env");
+             if (File.Exists(envFile))
+             {
+-- 
+2.38.1
+
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/host-context-dirs.patch b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/host-context-dirs.patch
new file mode 100644
index 000000000000..662ad9676da9
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/host-context-dirs.patch
@@ -0,0 +1,20 @@
+diff --git a/src/Runner.Common/HostContext.cs b/src/Runner.Common/HostContext.cs
+index d4ea48c..2ec8455 100644
+--- a/src/Runner.Common/HostContext.cs
++++ b/src/Runner.Common/HostContext.cs
+@@ -220,12 +220,13 @@ namespace GitHub.Runner.Common
+ 
+                 case WellKnownDirectory.Externals:
+                     path = Path.Combine(
+-                        GetDirectory(WellKnownDirectory.Root),
++                        new DirectoryInfo(GetDirectory(WellKnownDirectory.Bin)).Parent.FullName,
+                         Constants.Path.ExternalsDirectory);
+                     break;
+ 
+                 case WellKnownDirectory.Root:
+-                    path = new DirectoryInfo(GetDirectory(WellKnownDirectory.Bin)).Parent.FullName;
++                    path = Environment.GetEnvironmentVariable("RUNNER_ROOT")
++                                ?? new DirectoryInfo(GetDirectory(WellKnownDirectory.Bin)).Parent.FullName;
+                     break;
+ 
+                 case WellKnownDirectory.Temp:
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/use-get-directory-for-diag.patch b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/use-get-directory-for-diag.patch
new file mode 100644
index 000000000000..2581cb7bb921
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/patches/use-get-directory-for-diag.patch
@@ -0,0 +1,25 @@
+diff --git a/src/Runner.Common/HostContext.cs b/src/Runner.Common/HostContext.cs
+index 9e43464..a953694 100644
+--- a/src/Runner.Common/HostContext.cs
++++ b/src/Runner.Common/HostContext.cs
+@@ -119,7 +119,7 @@ namespace GitHub.Runner.Common
+                 }
+ 
+                 // this should give us _diag folder under runner root directory
+-                string diagLogDirectory = Path.Combine(new DirectoryInfo(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)).Parent.FullName, Constants.Path.DiagDirectory);
++                string diagLogDirectory = GetDirectory(WellKnownDirectory.Diag);
+                 _traceManager = new TraceManager(new HostTraceListener(diagLogDirectory, hostType, logPageSize, logRetentionDays), stdoutTraceListener, this.SecretMasker);
+             }
+             else
+@@ -297,7 +297,10 @@ namespace GitHub.Runner.Common
+                     throw new NotSupportedException($"Unexpected well known directory: '{directory}'");
+             }
+ 
+-            _trace.Info($"Well known directory '{directory}': '{path}'");
++            if (_trace != null)
++            {
++                _trace.Info($"Well known directory '{directory}': '{path}'");
++            }
+             return path;
+         }
+ 
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/update.sh b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/update.sh
new file mode 100755
index 000000000000..26b54bf6ac0e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/github-runner/update.sh
@@ -0,0 +1,19 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -I nixpkgs=./. -i bash -p coreutils common-updater-scripts jq curl
+
+set -euo pipefail
+
+currentVersion="$(nix --extra-experimental-features nix-command eval -f . github-runner.version --raw)"
+latestVersion="$(curl -s -H "Accept: application/vnd.github.v3+json" \
+            ${GITHUB_TOKEN:+ -H "Authorization: bearer $GITHUB_TOKEN"} \
+            "https://api.github.com/repos/actions/runner/releases/latest" | jq -r ".tag_name")"
+latestVersion="${latestVersion#?}" # v2.296.2 -> 2.296.2
+
+if [[ "$latestVersion" == "$currentVersion" ]]; then
+    echo "github-runner is already up to date: $currentVersion"
+    exit
+fi
+
+update-source-version github-runner "$latestVersion"
+$(nix-build -A github-runner.fetch-deps --no-out-link)
+
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/default.nix
new file mode 100644
index 000000000000..e50ade55d9b8
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/default.nix
@@ -0,0 +1,74 @@
+{ lib, buildGoModule, fetchFromGitLab, fetchurl, bash }:
+
+let
+  version = "16.3.0";
+in
+buildGoModule rec {
+  inherit version;
+  pname = "gitlab-runner";
+
+  commonPackagePath = "gitlab.com/gitlab-org/gitlab-runner/common";
+  ldflags = [
+    "-X ${commonPackagePath}.NAME=gitlab-runner"
+    "-X ${commonPackagePath}.VERSION=${version}"
+    "-X ${commonPackagePath}.REVISION=v${version}"
+  ];
+
+  # For patchShebangs
+  buildInputs = [ bash ];
+
+  vendorHash = "sha256-tMhzq9ygUmNi9+mlI9Gvr2nDyG9HQbs8PVusSgadZIE=";
+
+  src = fetchFromGitLab {
+    owner = "gitlab-org";
+    repo = "gitlab-runner";
+    rev = "v${version}";
+    sha256 = "sha256-YAnHOIpUN1OuNefjCIccZOLwPNMxVBuCRQgX0Tb5bos=";
+  };
+
+  patches = [
+    ./fix-shell-path.patch
+    ./remove-bash-test.patch
+  ];
+
+  prePatch = ''
+    # Remove some tests that can't work during a nix build
+
+    # Requires to run in a git repo
+    sed -i "s/func TestCacheArchiverAddingUntrackedFiles/func OFF_TestCacheArchiverAddingUntrackedFiles/" commands/helpers/file_archiver_test.go
+    sed -i "s/func TestCacheArchiverAddingUntrackedUnicodeFiles/func OFF_TestCacheArchiverAddingUntrackedUnicodeFiles/" commands/helpers/file_archiver_test.go
+
+    # No writable developer environment
+    rm common/build_test.go
+    rm executors/custom/custom_test.go
+
+    # No docker during build
+    rm executors/docker/terminal_test.go
+    rm executors/docker/docker_test.go
+    rm helpers/docker/auth/auth_test.go
+    rm executors/docker/services_test.go
+  '';
+
+  excludedPackages = [
+    # CI helper script for pushing images to Docker and ECR registries
+    # https://gitlab.com/gitlab-org/gitlab-runner/-/merge_requests/4139
+    "./scripts/sync-docker-images"
+  ];
+
+  postInstall = ''
+    install packaging/root/usr/share/gitlab-runner/clear-docker-cache $out/bin
+  '';
+
+  preCheck = ''
+    # Make the tests pass outside of GitLab CI
+    export CI=0
+  '';
+
+  meta = with lib; {
+    description = "GitLab Runner the continuous integration executor of GitLab";
+    license = licenses.mit;
+    homepage = "https://about.gitlab.com/gitlab-ci/";
+    platforms = platforms.unix ++ platforms.darwin;
+    maintainers = with maintainers; [ bachp zimbatm globin ] ++ teams.gitlab.members;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/fix-shell-path.patch b/nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/fix-shell-path.patch
new file mode 100644
index 000000000000..b70b95e7be0b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/fix-shell-path.patch
@@ -0,0 +1,25 @@
+diff --git a/shells/bash.go b/shells/bash.go
+index 18d608445..f158ffc0b 100644
+--- a/shells/bash.go
++++ b/shells/bash.go
+@@ -3,6 +3,7 @@ package shells
+ import (
+ 	"bytes"
+ 	"fmt"
++	"os/exec"
+ 	"path"
+ 	"runtime"
+ 	"strconv"
+@@ -307,7 +308,11 @@ func (b *BashShell) GetConfiguration(info common.ShellScriptInfo) (*common.Shell
+
+ 	script.Command = "su"
+ 	if runtime.GOOS == OSLinux {
+-		script.Arguments = []string{"-s", "/bin/" + b.Shell, info.User, "-c", script.CmdLine}
++		shellPath, err := exec.LookPath(b.Shell)
++		if err != nil {
++			shellPath = "/bin/" + b.Shell
++		}
++		script.Arguments = []string{"-s", shellPath, info.User, "-c", script.CmdLine}
+ 	} else {
+ 		script.Arguments = []string{info.User, "-c", script.CmdLine}
+ 	}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/remove-bash-test.patch b/nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/remove-bash-test.patch
new file mode 100644
index 000000000000..6f27ef71c957
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/gitlab-runner/remove-bash-test.patch
@@ -0,0 +1,82 @@
+diff --git a/shells/bash_test.go b/shells/bash_test.go
+index 9ed9e65ff..02b6e6d5f 100644
+--- a/shells/bash_test.go
++++ b/shells/bash_test.go
+@@ -4,11 +4,9 @@ package shells
+ 
+ import (
+ 	"path"
+-	"runtime"
+ 	"testing"
+ 
+ 	"github.com/stretchr/testify/assert"
+-	"github.com/stretchr/testify/require"
+ 	"gitlab.com/gitlab-org/gitlab-runner/common"
+ )
+ 
+@@ -90,65 +88,6 @@ func TestBash_CheckForErrors(t *testing.T) {
+ 	}
+ }
+ 
+-func TestBash_GetConfiguration(t *testing.T) {
+-	tests := map[string]struct {
+-		info common.ShellScriptInfo
+-		cmd  string
+-		args []string
+-		os   string
+-	}{
+-		`bash`: {
+-			info: common.ShellScriptInfo{Shell: "bash", Type: common.NormalShell},
+-			cmd:  "bash",
+-		},
+-		`bash -l`: {
+-			info: common.ShellScriptInfo{Shell: "bash", Type: common.LoginShell},
+-			cmd:  "bash",
+-			args: []string{"-l"},
+-		},
+-		`su -s /bin/bash foobar -c bash`: {
+-			info: common.ShellScriptInfo{Shell: "bash", User: "foobar", Type: common.NormalShell},
+-			cmd:  "su",
+-			args: []string{"-s", "/bin/bash", "foobar", "-c", "bash"},
+-			os:   OSLinux,
+-		},
+-		`su -s /bin/bash foobar -c $'bash -l'`: {
+-			info: common.ShellScriptInfo{Shell: "bash", User: "foobar", Type: common.LoginShell},
+-			cmd:  "su",
+-			args: []string{"-s", "/bin/bash", "foobar", "-c", "bash -l"},
+-			os:   OSLinux,
+-		},
+-		`su -s /bin/sh foobar -c $'sh -l'`: {
+-			info: common.ShellScriptInfo{Shell: "sh", User: "foobar", Type: common.LoginShell},
+-			cmd:  "su",
+-			args: []string{"-s", "/bin/sh", "foobar", "-c", "sh -l"},
+-			os:   OSLinux,
+-		},
+-		`su foobar -c $'bash -l'`: {
+-			info: common.ShellScriptInfo{Shell: "bash", User: "foobar", Type: common.LoginShell},
+-			cmd:  "su",
+-			args: []string{"foobar", "-c", "bash -l"},
+-			os:   "darwin",
+-		},
+-	}
+-
+-	for tn, tc := range tests {
+-		t.Run(tn, func(t *testing.T) {
+-			if tc.os != "" && tc.os != runtime.GOOS {
+-				t.Skipf("test only runs on %s", tc.os)
+-			}
+-
+-			sh := BashShell{Shell: tc.info.Shell}
+-			config, err := sh.GetConfiguration(tc.info)
+-			require.NoError(t, err)
+-
+-			assert.Equal(t, tc.cmd, config.Command)
+-			assert.Equal(t, tc.args, config.Arguments)
+-			assert.Equal(t, tn, config.CmdLine)
+-		})
+-	}
+-}
+-
+ func Test_BashWriter_isTmpFile(t *testing.T) {
+ 	tmpDir := "/foo/bar"
+ 	bw := BashWriter{TemporaryPath: tmpDir}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/gocd-agent/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/gocd-agent/default.nix
new file mode 100644
index 000000000000..6a6c5674bb67
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/gocd-agent/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, unzip }:
+
+stdenv.mkDerivation rec {
+  pname = "gocd-agent";
+  version = "23.1.0";
+  rev = "16079";
+
+  src = fetchurl {
+    url = "https://download.go.cd/binaries/${version}-${rev}/generic/go-agent-${version}-${rev}.zip";
+    sha256 = "sha256-L2MOkbVHoQu99lKrbnsNkhuU0SZ8VANSK72GZrGLbiQ=";
+  };
+  meta = with lib; {
+    description = "A continuous delivery server specializing in advanced workflow modeling and visualization";
+    homepage = "http://www.go.cd";
+    license = licenses.asl20;
+    platforms = platforms.all;
+    sourceProvenance = with sourceTypes; [
+      binaryBytecode
+      binaryNativeCode
+    ];
+    maintainers = with maintainers; [ grahamc swarren83 ];
+  };
+
+  nativeBuildInputs = [ unzip ];
+
+  buildCommand = "
+    unzip $src -d $out
+    mv $out/go-agent-${version} $out/go-agent
+  ";
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/gocd-server/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/gocd-server/default.nix
new file mode 100644
index 000000000000..6fc577225f42
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/gocd-server/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenv
+, fetchurl
+, unzip
+, nixosTests
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gocd-server";
+  version = "23.1.0";
+  rev = "16079";
+
+  src = fetchurl {
+    url = "https://download.go.cd/binaries/${version}-${rev}/generic/go-server-${version}-${rev}.zip";
+    sha256 = "sha256-//d6izGm1odE25H/PI5pn51FfUL4/6GbLwKUKAqZ3Kw=";
+  };
+
+  meta = with lib; {
+    description = "A continuous delivery server specializing in advanced workflow modeling and visualization";
+    homepage = "http://www.go.cd";
+    license = licenses.asl20;
+    platforms = platforms.all;
+    sourceProvenance = with sourceTypes; [
+      binaryBytecode
+      binaryNativeCode
+    ];
+    maintainers = with maintainers; [ grahamc swarren83 ];
+  };
+
+  nativeBuildInputs = [ unzip ];
+
+  passthru.tests = {
+    inherit (nixosTests) gocd-server;
+  };
+
+  buildCommand = "
+    unzip $src -d $out
+    mv $out/go-server-${version} $out/go-server
+    mkdir -p $out/go-server/conf
+  ";
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/hci/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/hci/default.nix
new file mode 100644
index 000000000000..5060d0aeda01
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/hci/default.nix
@@ -0,0 +1,23 @@
+{ haskell, haskellPackages, lib, makeWrapper, runc, stdenv }:
+let
+  inherit (haskell.lib.compose) overrideCabal addBuildTools justStaticExecutables;
+  inherit (lib) makeBinPath;
+  bundledBins = lib.optional stdenv.isLinux runc;
+
+  pkg =
+    # justStaticExecutables is needed due to https://github.com/NixOS/nix/issues/2990
+    overrideCabal
+      (o: {
+        postInstall = ''
+          ${o.postInstall or ""}
+          mkdir -p $out/libexec
+          mv $out/bin/hci $out/libexec
+          makeWrapper $out/libexec/hci $out/bin/hci --prefix PATH : ${lib.escapeShellArg (makeBinPath bundledBins)}
+        '';
+      })
+      (addBuildTools [ makeWrapper ] (justStaticExecutables haskellPackages.hercules-ci-cli));
+in pkg // {
+    meta = pkg.meta // {
+      position = toString ./default.nix + ":1";
+    };
+  }
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/hercules-ci-agent/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/hercules-ci-agent/default.nix
new file mode 100644
index 000000000000..c5c52d29d3aa
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/hercules-ci-agent/default.nix
@@ -0,0 +1,72 @@
+{
+  git,
+  gnutar,
+  gzip,
+  haskell,
+  haskellPackages,
+  lib,
+  makeBinaryWrapper,
+  nixos,
+  openssh,
+  runc,
+  stdenv,
+  testers,
+}:
+let
+  inherit (haskell.lib.compose) overrideCabal addBuildTools justStaticExecutables;
+  inherit (lib) makeBinPath;
+  bundledBins = [ gnutar gzip git openssh ] ++ lib.optional stdenv.isLinux runc;
+
+  pkg =
+    # justStaticExecutables is needed due to https://github.com/NixOS/nix/issues/2990
+    overrideCabal
+      (o: {
+        postInstall = ''
+          ${o.postInstall or ""}
+          mkdir -p $out/libexec
+          mv $out/bin/hercules-ci-agent $out/libexec
+          makeWrapper $out/libexec/hercules-ci-agent $out/bin/hercules-ci-agent --prefix PATH : ${lib.escapeShellArg (makeBinPath bundledBins)}
+        '';
+      })
+      (addBuildTools [ makeBinaryWrapper ] (justStaticExecutables haskellPackages.hercules-ci-agent));
+in pkg.overrideAttrs (finalAttrs: o: {
+    meta = o.meta // {
+      position = toString ./default.nix + ":1";
+    };
+    passthru = o.passthru // {
+      tests = {
+        version = testers.testVersion {
+          package = finalAttrs.finalPackage;
+          command = "hercules-ci-agent --help";
+        };
+      } // lib.optionalAttrs (stdenv.isLinux) {
+        # Does not test the package, but evaluation of the related NixOS module.
+        nixos-simple-config = (nixos {
+          boot.loader.grub.enable = false;
+          fileSystems."/".device = "bogus";
+          services.hercules-ci-agent.enable = true;
+          # Dummy value for testing only.
+          system.stateVersion = lib.trivial.release; # TEST ONLY
+        }).config.system.build.toplevel;
+
+        nixos-many-options-config = (nixos ({ pkgs, ... }: {
+          boot.loader.grub.enable = false;
+          fileSystems."/".device = "bogus";
+          services.hercules-ci-agent = {
+            enable = true;
+            package = pkgs.hercules-ci-agent;
+            settings = {
+              workDirectory = "/var/tmp/hci";
+              binaryCachesPath = "/var/keys/binary-caches.json";
+              labels.foo.bar.baz = "qux";
+              labels.qux = ["q" "u"];
+              apiBaseUrl = "https://hci.dev.biz.example.com";
+              concurrentTasks = 42;
+            };
+          };
+          # Dummy value for testing only.
+          system.stateVersion = lib.trivial.release; # TEST ONLY
+        })).config.system.build.toplevel;
+      };
+    };
+  })
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/jenkins/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/jenkins/default.nix
new file mode 100644
index 000000000000..46d4e911c077
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/jenkins/default.nix
@@ -0,0 +1,77 @@
+{ lib, stdenv, fetchurl, common-updater-scripts, coreutils, git, gnused
+, makeWrapper, nix, nixfmt, openjdk, writeScript, nixosTests, jq, cacert, curl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "jenkins";
+  version = "2.414.1";
+
+  src = fetchurl {
+    url = "https://get.jenkins.io/war-stable/${version}/jenkins.war";
+    hash = "sha256-8lI/m1/lAZn2j2D5a2vvnKEA4YCZ4+PaeppJroxHsBU=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildCommand = ''
+    mkdir -p "$out/bin" "$out/share" "$out/webapps"
+
+    cp "$src" "$out/webapps/jenkins.war"
+
+    # Create the `jenkins-cli` command.
+    ${openjdk}/bin/jar -xf "$src" WEB-INF/lib/cli-${version}.jar \
+      && mv WEB-INF/lib/cli-${version}.jar "$out/share/jenkins-cli.jar"
+
+    makeWrapper "${openjdk}/bin/java" "$out/bin/jenkins-cli" \
+      --add-flags "-jar $out/share/jenkins-cli.jar"
+  '';
+
+  passthru = {
+    tests = { inherit (nixosTests) jenkins jenkins-cli; };
+
+    updateScript = writeScript "update.sh" ''
+      #!${stdenv.shell}
+      set -o errexit
+      PATH=${
+        lib.makeBinPath [
+          cacert
+          common-updater-scripts
+          coreutils
+          curl
+          git
+          gnused
+          jq
+          nix
+          nixfmt
+        ]
+      }
+
+      core_json="$(curl -s --fail --location https://updates.jenkins.io/stable/update-center.actual.json | jq .core)"
+      oldVersion=$(nix-instantiate --eval -E "with import ./. {}; lib.getVersion jenkins" | tr -d '"')
+
+      version="$(jq -r .version <<<$core_json)"
+      sha256="$(jq -r .sha256 <<<$core_json)"
+      hash="$(nix hash to-sri --type sha256 "$sha256")"
+
+      if [ ! "$oldVersion" = "$version" ]; then
+        update-source-version jenkins "$version" "$hash"
+        nixpkgs="$(git rev-parse --show-toplevel)"
+        default_nix="$nixpkgs/pkgs/development/tools/continuous-integration/jenkins/default.nix"
+        nixfmt "$default_nix"
+      else
+        echo "jenkins is already up-to-date"
+      fi
+    '';
+  };
+
+  meta = with lib; {
+    description = "An extendable open source continuous integration server";
+    homepage = "https://jenkins.io/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.mit;
+    maintainers = with maintainers; [ coconnor earldouglas nequissimus ajs124 ];
+    changelog = "https://www.jenkins.io/changelog-stable/#v${version}";
+    mainProgram = "jenkins-cli";
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/laminar/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/laminar/default.nix
new file mode 100644
index 000000000000..e32d3e4a9701
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/laminar/default.nix
@@ -0,0 +1,67 @@
+{ stdenv
+, lib
+, fetchurl
+, fetchFromGitHub
+, cmake
+, capnproto
+, sqlite
+, boost
+, zlib
+, rapidjson
+, pandoc
+}:
+let
+  js.vue = fetchurl {
+    url = "https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.12/vue.min.js";
+    sha256 = "1hm5kci2g6n5ikrvp1kpkkdzimjgylv1xicg2vnkbvd9rb56qa99";
+  };
+  js.ansi_up = fetchurl {
+    url = "https://raw.githubusercontent.com/drudru/ansi_up/v4.0.4/ansi_up.js";
+    sha256 = "1dx8wn38ds8d01kkih26fx1yrisg3kpz61qynjr4zil03ap0hrlr";
+  };
+  js.Chart = fetchurl {
+    url = "https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.9.1/chart.min.js";
+    hash = "sha256-+8RZJua0aEWg+QVVKg4LEzEEm/8RFez5Tb4JBNiV5xA=";
+  };
+in stdenv.mkDerivation rec {
+  pname = "laminar";
+  version = "1.3";
+  outputs = [ "out" "doc" ];
+  src = fetchFromGitHub {
+    owner = "ohwgiles";
+    repo = "laminar";
+    rev = version;
+    hash = "sha256-eo5WzvmjBEe0LAfZdQ/U0XepEE2kdWKKiyE4HOi3RXk=";
+  };
+  patches = [ ./patches/no-network.patch ];
+
+  # We need both binary from "capnproto" and library files.
+  nativeBuildInputs = [ cmake pandoc capnproto ];
+  buildInputs = [ capnproto sqlite boost zlib rapidjson ];
+  cmakeFlags = [ "-DLAMINAR_VERSION=${version}" ];
+
+  preBuild = ''
+    mkdir -p js css
+    cp  ${js.vue}         js/vue.min.js
+    cp  ${js.ansi_up}     js/ansi_up.js
+    cp  ${js.Chart}       js/Chart.min.js
+  '';
+
+  postInstall = ''
+    mv $out/usr/share/* $out/share/
+    rmdir $out/usr/share $out/usr
+
+    mkdir -p $out/share/doc/laminar
+    pandoc -s ../UserManual.md -o $out/share/doc/laminar/UserManual.html
+    rm -rf $out/lib # remove upstream systemd units
+    rm -rf $out/etc # remove upstream config file
+  '';
+
+  meta = with lib; {
+    description = "Lightweight and modular continuous integration service";
+    homepage = "https://laminar.ohwg.net";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ kaction maralorn ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/laminar/patches/no-network.patch b/nixpkgs/pkgs/development/tools/continuous-integration/laminar/patches/no-network.patch
new file mode 100644
index 000000000000..7b4d3134d69f
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/laminar/patches/no-network.patch
@@ -0,0 +1,39 @@
+Build system that downloads stuff from network is bad. Build system that
+does so unconditionally is twice as bad.
+
+Required files are downloaded as separate fixed-output derivations and
+put into correct location before build phase starts.
+
+--- laminar-1.3/CMakeLists.txt
++++ laminar-1.3-new/CMakeLists.txt
+@@ -82,13 +82,6 @@
+     COMMAND sh -c '( echo -n "\\#define INDEX_HTML_UNCOMPRESSED_SIZE " && wc -c < "${CMAKE_SOURCE_DIR}/src/resources/index.html" ) > index_html_size.h'
+     DEPENDS src/resources/index.html)
+ 
+-# Download 3rd-party frontend JS libs...
+-file(DOWNLOAD https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.12/vue.min.js
+-	js/vue.min.js EXPECTED_MD5 fb192338844efe86ec759a40152fcb8e)
+-file(DOWNLOAD https://raw.githubusercontent.com/drudru/ansi_up/v4.0.4/ansi_up.js
+-        js/ansi_up.js EXPECTED_MD5 b31968e1a8fed0fa82305e978161f7f5)
+-file(DOWNLOAD https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.9.1/chart.min.js
+-        js/Chart.min.js EXPECTED_MD5 7dd5ea7d2cf22a1c42b43c40093d2669)
+ # ...and compile them
+ generate_compressed_bins(${CMAKE_BINARY_DIR} js/vue.min.js
+     js/ansi_up.js js/Chart.min.js)
+@@ -139,12 +132,12 @@
+     target_link_libraries(laminar-tests ${GTEST_LIBRARIES} capnp-rpc capnp kj-http kj-async kj pthread sqlite3 z)
+ endif()
+ 
+-set(SYSTEMD_UNITDIR /lib/systemd/system CACHE PATH "Path to systemd unit files")
+-set(BASH_COMPLETIONS_DIR /usr/share/bash-completion/completions CACHE PATH "Path to bash completions directory")
+-set(ZSH_COMPLETIONS_DIR /usr/share/zsh/site-functions CACHE PATH "Path to zsh completions directory")
++set(SYSTEMD_UNITDIR lib/systemd/system CACHE PATH "Path to systemd unit files")
++set(BASH_COMPLETIONS_DIR usr/share/bash-completion/completions CACHE PATH "Path to bash completions directory")
++set(ZSH_COMPLETIONS_DIR usr/share/zsh/site-functions CACHE PATH "Path to zsh completions directory")
+ install(TARGETS laminard RUNTIME DESTINATION sbin)
+ install(TARGETS laminarc RUNTIME DESTINATION bin)
+-install(FILES etc/laminar.conf DESTINATION /etc)
++install(FILES etc/laminar.conf DESTINATION etc)
+ install(FILES etc/laminarc-completion.bash DESTINATION ${BASH_COMPLETIONS_DIR} RENAME laminarc)
+ install(FILES etc/laminarc-completion.zsh DESTINATION ${ZSH_COMPLETIONS_DIR} RENAME _laminarc)
+ 
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker-pipeline-transform/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker-pipeline-transform/default.nix
new file mode 100644
index 000000000000..af05fafea40b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker-pipeline-transform/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitea }:
+buildGoModule rec {
+  pname = "woodpecker-pipeline-transform";
+  version = "0.1.1";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "lafriks";
+    repo = "woodpecker-pipeline-transform";
+    rev = "v${version}";
+    sha256 = "sha256-tWDMbOkajZ3BB32Vl630EZrY+Owm72MD2Z2JjMucVkI=";
+  };
+
+  vendorHash = "sha256-qKzGALMagf6QHeLdABfNGG4f/3K/F6CjVYjOJtyTNoM=";
+
+  meta = with lib; {
+    description = "Utility to convert different pipelines to Woodpecker CI pipelines";
+    homepage = "https://codeberg.org/lafriks/woodpecker-pipeline-transform";
+    license = licenses.mit;
+    mainProgram = "pipeline-convert";
+    maintainers = with maintainers; [ ambroisie ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker-plugin-git/default.nix b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker-plugin-git/default.nix
new file mode 100644
index 000000000000..dfca2742b58b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker-plugin-git/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, woodpecker-plugin-git
+}:
+
+buildGoModule rec {
+  pname = "woodpecker-plugin-git";
+  version = "2.1.1";
+
+  src = fetchFromGitHub {
+    owner = "woodpecker-ci";
+    repo = "plugin-git";
+    rev = "refs/tags/${version}";
+    hash = "sha256-siPLI463qUQs9tBMlmrMv6G5ry0JrEEIelpid9/cf88=";
+  };
+
+  vendorHash = "sha256-ol5k37gGFsyeEnGOVcJaerkIejShHyNCBu4RZ8WyHvU=";
+
+  CGO_ENABLED = "0";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.version=${version}"
+  ];
+
+  # Checks fail because they require network access.
+  doCheck = false;
+
+  passthru.tests.version = testers.testVersion { package = woodpecker-plugin-git; };
+
+  meta = with lib; {
+    description = "Woodpecker plugin for cloning Git repositories.";
+    homepage = "https://woodpecker-ci.org/";
+    changelog = "https://github.com/woodpecker-ci/plugin-git/releases/tag/${version}";
+    license = licenses.asl20;
+    mainProgram = "plugin-git";
+    maintainers = with maintainers; [ ambroisie ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/agent.nix b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/agent.nix
new file mode 100644
index 000000000000..5bbc4cf99cea
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/agent.nix
@@ -0,0 +1,17 @@
+{ buildGoModule, callPackage }:
+let
+  common = callPackage ./common.nix { };
+in
+buildGoModule {
+  pname = "woodpecker-agent";
+  inherit (common) version src ldflags postInstall vendorHash;
+
+  subPackages = "cmd/agent";
+
+  CGO_ENABLED = 0;
+
+  meta = common.meta // {
+    description = "Woodpecker Continuous Integration agent";
+    mainProgram = "woodpecker-agent";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/cli.nix b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/cli.nix
new file mode 100644
index 000000000000..d1f1da881681
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/cli.nix
@@ -0,0 +1,17 @@
+{ buildGoModule, callPackage }:
+let
+  common = callPackage ./common.nix { };
+in
+buildGoModule {
+  pname = "woodpecker-cli";
+  inherit (common) version src ldflags postInstall vendorHash;
+
+  subPackages = "cmd/cli";
+
+  CGO_ENABLED = 0;
+
+  meta = common.meta // {
+    description = "Command line client for the Woodpecker Continuous Integration server";
+    mainProgram = "woodpecker-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/common.nix b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/common.nix
new file mode 100644
index 000000000000..f44f48d6e2ad
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/common.nix
@@ -0,0 +1,38 @@
+{ lib, fetchFromGitHub }:
+let
+  version = "1.0.2";
+  srcHash = "sha256-OeOKR9lTGXU2qumyXq3s/CI56IX4XiI/ZTRHNoY6MEI=";
+  vendorHash = "sha256-+2wQKNyCb9xtB1TeE1/oSMEvKoXVX9ARZxsNqE2rfrg=";
+  yarnHash = "sha256-QNeQwWU36A05zaARWmqEOhfyZRW68OgF4wTonQLYQfs=";
+in
+{
+  inherit version yarnHash vendorHash;
+
+  src = fetchFromGitHub {
+    owner = "woodpecker-ci";
+    repo = "woodpecker";
+    rev = "v${version}";
+    hash = srcHash;
+  };
+
+  postInstall = ''
+    cd $out/bin
+    for f in *; do
+      mv -- "$f" "woodpecker-$f"
+    done
+    cd -
+  '';
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/woodpecker-ci/woodpecker/version.Version=${version}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://woodpecker-ci.org/";
+    changelog = "https://github.com/woodpecker-ci/woodpecker/blob/v${version}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ambroisie techknowlogick adamcstephens ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/frontend.nix b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/frontend.nix
new file mode 100644
index 000000000000..01767d6fe00e
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/frontend.nix
@@ -0,0 +1,57 @@
+{ lib, buildPackages, callPackage, fetchFromGitHub, fetchYarnDeps, mkYarnPackage }:
+let
+  common = callPackage ./common.nix { };
+
+  esbuild_0_17_19 = buildPackages.esbuild.overrideAttrs (_: rec {
+    version = "0.17.19";
+
+    src = fetchFromGitHub {
+      owner = "evanw";
+      repo = "esbuild";
+      rev = "v${version}";
+      hash = "sha256-PLC7OJLSOiDq4OjvrdfCawZPfbfuZix4Waopzrj8qsU=";
+    };
+
+    vendorHash = "sha256-+BfxCyg0KkDQpHt/wycy/8CTG6YBA/VJvJFhhzUnSiQ=";
+  });
+in
+mkYarnPackage {
+  pname = "woodpecker-frontend";
+  inherit (common) version;
+
+  src = "${common.src}/web";
+
+  packageJSON = ./woodpecker-package.json;
+  yarnLock = ./yarn.lock;
+
+  offlineCache = fetchYarnDeps {
+    yarnLock = ./yarn.lock;
+    hash = common.yarnHash;
+  };
+
+  ESBUILD_BINARY_PATH = lib.getExe esbuild_0_17_19;
+
+  buildPhase = ''
+    runHook preBuild
+
+    yarn --offline build
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    cp -R deps/woodpecker-ci/dist $out
+    echo "${common.version}" > "$out/version"
+
+    runHook postInstall
+  '';
+
+  # Do not attempt generating a tarball for woodpecker-frontend again.
+  doDist = false;
+
+  meta = common.meta // {
+    description = "Woodpecker Continuous Integration server frontend";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/server.nix b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/server.nix
new file mode 100644
index 000000000000..874949dff2f4
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/server.nix
@@ -0,0 +1,27 @@
+{ buildGoModule, callPackage, woodpecker-frontend }:
+let
+  common = callPackage ./common.nix { };
+in
+buildGoModule {
+  pname = "woodpecker-server";
+  inherit (common) version src ldflags postInstall vendorHash;
+
+  postPatch = ''
+    cp -r ${woodpecker-frontend} web/dist
+  '';
+
+  subPackages = "cmd/server";
+
+  CGO_ENABLED = 1;
+
+  passthru = {
+    inherit woodpecker-frontend;
+
+    updateScript = ./update.sh;
+  };
+
+  meta = common.meta // {
+    description = "Woodpecker Continuous Integration server";
+    mainProgram = "woodpecker-server";
+  };
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/update.sh b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/update.sh
new file mode 100755
index 000000000000..bfe948e8f507
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/update.sh
@@ -0,0 +1,53 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p nix wget prefetch-yarn-deps nix-prefetch-github jq nix-prefetch pnpm-lock-export
+
+# shellcheck shell=bash
+
+if [ -n "$GITHUB_TOKEN" ]; then
+    TOKEN_ARGS=(--header "Authorization: token $GITHUB_TOKEN")
+fi
+
+if [[ $# -gt 1 || $1 == -* ]]; then
+    echo "Regenerates packaging data for the woodpecker packages."
+    echo "Usage: $0 [git release tag]"
+    exit 1
+fi
+
+set -x
+
+cd "$(dirname "$0")"
+version="$1"
+
+set -euo pipefail
+
+if [ -z "$version" ]; then
+    version="$(wget -O- "${TOKEN_ARGS[@]}" "https://api.github.com/repos/woodpecker-ci/woodpecker/releases?per_page=1" | jq -r '.[0].tag_name')"
+fi
+
+# strip leading "v"
+version="${version#v}"
+
+# Woodpecker repository
+src_hash=$(nix-prefetch-github woodpecker-ci woodpecker --rev "v${version}" | jq -r .hash)
+
+# Go modules
+vendorHash=$(nix-prefetch '{ sha256 }: (callPackage (import ./cli.nix) { }).goModules.overrideAttrs (_: { modHash = sha256; })')
+
+# Front-end dependencies
+woodpecker_src="https://raw.githubusercontent.com/woodpecker-ci/woodpecker/v$version"
+wget "${TOKEN_ARGS[@]}" "$woodpecker_src/web/package.json" -O woodpecker-package.json
+
+trap 'rm -rf pnpm-lock.yaml' EXIT
+wget "${TOKEN_ARGS[@]}" "$woodpecker_src/web/pnpm-lock.yaml"
+pnpm-lock-export --schema yarn.lock@v1
+yarn_hash=$(prefetch-yarn-deps yarn.lock)
+
+# Use friendlier hashes
+src_hash=$(nix hash to-sri --type sha256 "$src_hash")
+vendorHash=$(nix hash to-sri --type sha256 "$vendorHash")
+yarn_hash=$(nix hash to-sri --type sha256 "$yarn_hash")
+
+sed -i -E -e "s#version = \".*\"#version = \"$version\"#" common.nix
+sed -i -E -e "s#srcHash = \".*\"#srcHash = \"$src_hash\"#" common.nix
+sed -i -E -e "s#vendorHash = \".*\"#vendorHash = \"$vendorHash\"#" common.nix
+sed -i -E -e "s#yarnHash = \".*\"#yarnHash = \"$yarn_hash\"#" common.nix
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/woodpecker-package.json b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/woodpecker-package.json
new file mode 100644
index 000000000000..b92624a01c27
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/woodpecker-package.json
@@ -0,0 +1,76 @@
+{
+  "name": "woodpecker-ci",
+  "author": "Woodpecker CI",
+  "version": "0.0.0",
+  "license": "Apache-2.0",
+  "engines": {
+    "node": ">=14"
+  },
+  "scripts": {
+    "start": "vite",
+    "build": "vite build --base=/BASE_PATH",
+    "serve": "vite preview",
+    "lint": "eslint --max-warnings 0 --ext .js,.ts,.vue,.json .",
+    "formatcheck": "prettier -c .",
+    "format:fix": "prettier --write .",
+    "typecheck": "vue-tsc --noEmit",
+    "test": "echo 'No tests configured' && exit 0"
+  },
+  "dependencies": {
+    "@intlify/unplugin-vue-i18n": "^0.10.1",
+    "@kyvg/vue3-notification": "^2.9.1",
+    "@vueuse/core": "^9.13.0",
+    "ansi_up": "^5.2.1",
+    "dayjs": "^1.11.9",
+    "floating-vue": "^2.0.0-beta.24",
+    "fuse.js": "^6.6.2",
+    "humanize-duration": "^3.28.0",
+    "javascript-time-ago": "^2.5.9",
+    "lodash": "^4.17.21",
+    "node-emoji": "^1.11.0",
+    "pinia": "^2.1.4",
+    "prismjs": "^1.29.0",
+    "vue": "^3.3.4",
+    "vue-i18n": "^9.2.2",
+    "vue-router": "^4.2.2"
+  },
+  "devDependencies": {
+    "@iconify/json": "^2.2.85",
+    "@types/humanize-duration": "^3.27.1",
+    "@types/javascript-time-ago": "^2.0.3",
+    "@types/lodash": "^4.14.195",
+    "@types/node": "^18.16.19",
+    "@types/node-emoji": "^1.8.2",
+    "@types/prismjs": "^1.26.0",
+    "@typescript-eslint/eslint-plugin": "^5.60.1",
+    "@typescript-eslint/parser": "^5.60.1",
+    "@vitejs/plugin-vue": "^4.2.3",
+    "@vue/compiler-sfc": "^3.3.4",
+    "eslint": "^8.44.0",
+    "eslint-config-airbnb-base": "^15.0.0",
+    "eslint-config-airbnb-typescript": "^17.0.0",
+    "eslint-config-prettier": "^8.8.0",
+    "eslint-plugin-import": "^2.27.5",
+    "eslint-plugin-prettier": "^4.2.1",
+    "eslint-plugin-promise": "^6.1.1",
+    "eslint-plugin-simple-import-sort": "^10.0.0",
+    "eslint-plugin-vue": "^9.15.1",
+    "eslint-plugin-vue-scoped-css": "^2.5.0",
+    "prettier": "^2.8.8",
+    "typescript": "5.0.3",
+    "unplugin-icons": "^0.16.3",
+    "unplugin-vue-components": "^0.24.1",
+    "vite": "^4.3.9",
+    "vite-plugin-prismjs": "^0.0.8",
+    "vite-plugin-windicss": "^1.9.0",
+    "vite-svg-loader": "^4.0.0",
+    "vue-eslint-parser": "^9.3.1",
+    "vue-tsc": "^1.8.3",
+    "windicss": "^3.5.6"
+  },
+  "pnpm": {
+    "overrides": {
+      "semver@<7.5.2": ">=7.5.2"
+    }
+  }
+}
diff --git a/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/yarn.lock b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/yarn.lock
new file mode 100644
index 000000000000..22790763a429
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/continuous-integration/woodpecker/yarn.lock
@@ -0,0 +1,3219 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@aashutoshrathi/word-wrap@1.2.6":
+  version "1.2.6"
+  resolved "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz"
+  integrity "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA=="
+
+"@ampproject/remapping@2.2.1":
+  version "2.2.1"
+  resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz"
+  integrity "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg=="
+  dependencies:
+    "@jridgewell/gen-mapping" "0.3.3"
+    "@jridgewell/trace-mapping" "0.3.18"
+
+"@antfu/install-pkg@0.1.1":
+  version "0.1.1"
+  resolved "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-0.1.1.tgz"
+  integrity "sha512-LyB/8+bSfa0DFGC06zpCEfs89/XoWZwws5ygEa5D+Xsm3OfI+aXQ86VgVG7Acyef+rSZ5HE7J8rrxzrQeM3PjQ=="
+  dependencies:
+    "execa" "5.1.1"
+    "find-up" "5.0.0"
+
+"@antfu/utils@0.7.4":
+  version "0.7.4"
+  resolved "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.4.tgz"
+  integrity "sha512-qe8Nmh9rYI/HIspLSTwtbMFPj6dISG6+dJnOguTlPNXtCvS2uezdxscVBb7/3DrmNbQK49TDqpkSQ1chbRGdpQ=="
+
+"@babel/code-frame@7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz"
+  integrity "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ=="
+  dependencies:
+    "@babel/highlight" "7.22.5"
+
+"@babel/compat-data@7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz"
+  integrity "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA=="
+
+"@babel/core@7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz"
+  integrity "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg=="
+  dependencies:
+    "@ampproject/remapping" "2.2.1"
+    "@babel/code-frame" "7.22.5"
+    "@babel/generator" "7.22.5"
+    "@babel/helper-compilation-targets" "7.22.5"
+    "@babel/helper-module-transforms" "7.22.5"
+    "@babel/helpers" "7.22.5"
+    "@babel/parser" "7.22.5"
+    "@babel/template" "7.22.5"
+    "@babel/traverse" "7.22.5"
+    "@babel/types" "7.22.5"
+    "convert-source-map" "1.9.0"
+    "debug" "4.3.4"
+    "gensync" "1.0.0-beta.2"
+    "json5" "2.2.3"
+    "semver" "7.5.3"
+
+"@babel/generator@7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz"
+  integrity "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA=="
+  dependencies:
+    "@babel/types" "7.22.5"
+    "@jridgewell/gen-mapping" "0.3.3"
+    "@jridgewell/trace-mapping" "0.3.18"
+    "jsesc" "2.5.2"
+
+"@babel/helper-compilation-targets@7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz"
+  integrity "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw=="
+  dependencies:
+    "@babel/compat-data" "7.22.5"
+    "@babel/core" "7.22.5"
+    "@babel/helper-validator-option" "7.22.5"
+    "browserslist" "4.21.9"
+    "lru-cache" "5.1.1"
+    "semver" "7.5.3"
+
+"@babel/helper-environment-visitor@7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz"
+  integrity "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q=="
+
+"@babel/helper-function-name@7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz"
+  integrity "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ=="
+  dependencies:
+    "@babel/template" "7.22.5"
+    "@babel/types" "7.22.5"
+
+"@babel/helper-hoist-variables@7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz"
+  integrity "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw=="
+  dependencies:
+    "@babel/types" "7.22.5"
+
+"@babel/helper-module-imports@7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz"
+  integrity "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg=="
+  dependencies:
+    "@babel/types" "7.22.5"
+
+"@babel/helper-module-transforms@7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz"
+  integrity "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw=="
+  dependencies:
+    "@babel/helper-environment-visitor" "7.22.5"
+    "@babel/helper-module-imports" "7.22.5"
+    "@babel/helper-simple-access" "7.22.5"
+    "@babel/helper-split-export-declaration" "7.22.5"
+    "@babel/helper-validator-identifier" "7.22.5"
+    "@babel/template" "7.22.5"
+    "@babel/traverse" "7.22.5"
+    "@babel/types" "7.22.5"
+
+"@babel/helper-simple-access@7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz"
+  integrity "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w=="
+  dependencies:
+    "@babel/types" "7.22.5"
+
+"@babel/helper-split-export-declaration@7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz"
+  integrity "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ=="
+  dependencies:
+    "@babel/types" "7.22.5"
+
+"@babel/helper-string-parser@7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz"
+  integrity "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw=="
+
+"@babel/helper-validator-identifier@7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz"
+  integrity "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ=="
+
+"@babel/helper-validator-option@7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz"
+  integrity "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw=="
+
+"@babel/helpers@7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz"
+  integrity "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q=="
+  dependencies:
+    "@babel/template" "7.22.5"
+    "@babel/traverse" "7.22.5"
+    "@babel/types" "7.22.5"
+
+"@babel/highlight@7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz"
+  integrity "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw=="
+  dependencies:
+    "@babel/helper-validator-identifier" "7.22.5"
+    "chalk" "2.4.2"
+    "js-tokens" "4.0.0"
+
+"@babel/parser@7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz"
+  integrity "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q=="
+  dependencies:
+    "@babel/types" "7.22.5"
+
+"@babel/template@7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz"
+  integrity "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw=="
+  dependencies:
+    "@babel/code-frame" "7.22.5"
+    "@babel/parser" "7.22.5"
+    "@babel/types" "7.22.5"
+
+"@babel/traverse@7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz"
+  integrity "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ=="
+  dependencies:
+    "@babel/code-frame" "7.22.5"
+    "@babel/generator" "7.22.5"
+    "@babel/helper-environment-visitor" "7.22.5"
+    "@babel/helper-function-name" "7.22.5"
+    "@babel/helper-hoist-variables" "7.22.5"
+    "@babel/helper-split-export-declaration" "7.22.5"
+    "@babel/parser" "7.22.5"
+    "@babel/types" "7.22.5"
+    "debug" "4.3.4"
+    "globals" "11.12.0"
+
+"@babel/types@7.22.5":
+  version "7.22.5"
+  resolved "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz"
+  integrity "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA=="
+  dependencies:
+    "@babel/helper-string-parser" "7.22.5"
+    "@babel/helper-validator-identifier" "7.22.5"
+    "to-fast-properties" "2.0.0"
+
+"@esbuild/android-arm64@0.17.19":
+  version "0.17.19"
+  resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz"
+  integrity "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA=="
+
+"@esbuild/android-arm@0.17.19":
+  version "0.17.19"
+  resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz"
+  integrity "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A=="
+
+"@esbuild/android-x64@0.17.19":
+  version "0.17.19"
+  resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz"
+  integrity "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww=="
+
+"@esbuild/darwin-arm64@0.17.19":
+  version "0.17.19"
+  resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz"
+  integrity "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg=="
+
+"@esbuild/darwin-x64@0.17.19":
+  version "0.17.19"
+  resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz"
+  integrity "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw=="
+
+"@esbuild/freebsd-arm64@0.17.19":
+  version "0.17.19"
+  resolved "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz"
+  integrity "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ=="
+
+"@esbuild/freebsd-x64@0.17.19":
+  version "0.17.19"
+  resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz"
+  integrity "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ=="
+
+"@esbuild/linux-arm64@0.17.19":
+  version "0.17.19"
+  resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz"
+  integrity "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg=="
+
+"@esbuild/linux-arm@0.17.19":
+  version "0.17.19"
+  resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz"
+  integrity "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA=="
+
+"@esbuild/linux-ia32@0.17.19":
+  version "0.17.19"
+  resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz"
+  integrity "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ=="
+
+"@esbuild/linux-loong64@0.17.19":
+  version "0.17.19"
+  resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz"
+  integrity "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ=="
+
+"@esbuild/linux-mips64el@0.17.19":
+  version "0.17.19"
+  resolved "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz"
+  integrity "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A=="
+
+"@esbuild/linux-ppc64@0.17.19":
+  version "0.17.19"
+  resolved "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz"
+  integrity "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg=="
+
+"@esbuild/linux-riscv64@0.17.19":
+  version "0.17.19"
+  resolved "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz"
+  integrity "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA=="
+
+"@esbuild/linux-s390x@0.17.19":
+  version "0.17.19"
+  resolved "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz"
+  integrity "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q=="
+
+"@esbuild/linux-x64@0.17.19":
+  version "0.17.19"
+  resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz"
+  integrity "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw=="
+
+"@esbuild/netbsd-x64@0.17.19":
+  version "0.17.19"
+  resolved "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz"
+  integrity "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q=="
+
+"@esbuild/openbsd-x64@0.17.19":
+  version "0.17.19"
+  resolved "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz"
+  integrity "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g=="
+
+"@esbuild/sunos-x64@0.17.19":
+  version "0.17.19"
+  resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz"
+  integrity "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg=="
+
+"@esbuild/win32-arm64@0.17.19":
+  version "0.17.19"
+  resolved "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz"
+  integrity "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag=="
+
+"@esbuild/win32-ia32@0.17.19":
+  version "0.17.19"
+  resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz"
+  integrity "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw=="
+
+"@esbuild/win32-x64@0.17.19":
+  version "0.17.19"
+  resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz"
+  integrity "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA=="
+
+"@eslint-community/eslint-utils@4.4.0":
+  version "4.4.0"
+  resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz"
+  integrity "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA=="
+  dependencies:
+    "eslint" "8.44.0"
+    "eslint-visitor-keys" "3.4.1"
+
+"@eslint-community/regexpp@4.5.1":
+  version "4.5.1"
+  resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz"
+  integrity "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ=="
+
+"@eslint/eslintrc@2.1.0":
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz"
+  integrity "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A=="
+  dependencies:
+    "ajv" "6.12.6"
+    "debug" "4.3.4"
+    "espree" "9.6.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"
+
+"@eslint/js@8.44.0":
+  version "8.44.0"
+  resolved "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz"
+  integrity "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw=="
+
+"@floating-ui/core@1.3.1":
+  version "1.3.1"
+  resolved "https://registry.npmjs.org/@floating-ui/core/-/core-1.3.1.tgz"
+  integrity "sha512-Bu+AMaXNjrpjh41znzHqaz3r2Nr8hHuHZT6V2LBKMhyMl0FgKA62PNYbqnfgmzOhoWZj70Zecisbo4H1rotP5g=="
+
+"@floating-ui/dom@1.1.1":
+  version "1.1.1"
+  resolved "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.1.1.tgz"
+  integrity "sha512-TpIO93+DIujg3g7SykEAGZMDtbJRrmnYRCNYSjJlvIbGhBjRSNTLVbNeDQBrzy9qDgUbiWdc7KA0uZHZ2tJmiw=="
+  dependencies:
+    "@floating-ui/core" "1.3.1"
+
+"@humanwhocodes/config-array@0.11.10":
+  version "0.11.10"
+  resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz"
+  integrity "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ=="
+  dependencies:
+    "@humanwhocodes/object-schema" "1.2.1"
+    "debug" "4.3.4"
+    "minimatch" "3.1.2"
+
+"@humanwhocodes/module-importer@1.0.1":
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz"
+  integrity "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="
+
+"@humanwhocodes/object-schema@1.2.1":
+  version "1.2.1"
+  resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz"
+  integrity "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA=="
+
+"@iconify/json@^2.2.85", "@iconify/json@2.2.85":
+  version "2.2.85"
+  resolved "https://registry.npmjs.org/@iconify/json/-/json-2.2.85.tgz"
+  integrity "sha512-T72zjZlpP311ftbdzpOFbRCictazlrX1xR8lLu3swVvFo22b/SZNBN4r0cv+e+eVNZvMxhF/cFww2fkaZ3m7Pg=="
+  dependencies:
+    "@iconify/types" "2.0.0"
+    "pathe" "1.1.1"
+
+"@iconify/types@2.0.0":
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz"
+  integrity "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="
+
+"@iconify/utils@2.1.7":
+  version "2.1.7"
+  resolved "https://registry.npmjs.org/@iconify/utils/-/utils-2.1.7.tgz"
+  integrity "sha512-P8S3z/L1LcV4Qem9AoCfVAaTFGySEMzFEY4CHZLkfRj0Fv9LiR+AwjDgrDrzyI93U2L2mg9JHsbTJ52mF8suNw=="
+  dependencies:
+    "@antfu/install-pkg" "0.1.1"
+    "@antfu/utils" "0.7.4"
+    "@iconify/types" "2.0.0"
+    "debug" "4.3.4"
+    "kolorist" "1.8.0"
+    "local-pkg" "0.4.3"
+
+"@intlify/bundle-utils@5.5.0":
+  version "5.5.0"
+  resolved "https://registry.npmjs.org/@intlify/bundle-utils/-/bundle-utils-5.5.0.tgz"
+  integrity "sha512-k5xe8oAoPXiH6unXvyyyCRbq+LtLn1tSi/6r5f6mF+MsX7mcOMtgYbyAQINsjFrf7EDu5Pg4BY00VWSt8bI9XQ=="
+  dependencies:
+    "@intlify/message-compiler" "9.3.0-beta.17"
+    "@intlify/shared" "9.3.0-beta.17"
+    "acorn" "8.9.0"
+    "escodegen" "2.1.0"
+    "estree-walker" "2.0.2"
+    "jsonc-eslint-parser" "1.4.1"
+    "magic-string" "0.30.0"
+    "source-map" "0.6.1"
+    "vue-i18n" "9.2.2"
+    "yaml-eslint-parser" "0.3.2"
+
+"@intlify/core-base@9.2.2":
+  version "9.2.2"
+  resolved "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.2.2.tgz"
+  integrity "sha512-JjUpQtNfn+joMbrXvpR4hTF8iJQ2sEFzzK3KIESOx+f+uwIjgw20igOyaIdhfsVVBCds8ZM64MoeNSx+PHQMkA=="
+  dependencies:
+    "@intlify/devtools-if" "9.2.2"
+    "@intlify/message-compiler" "9.2.2"
+    "@intlify/shared" "9.2.2"
+    "@intlify/vue-devtools" "9.2.2"
+
+"@intlify/devtools-if@9.2.2":
+  version "9.2.2"
+  resolved "https://registry.npmjs.org/@intlify/devtools-if/-/devtools-if-9.2.2.tgz"
+  integrity "sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg=="
+  dependencies:
+    "@intlify/shared" "9.2.2"
+
+"@intlify/message-compiler@9.2.2":
+  version "9.2.2"
+  resolved "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.2.2.tgz"
+  integrity "sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA=="
+  dependencies:
+    "@intlify/shared" "9.2.2"
+    "source-map" "0.6.1"
+
+"@intlify/message-compiler@9.3.0-beta.17":
+  version "9.3.0-beta.17"
+  resolved "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.3.0-beta.17.tgz"
+  integrity "sha512-i7hvVIRk1Ax2uKa9xLRJCT57to08OhFMhFXXjWN07rmx5pWQYQ23MfX1xgggv9drnWTNhqEiD+u4EJeHoS5+Ww=="
+  dependencies:
+    "@intlify/shared" "9.3.0-beta.17"
+    "source-map" "0.6.1"
+
+"@intlify/shared@9.2.2":
+  version "9.2.2"
+  resolved "https://registry.npmjs.org/@intlify/shared/-/shared-9.2.2.tgz"
+  integrity "sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q=="
+
+"@intlify/shared@9.3.0-beta.17":
+  version "9.3.0-beta.17"
+  resolved "https://registry.npmjs.org/@intlify/shared/-/shared-9.3.0-beta.17.tgz"
+  integrity "sha512-mscf7RQsUTOil35jTij4KGW1RC9SWQjYScwLxP53Ns6g24iEd5HN7ksbt9O6FvTmlQuX77u+MXpBdfJsGqizLQ=="
+
+"@intlify/unplugin-vue-i18n@^0.10.1", "@intlify/unplugin-vue-i18n@0.10.1":
+  version "0.10.1"
+  resolved "https://registry.npmjs.org/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-0.10.1.tgz"
+  integrity "sha512-9ZzE0ddlDO06Xzg25JPiNbx6PJPDho5k/Np+uL9fJRZEKq2TxT3c+ZK+Pec6j0ybhhVXeda8/yE3tPUf4SOXZQ=="
+  dependencies:
+    "@intlify/bundle-utils" "5.5.0"
+    "@intlify/shared" "9.3.0-beta.17"
+    "@rollup/pluginutils" "5.0.2"
+    "@vue/compiler-sfc" "3.3.4"
+    "debug" "4.3.4"
+    "fast-glob" "3.3.0"
+    "js-yaml" "4.1.0"
+    "json5" "2.2.3"
+    "pathe" "1.1.1"
+    "picocolors" "1.0.0"
+    "source-map" "0.6.1"
+    "unplugin" "1.3.1"
+    "vue-i18n" "9.2.2"
+
+"@intlify/vue-devtools@9.2.2":
+  version "9.2.2"
+  resolved "https://registry.npmjs.org/@intlify/vue-devtools/-/vue-devtools-9.2.2.tgz"
+  integrity "sha512-+dUyqyCHWHb/UcvY1MlIpO87munedm3Gn6E9WWYdWrMuYLcoIoOEVDWSS8xSwtlPU+kA+MEQTP6Q1iI/ocusJg=="
+  dependencies:
+    "@intlify/core-base" "9.2.2"
+    "@intlify/shared" "9.2.2"
+
+"@jridgewell/gen-mapping@0.3.3":
+  version "0.3.3"
+  resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz"
+  integrity "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ=="
+  dependencies:
+    "@jridgewell/set-array" "1.1.2"
+    "@jridgewell/sourcemap-codec" "1.4.15"
+    "@jridgewell/trace-mapping" "0.3.18"
+
+"@jridgewell/resolve-uri@3.1.0":
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz"
+  integrity "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w=="
+
+"@jridgewell/set-array@1.1.2":
+  version "1.1.2"
+  resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz"
+  integrity "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw=="
+
+"@jridgewell/sourcemap-codec@1.4.14":
+  version "1.4.14"
+  resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz"
+  integrity "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
+
+"@jridgewell/sourcemap-codec@1.4.15":
+  version "1.4.15"
+  resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz"
+  integrity "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
+
+"@jridgewell/trace-mapping@0.3.18":
+  version "0.3.18"
+  resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz"
+  integrity "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA=="
+  dependencies:
+    "@jridgewell/resolve-uri" "3.1.0"
+    "@jridgewell/sourcemap-codec" "1.4.14"
+
+"@kyvg/vue3-notification@^2.9.1", "@kyvg/vue3-notification@2.9.1":
+  version "2.9.1"
+  resolved "https://registry.npmjs.org/@kyvg/vue3-notification/-/vue3-notification-2.9.1.tgz"
+  integrity "sha512-FsY8g25tQetr3etnarxHtCeNFKssH8sheFu13LyL2JJmOOel437QqKV5n4RBDDDTIo55iKgIVYXeojliXYdEhw=="
+  dependencies:
+    "vue" "3.3.4"
+
+"@nodelib/fs.scandir@2.1.5":
+  version "2.1.5"
+  resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
+  integrity "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="
+  dependencies:
+    "@nodelib/fs.stat" "2.0.5"
+    "run-parallel" "1.2.0"
+
+"@nodelib/fs.stat@2.0.5":
+  version "2.0.5"
+  resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
+  integrity "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
+
+"@nodelib/fs.walk@1.2.8":
+  version "1.2.8"
+  resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz"
+  integrity "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="
+  dependencies:
+    "@nodelib/fs.scandir" "2.1.5"
+    "fastq" "1.15.0"
+
+"@rollup/pluginutils@5.0.2":
+  version "5.0.2"
+  resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz"
+  integrity "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA=="
+  dependencies:
+    "@types/estree" "1.0.1"
+    "estree-walker" "2.0.2"
+    "picomatch" "2.3.1"
+
+"@trysound/sax@0.2.0":
+  version "0.2.0"
+  resolved "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz"
+  integrity "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA=="
+
+"@types/estree@1.0.1":
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz"
+  integrity "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA=="
+
+"@types/humanize-duration@^3.27.1", "@types/humanize-duration@3.27.1":
+  version "3.27.1"
+  resolved "https://registry.npmjs.org/@types/humanize-duration/-/humanize-duration-3.27.1.tgz"
+  integrity "sha512-K3e+NZlpCKd6Bd/EIdqjFJRFHbrq5TzPPLwREk5Iv/YoIjQrs6ljdAUCo+Lb2xFlGNOjGSE0dqsVD19cZL137w=="
+
+"@types/javascript-time-ago@^2.0.3", "@types/javascript-time-ago@2.0.3":
+  version "2.0.3"
+  resolved "https://registry.npmjs.org/@types/javascript-time-ago/-/javascript-time-ago-2.0.3.tgz"
+  integrity "sha512-G6SdYh6gHxgCTU0s4cMIRHwRO4p3f7jQSZbDPfUOZpUAG1od3rTjT0e8rxGThUiTTWQHwpBRws8eHO8D2QqfkA=="
+
+"@types/json-schema@7.0.12":
+  version "7.0.12"
+  resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz"
+  integrity "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA=="
+
+"@types/json5@0.0.29":
+  version "0.0.29"
+  resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz"
+  integrity "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ=="
+
+"@types/lodash@^4.14.195", "@types/lodash@4.14.195":
+  version "4.14.195"
+  resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.195.tgz"
+  integrity "sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg=="
+
+"@types/node-emoji@^1.8.2", "@types/node-emoji@1.8.2":
+  version "1.8.2"
+  resolved "https://registry.npmjs.org/@types/node-emoji/-/node-emoji-1.8.2.tgz"
+  integrity "sha512-PfF1qL/9veo8BSHLV84C9ORNr3lHSlnWJ6yU8OdNufoftajeWHTLVbGHvp2B7e7DPDS9gMs6cfeSsqo5rqSitg=="
+
+"@types/node@^18.16.19", "@types/node@18.16.19":
+  version "18.16.19"
+  resolved "https://registry.npmjs.org/@types/node/-/node-18.16.19.tgz"
+  integrity "sha512-IXl7o+R9iti9eBW4Wg2hx1xQDig183jj7YLn8F7udNceyfkbn1ZxmzZXuak20gR40D7pIkIY1kYGx5VIGbaHKA=="
+
+"@types/prismjs@^1.26.0", "@types/prismjs@1.26.0":
+  version "1.26.0"
+  resolved "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.0.tgz"
+  integrity "sha512-ZTaqn/qSqUuAq1YwvOFQfVW1AR/oQJlLSZVustdjwI+GZ8kr0MSHBj0tsXPW1EqHubx50gtBEjbPGsdZwQwCjQ=="
+
+"@types/semver@7.5.0":
+  version "7.5.0"
+  resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz"
+  integrity "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw=="
+
+"@types/web-bluetooth@0.0.16":
+  version "0.0.16"
+  resolved "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz"
+  integrity "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ=="
+
+"@typescript-eslint/eslint-plugin@^5.60.1", "@typescript-eslint/eslint-plugin@5.60.1":
+  version "5.60.1"
+  resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.1.tgz"
+  integrity "sha512-KSWsVvsJsLJv3c4e73y/Bzt7OpqMCADUO846bHcuWYSYM19bldbAeDv7dYyV0jwkbMfJ2XdlzwjhXtuD7OY6bw=="
+  dependencies:
+    "@eslint-community/regexpp" "4.5.1"
+    "@typescript-eslint/parser" "5.60.1"
+    "@typescript-eslint/scope-manager" "5.60.1"
+    "@typescript-eslint/type-utils" "5.60.1"
+    "@typescript-eslint/utils" "5.60.1"
+    "debug" "4.3.4"
+    "eslint" "8.44.0"
+    "grapheme-splitter" "1.0.4"
+    "ignore" "5.2.4"
+    "natural-compare-lite" "1.4.0"
+    "semver" "7.5.3"
+    "tsutils" "3.21.0"
+    "typescript" "5.0.3"
+
+"@typescript-eslint/parser@^5.60.1", "@typescript-eslint/parser@5.60.1":
+  version "5.60.1"
+  resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.60.1.tgz"
+  integrity "sha512-pHWlc3alg2oSMGwsU/Is8hbm3XFbcrb6P5wIxcQW9NsYBfnrubl/GhVVD/Jm/t8HXhA2WncoIRfBtnCgRGV96Q=="
+  dependencies:
+    "@typescript-eslint/scope-manager" "5.60.1"
+    "@typescript-eslint/types" "5.60.1"
+    "@typescript-eslint/typescript-estree" "5.60.1"
+    "debug" "4.3.4"
+    "eslint" "8.44.0"
+    "typescript" "5.0.3"
+
+"@typescript-eslint/scope-manager@5.60.1":
+  version "5.60.1"
+  resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.60.1.tgz"
+  integrity "sha512-Dn/LnN7fEoRD+KspEOV0xDMynEmR3iSHdgNsarlXNLGGtcUok8L4N71dxUgt3YvlO8si7E+BJ5Fe3wb5yUw7DQ=="
+  dependencies:
+    "@typescript-eslint/types" "5.60.1"
+    "@typescript-eslint/visitor-keys" "5.60.1"
+
+"@typescript-eslint/type-utils@5.60.1":
+  version "5.60.1"
+  resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.60.1.tgz"
+  integrity "sha512-vN6UztYqIu05nu7JqwQGzQKUJctzs3/Hg7E2Yx8rz9J+4LgtIDFWjjl1gm3pycH0P3mHAcEUBd23LVgfrsTR8A=="
+  dependencies:
+    "@typescript-eslint/typescript-estree" "5.60.1"
+    "@typescript-eslint/utils" "5.60.1"
+    "debug" "4.3.4"
+    "eslint" "8.44.0"
+    "tsutils" "3.21.0"
+    "typescript" "5.0.3"
+
+"@typescript-eslint/types@5.60.1":
+  version "5.60.1"
+  resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.1.tgz"
+  integrity "sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg=="
+
+"@typescript-eslint/typescript-estree@5.60.1":
+  version "5.60.1"
+  resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.1.tgz"
+  integrity "sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw=="
+  dependencies:
+    "@typescript-eslint/types" "5.60.1"
+    "@typescript-eslint/visitor-keys" "5.60.1"
+    "debug" "4.3.4"
+    "globby" "11.1.0"
+    "is-glob" "4.0.3"
+    "semver" "7.5.3"
+    "tsutils" "3.21.0"
+    "typescript" "5.0.3"
+
+"@typescript-eslint/utils@5.60.1":
+  version "5.60.1"
+  resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.60.1.tgz"
+  integrity "sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ=="
+  dependencies:
+    "@eslint-community/eslint-utils" "4.4.0"
+    "@types/json-schema" "7.0.12"
+    "@types/semver" "7.5.0"
+    "@typescript-eslint/scope-manager" "5.60.1"
+    "@typescript-eslint/types" "5.60.1"
+    "@typescript-eslint/typescript-estree" "5.60.1"
+    "eslint" "8.44.0"
+    "eslint-scope" "5.1.1"
+    "semver" "7.5.3"
+
+"@typescript-eslint/visitor-keys@5.60.1":
+  version "5.60.1"
+  resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz"
+  integrity "sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw=="
+  dependencies:
+    "@typescript-eslint/types" "5.60.1"
+    "eslint-visitor-keys" "3.4.1"
+
+"@vitejs/plugin-vue@^4.2.3", "@vitejs/plugin-vue@4.2.3":
+  version "4.2.3"
+  resolved "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.2.3.tgz"
+  integrity "sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw=="
+  dependencies:
+    "vite" "4.3.9"
+    "vue" "3.3.4"
+
+"@volar/language-core@1.7.10":
+  version "1.7.10"
+  resolved "https://registry.npmjs.org/@volar/language-core/-/language-core-1.7.10.tgz"
+  integrity "sha512-18Gmth5M0UI3hDDqhZngjMnb6WCslcfglkOdepRIhGxRYe7xR7DRRzciisYDMZsvOQxDYme+uaohg0dKUxLV2Q=="
+  dependencies:
+    "@volar/source-map" "1.7.10"
+
+"@volar/source-map@1.7.10":
+  version "1.7.10"
+  resolved "https://registry.npmjs.org/@volar/source-map/-/source-map-1.7.10.tgz"
+  integrity "sha512-FBpLEOKJpRxeh2nYbw1mTI5sZOPXYU8LlsCz6xuBY3yNtAizDTTIZtBHe1V8BaMpoSMgRysZe4gVxMEi3rDGVA=="
+  dependencies:
+    "muggle-string" "0.3.1"
+
+"@volar/typescript@1.7.10":
+  version "1.7.10"
+  resolved "https://registry.npmjs.org/@volar/typescript/-/typescript-1.7.10.tgz"
+  integrity "sha512-yqIov4wndLU3GE1iE25bU5W6T+P+exPePcE1dFPPBKzQIBki1KvmdQN5jBlJp3Wo+wp7UIxa/RsdNkXT+iFBjg=="
+  dependencies:
+    "@volar/language-core" "1.7.10"
+
+"@vue/compiler-core@3.3.4":
+  version "3.3.4"
+  resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz"
+  integrity "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g=="
+  dependencies:
+    "@babel/parser" "7.22.5"
+    "@vue/shared" "3.3.4"
+    "estree-walker" "2.0.2"
+    "source-map-js" "1.0.2"
+
+"@vue/compiler-dom@3.3.4":
+  version "3.3.4"
+  resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz"
+  integrity "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w=="
+  dependencies:
+    "@vue/compiler-core" "3.3.4"
+    "@vue/shared" "3.3.4"
+
+"@vue/compiler-sfc@^3.3.4", "@vue/compiler-sfc@3.3.4":
+  version "3.3.4"
+  resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz"
+  integrity "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ=="
+  dependencies:
+    "@babel/parser" "7.22.5"
+    "@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.24"
+    "source-map-js" "1.0.2"
+
+"@vue/compiler-ssr@3.3.4":
+  version "3.3.4"
+  resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz"
+  integrity "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ=="
+  dependencies:
+    "@vue/compiler-dom" "3.3.4"
+    "@vue/shared" "3.3.4"
+
+"@vue/devtools-api@6.5.0":
+  version "6.5.0"
+  resolved "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz"
+  integrity "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q=="
+
+"@vue/language-core@1.8.3":
+  version "1.8.3"
+  resolved "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.3.tgz"
+  integrity "sha512-AzhvMYoQkK/tg8CpAAttO19kx1zjS3+weYIr2AhlH/M5HebVzfftQoq4jZNFifjq+hyLKi8j9FiDMS8oqA89+A=="
+  dependencies:
+    "@volar/language-core" "1.7.10"
+    "@volar/source-map" "1.7.10"
+    "@vue/compiler-dom" "3.3.4"
+    "@vue/reactivity" "3.3.4"
+    "@vue/shared" "3.3.4"
+    "minimatch" "9.0.2"
+    "muggle-string" "0.3.1"
+    "typescript" "5.0.3"
+    "vue-template-compiler" "2.7.14"
+
+"@vue/reactivity-transform@3.3.4":
+  version "3.3.4"
+  resolved "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz"
+  integrity "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw=="
+  dependencies:
+    "@babel/parser" "7.22.5"
+    "@vue/compiler-core" "3.3.4"
+    "@vue/shared" "3.3.4"
+    "estree-walker" "2.0.2"
+    "magic-string" "0.30.0"
+
+"@vue/reactivity@3.3.4":
+  version "3.3.4"
+  resolved "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz"
+  integrity "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ=="
+  dependencies:
+    "@vue/shared" "3.3.4"
+
+"@vue/runtime-core@3.3.4":
+  version "3.3.4"
+  resolved "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz"
+  integrity "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA=="
+  dependencies:
+    "@vue/reactivity" "3.3.4"
+    "@vue/shared" "3.3.4"
+
+"@vue/runtime-dom@3.3.4":
+  version "3.3.4"
+  resolved "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz"
+  integrity "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ=="
+  dependencies:
+    "@vue/runtime-core" "3.3.4"
+    "@vue/shared" "3.3.4"
+    "csstype" "3.1.2"
+
+"@vue/server-renderer@3.3.4":
+  version "3.3.4"
+  resolved "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz"
+  integrity "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ=="
+  dependencies:
+    "@vue/compiler-ssr" "3.3.4"
+    "@vue/shared" "3.3.4"
+    "vue" "3.3.4"
+
+"@vue/shared@3.3.4":
+  version "3.3.4"
+  resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz"
+  integrity "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ=="
+
+"@vue/typescript@1.8.3":
+  version "1.8.3"
+  resolved "https://registry.npmjs.org/@vue/typescript/-/typescript-1.8.3.tgz"
+  integrity "sha512-6bdgSnIFpRYHlt70pHmnmNksPU00bfXgqAISeaNz3W6d2cH0OTfH8h/IhligQ82sJIhsuyfftQJ5518ZuKIhtA=="
+  dependencies:
+    "@volar/typescript" "1.7.10"
+    "@vue/language-core" "1.8.3"
+
+"@vueuse/core@^9.13.0", "@vueuse/core@9.13.0":
+  version "9.13.0"
+  resolved "https://registry.npmjs.org/@vueuse/core/-/core-9.13.0.tgz"
+  integrity "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw=="
+  dependencies:
+    "@types/web-bluetooth" "0.0.16"
+    "@vueuse/metadata" "9.13.0"
+    "@vueuse/shared" "9.13.0"
+    "vue-demi" "0.14.5"
+
+"@vueuse/metadata@9.13.0":
+  version "9.13.0"
+  resolved "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.13.0.tgz"
+  integrity "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ=="
+
+"@vueuse/shared@9.13.0":
+  version "9.13.0"
+  resolved "https://registry.npmjs.org/@vueuse/shared/-/shared-9.13.0.tgz"
+  integrity "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw=="
+  dependencies:
+    "vue-demi" "0.14.5"
+
+"@windicss/config@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.npmjs.org/@windicss/config/-/config-1.9.0.tgz"
+  integrity "sha512-QO4+udbmDIgZwAi89tqUt5nGwBq3IgyELjLn83twZXiIqzOw+77ecCuM0oPSbzWmIbCqXq3wRQHd6Z1u5E/5zQ=="
+  dependencies:
+    "debug" "4.3.4"
+    "jiti" "1.18.2"
+    "windicss" "3.5.6"
+
+"@windicss/plugin-utils@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.npmjs.org/@windicss/plugin-utils/-/plugin-utils-1.9.0.tgz"
+  integrity "sha512-omAacM5ExIr9XBUI2z47CyCXJBke4imJZqXW41YgHhRLbahTngbScFk5yxa6dXivDXUpUKqasOPXBJgA4bhHCg=="
+  dependencies:
+    "@antfu/utils" "0.7.4"
+    "@windicss/config" "1.9.0"
+    "debug" "4.3.4"
+    "fast-glob" "3.3.0"
+    "magic-string" "0.30.0"
+    "micromatch" "4.0.5"
+    "windicss" "3.5.6"
+
+"acorn-jsx@5.3.2":
+  version "5.3.2"
+  resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
+  integrity "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="
+  dependencies:
+    "acorn" "8.9.0"
+
+"acorn@7.4.1":
+  version "7.4.1"
+  resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz"
+  integrity "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
+
+"acorn@8.9.0":
+  version "8.9.0"
+  resolved "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz"
+  integrity "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ=="
+
+"ajv@6.12.6":
+  version "6.12.6"
+  resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"
+  integrity "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="
+  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"
+
+"ansi-regex@5.0.1":
+  version "5.0.1"
+  resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz"
+  integrity "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
+
+"ansi-styles@3.2.1":
+  version "3.2.1"
+  resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz"
+  integrity "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="
+  dependencies:
+    "color-convert" "1.9.3"
+
+"ansi-styles@4.3.0":
+  version "4.3.0"
+  resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
+  integrity "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="
+  dependencies:
+    "color-convert" "2.0.1"
+
+"ansi_up@^5.2.1", "ansi_up@5.2.1":
+  version "5.2.1"
+  resolved "https://registry.npmjs.org/ansi_up/-/ansi_up-5.2.1.tgz"
+  integrity "sha512-5bz5T/7FRmlxA37zDXhG6cAwlcZtfnmNLDJra66EEIT3kYlw5aPJdbkJEhm59D6kA4Wi5ict6u6IDYHJaQlH+g=="
+
+"anymatch@3.1.3":
+  version "3.1.3"
+  resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz"
+  integrity "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="
+  dependencies:
+    "normalize-path" "3.0.0"
+    "picomatch" "2.3.1"
+
+"argparse@2.0.1":
+  version "2.0.1"
+  resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz"
+  integrity "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+
+"array-buffer-byte-length@1.0.0":
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz"
+  integrity "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A=="
+  dependencies:
+    "call-bind" "1.0.2"
+    "is-array-buffer" "3.0.2"
+
+"array-includes@3.1.6":
+  version "3.1.6"
+  resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz"
+  integrity "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw=="
+  dependencies:
+    "call-bind" "1.0.2"
+    "define-properties" "1.2.0"
+    "es-abstract" "1.21.2"
+    "get-intrinsic" "1.2.1"
+    "is-string" "1.0.7"
+
+"array-union@2.1.0":
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz"
+  integrity "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="
+
+"array.prototype.flat@1.3.1":
+  version "1.3.1"
+  resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz"
+  integrity "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA=="
+  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":
+  version "1.3.1"
+  resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz"
+  integrity "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ=="
+  dependencies:
+    "call-bind" "1.0.2"
+    "define-properties" "1.2.0"
+    "es-abstract" "1.21.2"
+    "es-shim-unscopables" "1.0.0"
+
+"atob@2.1.2":
+  version "2.1.2"
+  resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz"
+  integrity "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
+
+"available-typed-arrays@1.0.5":
+  version "1.0.5"
+  resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz"
+  integrity "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw=="
+
+"babel-plugin-prismjs@2.1.0":
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/babel-plugin-prismjs/-/babel-plugin-prismjs-2.1.0.tgz"
+  integrity "sha512-ehzSKYfeAz4U78zi/sfwsjDPlq0LvDKxNefcZTJ/iKBu+plsHsLqZhUeGf1+82LAcA35UZGbU6ksEx2Utphc/g=="
+  dependencies:
+    "prismjs" "1.29.0"
+
+"balanced-match@1.0.2":
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz"
+  integrity "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+
+"binary-extensions@2.2.0":
+  version "2.2.0"
+  resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz"
+  integrity "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
+
+"boolbase@1.0.0":
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz"
+  integrity "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
+
+"brace-expansion@1.1.11":
+  version "1.1.11"
+  resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz"
+  integrity "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="
+  dependencies:
+    "balanced-match" "1.0.2"
+    "concat-map" "0.0.1"
+
+"brace-expansion@2.0.1":
+  version "2.0.1"
+  resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz"
+  integrity "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="
+  dependencies:
+    "balanced-match" "1.0.2"
+
+"braces@3.0.2":
+  version "3.0.2"
+  resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz"
+  integrity "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A=="
+  dependencies:
+    "fill-range" "7.0.1"
+
+"browserslist@4.21.9":
+  version "4.21.9"
+  resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz"
+  integrity "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg=="
+  dependencies:
+    "caniuse-lite" "1.0.30001509"
+    "electron-to-chromium" "1.4.447"
+    "node-releases" "2.0.12"
+    "update-browserslist-db" "1.0.11"
+
+"call-bind@1.0.2":
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz"
+  integrity "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA=="
+  dependencies:
+    "function-bind" "1.1.1"
+    "get-intrinsic" "1.2.1"
+
+"callsites@3.1.0":
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz"
+  integrity "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
+
+"caniuse-lite@1.0.30001509":
+  version "1.0.30001509"
+  resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz"
+  integrity "sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA=="
+
+"chalk@2.4.2":
+  version "2.4.2"
+  resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz"
+  integrity "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="
+  dependencies:
+    "ansi-styles" "3.2.1"
+    "escape-string-regexp" "1.0.5"
+    "supports-color" "5.5.0"
+
+"chalk@4.1.2":
+  version "4.1.2"
+  resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"
+  integrity "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="
+  dependencies:
+    "ansi-styles" "4.3.0"
+    "supports-color" "7.2.0"
+
+"chokidar@3.5.3":
+  version "3.5.3"
+  resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz"
+  integrity "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw=="
+  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"
+
+"color-convert@1.9.3":
+  version "1.9.3"
+  resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz"
+  integrity "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="
+  dependencies:
+    "color-name" "1.1.3"
+
+"color-convert@2.0.1":
+  version "2.0.1"
+  resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz"
+  integrity "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="
+  dependencies:
+    "color-name" "1.1.4"
+
+"color-name@1.1.3":
+  version "1.1.3"
+  resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
+  integrity "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
+
+"color-name@1.1.4":
+  version "1.1.4"
+  resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
+  integrity "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+
+"commander@7.2.0":
+  version "7.2.0"
+  resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz"
+  integrity "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="
+
+"concat-map@0.0.1":
+  version "0.0.1"
+  resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
+  integrity "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+
+"confusing-browser-globals@1.0.11":
+  version "1.0.11"
+  resolved "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz"
+  integrity "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA=="
+
+"convert-source-map@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz"
+  integrity "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
+
+"cross-spawn@7.0.3":
+  version "7.0.3"
+  resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz"
+  integrity "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w=="
+  dependencies:
+    "path-key" "3.1.1"
+    "shebang-command" "2.0.0"
+    "which" "2.0.2"
+
+"css-select@5.1.0":
+  version "5.1.0"
+  resolved "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz"
+  integrity "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg=="
+  dependencies:
+    "boolbase" "1.0.0"
+    "css-what" "6.1.0"
+    "domhandler" "5.0.3"
+    "domutils" "3.1.0"
+    "nth-check" "2.1.1"
+
+"css-tree@2.2.1":
+  version "2.2.1"
+  resolved "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz"
+  integrity "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA=="
+  dependencies:
+    "mdn-data" "2.0.28"
+    "source-map-js" "1.0.2"
+
+"css-tree@2.3.1":
+  version "2.3.1"
+  resolved "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz"
+  integrity "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw=="
+  dependencies:
+    "mdn-data" "2.0.30"
+    "source-map-js" "1.0.2"
+
+"css-what@6.1.0":
+  version "6.1.0"
+  resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz"
+  integrity "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw=="
+
+"css@3.0.0":
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/css/-/css-3.0.0.tgz"
+  integrity "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ=="
+  dependencies:
+    "inherits" "2.0.4"
+    "source-map" "0.6.1"
+    "source-map-resolve" "0.6.0"
+
+"cssesc@3.0.0":
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz"
+  integrity "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
+
+"csso@5.0.5":
+  version "5.0.5"
+  resolved "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz"
+  integrity "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ=="
+  dependencies:
+    "css-tree" "2.2.1"
+
+"csstype@3.1.2":
+  version "3.1.2"
+  resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz"
+  integrity "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
+
+"dayjs@^1.11.9", "dayjs@1.11.9":
+  version "1.11.9"
+  resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz"
+  integrity "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA=="
+
+"de-indent@1.0.2":
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz"
+  integrity "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg=="
+
+"debug@3.2.7":
+  version "3.2.7"
+  resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz"
+  integrity "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="
+  dependencies:
+    "ms" "2.1.3"
+
+"debug@4.3.4":
+  version "4.3.4"
+  resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz"
+  integrity "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ=="
+  dependencies:
+    "ms" "2.1.2"
+
+"decode-uri-component@0.2.2":
+  version "0.2.2"
+  resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz"
+  integrity "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ=="
+
+"deep-is@0.1.4":
+  version "0.1.4"
+  resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz"
+  integrity "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
+
+"define-properties@1.2.0":
+  version "1.2.0"
+  resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz"
+  integrity "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA=="
+  dependencies:
+    "has-property-descriptors" "1.0.0"
+    "object-keys" "1.1.1"
+
+"dir-glob@3.0.1":
+  version "3.0.1"
+  resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz"
+  integrity "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="
+  dependencies:
+    "path-type" "4.0.0"
+
+"doctrine@2.1.0":
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz"
+  integrity "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw=="
+  dependencies:
+    "esutils" "2.0.3"
+
+"doctrine@3.0.0":
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz"
+  integrity "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w=="
+  dependencies:
+    "esutils" "2.0.3"
+
+"dom-serializer@2.0.0":
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz"
+  integrity "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="
+  dependencies:
+    "domelementtype" "2.3.0"
+    "domhandler" "5.0.3"
+    "entities" "4.5.0"
+
+"domelementtype@2.3.0":
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz"
+  integrity "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="
+
+"domhandler@5.0.3":
+  version "5.0.3"
+  resolved "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz"
+  integrity "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="
+  dependencies:
+    "domelementtype" "2.3.0"
+
+"domutils@3.1.0":
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz"
+  integrity "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA=="
+  dependencies:
+    "dom-serializer" "2.0.0"
+    "domelementtype" "2.3.0"
+    "domhandler" "5.0.3"
+
+"electron-to-chromium@1.4.447":
+  version "1.4.447"
+  resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.447.tgz"
+  integrity "sha512-sxX0LXh+uL41hSJsujAN86PjhrV/6c79XmpY0TvjZStV6VxIgarf8SRkUoUTuYmFcZQTemsoqo8qXOGw5npWfw=="
+
+"entities@4.5.0":
+  version "4.5.0"
+  resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz"
+  integrity "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="
+
+"es-abstract@1.21.2":
+  version "1.21.2"
+  resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz"
+  integrity "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg=="
+  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.5.0"
+    "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-set-tostringtag@2.0.1":
+  version "2.0.1"
+  resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz"
+  integrity "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg=="
+  dependencies:
+    "get-intrinsic" "1.2.1"
+    "has" "1.0.3"
+    "has-tostringtag" "1.0.0"
+
+"es-shim-unscopables@1.0.0":
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz"
+  integrity "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w=="
+  dependencies:
+    "has" "1.0.3"
+
+"es-to-primitive@1.2.1":
+  version "1.2.1"
+  resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz"
+  integrity "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA=="
+  dependencies:
+    "is-callable" "1.2.7"
+    "is-date-object" "1.0.5"
+    "is-symbol" "1.0.4"
+
+"esbuild@0.17.19":
+  version "0.17.19"
+  resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz"
+  integrity "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw=="
+
+"escalade@3.1.1":
+  version "3.1.1"
+  resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz"
+  integrity "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
+
+"escape-string-regexp@1.0.5":
+  version "1.0.5"
+  resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
+  integrity "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="
+
+"escape-string-regexp@4.0.0":
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz"
+  integrity "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
+
+"escodegen@2.1.0":
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz"
+  integrity "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w=="
+  dependencies:
+    "esprima" "4.0.1"
+    "estraverse" "5.3.0"
+    "esutils" "2.0.3"
+
+"eslint-config-airbnb-base@^15.0.0", "eslint-config-airbnb-base@15.0.0":
+  version "15.0.0"
+  resolved "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz"
+  integrity "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig=="
+  dependencies:
+    "confusing-browser-globals" "1.0.11"
+    "eslint" "8.44.0"
+    "eslint-plugin-import" "2.27.5"
+    "object.assign" "4.1.4"
+    "object.entries" "1.1.6"
+    "semver" "7.5.3"
+
+"eslint-config-airbnb-typescript@^17.0.0", "eslint-config-airbnb-typescript@17.0.0":
+  version "17.0.0"
+  resolved "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.0.0.tgz"
+  integrity "sha512-elNiuzD0kPAPTXjFWg+lE24nMdHMtuxgYoD30OyMD6yrW1AhFZPAg27VX7d3tzOErw+dgJTNWfRSDqEcXb4V0g=="
+  dependencies:
+    "@typescript-eslint/eslint-plugin" "5.60.1"
+    "@typescript-eslint/parser" "5.60.1"
+    "eslint" "8.44.0"
+    "eslint-config-airbnb-base" "15.0.0"
+    "eslint-plugin-import" "2.27.5"
+
+"eslint-config-prettier@^8.8.0", "eslint-config-prettier@8.8.0":
+  version "8.8.0"
+  resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz"
+  integrity "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA=="
+  dependencies:
+    "eslint" "8.44.0"
+
+"eslint-import-resolver-node@0.3.7":
+  version "0.3.7"
+  resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz"
+  integrity "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA=="
+  dependencies:
+    "debug" "3.2.7"
+    "is-core-module" "2.12.1"
+    "resolve" "1.22.2"
+
+"eslint-module-utils@2.8.0":
+  version "2.8.0"
+  resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz"
+  integrity "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw=="
+  dependencies:
+    "@typescript-eslint/parser" "5.60.1"
+    "debug" "3.2.7"
+    "eslint" "8.44.0"
+    "eslint-import-resolver-node" "0.3.7"
+
+"eslint-plugin-import@^2.27.5", "eslint-plugin-import@2.27.5":
+  version "2.27.5"
+  resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz"
+  integrity "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow=="
+  dependencies:
+    "@typescript-eslint/parser" "5.60.1"
+    "array-includes" "3.1.6"
+    "array.prototype.flat" "1.3.1"
+    "array.prototype.flatmap" "1.3.1"
+    "debug" "3.2.7"
+    "doctrine" "2.1.0"
+    "eslint" "8.44.0"
+    "eslint-import-resolver-node" "0.3.7"
+    "eslint-module-utils" "2.8.0"
+    "has" "1.0.3"
+    "is-core-module" "2.12.1"
+    "is-glob" "4.0.3"
+    "minimatch" "3.1.2"
+    "object.values" "1.1.6"
+    "resolve" "1.22.2"
+    "semver" "7.5.3"
+    "tsconfig-paths" "3.14.2"
+
+"eslint-plugin-prettier@^4.2.1", "eslint-plugin-prettier@4.2.1":
+  version "4.2.1"
+  resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz"
+  integrity "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ=="
+  dependencies:
+    "eslint" "8.44.0"
+    "eslint-config-prettier" "8.8.0"
+    "prettier" "2.8.8"
+    "prettier-linter-helpers" "1.0.0"
+
+"eslint-plugin-promise@^6.1.1", "eslint-plugin-promise@6.1.1":
+  version "6.1.1"
+  resolved "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz"
+  integrity "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig=="
+  dependencies:
+    "eslint" "8.44.0"
+
+"eslint-plugin-simple-import-sort@^10.0.0", "eslint-plugin-simple-import-sort@10.0.0":
+  version "10.0.0"
+  resolved "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-10.0.0.tgz"
+  integrity "sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw=="
+  dependencies:
+    "eslint" "8.44.0"
+
+"eslint-plugin-vue-scoped-css@^2.5.0", "eslint-plugin-vue-scoped-css@2.5.0":
+  version "2.5.0"
+  resolved "https://registry.npmjs.org/eslint-plugin-vue-scoped-css/-/eslint-plugin-vue-scoped-css-2.5.0.tgz"
+  integrity "sha512-vR+raYNE1aQ69lS1lZGiKoz8rXFI3MWf2fxrfns/XCQ0XT5sIguhDtQS+9JmUQJClenLDEe2CQx7P+eeSdF4cA=="
+  dependencies:
+    "eslint" "8.44.0"
+    "eslint-utils" "3.0.0"
+    "lodash" "4.17.21"
+    "postcss" "8.4.24"
+    "postcss-safe-parser" "6.0.0"
+    "postcss-scss" "4.0.6"
+    "postcss-selector-parser" "6.0.13"
+    "postcss-styl" "0.12.3"
+    "vue-eslint-parser" "9.3.1"
+
+"eslint-plugin-vue@^9.15.1", "eslint-plugin-vue@9.15.1":
+  version "9.15.1"
+  resolved "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.15.1.tgz"
+  integrity "sha512-CJE/oZOslvmAR9hf8SClTdQ9JLweghT6JCBQNrT2Iel1uVw0W0OLJxzvPd6CxmABKCvLrtyDnqGV37O7KQv6+A=="
+  dependencies:
+    "@eslint-community/eslint-utils" "4.4.0"
+    "eslint" "8.44.0"
+    "natural-compare" "1.4.0"
+    "nth-check" "2.1.1"
+    "postcss-selector-parser" "6.0.13"
+    "semver" "7.5.3"
+    "vue-eslint-parser" "9.3.1"
+    "xml-name-validator" "4.0.0"
+
+"eslint-scope@5.1.1":
+  version "5.1.1"
+  resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz"
+  integrity "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw=="
+  dependencies:
+    "esrecurse" "4.3.0"
+    "estraverse" "4.3.0"
+
+"eslint-scope@7.2.0":
+  version "7.2.0"
+  resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz"
+  integrity "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw=="
+  dependencies:
+    "esrecurse" "4.3.0"
+    "estraverse" "5.3.0"
+
+"eslint-utils@2.1.0":
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz"
+  integrity "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg=="
+  dependencies:
+    "eslint-visitor-keys" "1.3.0"
+
+"eslint-utils@3.0.0":
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz"
+  integrity "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA=="
+  dependencies:
+    "eslint" "8.44.0"
+    "eslint-visitor-keys" "2.1.0"
+
+"eslint-visitor-keys@1.3.0":
+  version "1.3.0"
+  resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz"
+  integrity "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ=="
+
+"eslint-visitor-keys@2.1.0":
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz"
+  integrity "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw=="
+
+"eslint-visitor-keys@3.4.1":
+  version "3.4.1"
+  resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz"
+  integrity "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA=="
+
+"eslint@^8.44.0", "eslint@8.44.0":
+  version "8.44.0"
+  resolved "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz"
+  integrity "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A=="
+  dependencies:
+    "@eslint-community/eslint-utils" "4.4.0"
+    "@eslint-community/regexpp" "4.5.1"
+    "@eslint/eslintrc" "2.1.0"
+    "@eslint/js" "8.44.0"
+    "@humanwhocodes/config-array" "0.11.10"
+    "@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"
+    "doctrine" "3.0.0"
+    "escape-string-regexp" "4.0.0"
+    "eslint-scope" "7.2.0"
+    "eslint-visitor-keys" "3.4.1"
+    "espree" "9.6.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"
+    "graphemer" "1.4.0"
+    "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-yaml" "4.1.0"
+    "json-stable-stringify-without-jsonify" "1.0.1"
+    "levn" "0.4.1"
+    "lodash.merge" "4.6.2"
+    "minimatch" "3.1.2"
+    "natural-compare" "1.4.0"
+    "optionator" "0.9.3"
+    "strip-ansi" "6.0.1"
+    "strip-json-comments" "3.1.1"
+    "text-table" "0.2.0"
+
+"espree@6.2.1":
+  version "6.2.1"
+  resolved "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz"
+  integrity "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw=="
+  dependencies:
+    "acorn" "7.4.1"
+    "acorn-jsx" "5.3.2"
+    "eslint-visitor-keys" "1.3.0"
+
+"espree@9.6.0":
+  version "9.6.0"
+  resolved "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz"
+  integrity "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A=="
+  dependencies:
+    "acorn" "8.9.0"
+    "acorn-jsx" "5.3.2"
+    "eslint-visitor-keys" "3.4.1"
+
+"esprima@4.0.1":
+  version "4.0.1"
+  resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz"
+  integrity "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+
+"esquery@1.5.0":
+  version "1.5.0"
+  resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz"
+  integrity "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg=="
+  dependencies:
+    "estraverse" "5.3.0"
+
+"esrecurse@4.3.0":
+  version "4.3.0"
+  resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz"
+  integrity "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="
+  dependencies:
+    "estraverse" "5.3.0"
+
+"estraverse@4.3.0":
+  version "4.3.0"
+  resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz"
+  integrity "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="
+
+"estraverse@5.3.0":
+  version "5.3.0"
+  resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz"
+  integrity "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="
+
+"estree-walker@2.0.2":
+  version "2.0.2"
+  resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz"
+  integrity "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
+
+"esutils@2.0.3":
+  version "2.0.3"
+  resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz"
+  integrity "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
+
+"execa@5.1.1":
+  version "5.1.1"
+  resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz"
+  integrity "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="
+  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"
+
+"fast-deep-equal@3.1.3":
+  version "3.1.3"
+  resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
+  integrity "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+
+"fast-diff@1.3.0":
+  version "1.3.0"
+  resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz"
+  integrity "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw=="
+
+"fast-glob@3.3.0":
+  version "3.3.0"
+  resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz"
+  integrity "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA=="
+  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":
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"
+  integrity "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+
+"fast-levenshtein@2.0.6":
+  version "2.0.6"
+  resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"
+  integrity "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="
+
+"fastq@1.15.0":
+  version "1.15.0"
+  resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz"
+  integrity "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw=="
+  dependencies:
+    "reusify" "1.0.4"
+
+"file-entry-cache@6.0.1":
+  version "6.0.1"
+  resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz"
+  integrity "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg=="
+  dependencies:
+    "flat-cache" "3.0.4"
+
+"fill-range@7.0.1":
+  version "7.0.1"
+  resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz"
+  integrity "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ=="
+  dependencies:
+    "to-regex-range" "5.0.1"
+
+"find-up@5.0.0":
+  version "5.0.0"
+  resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz"
+  integrity "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="
+  dependencies:
+    "locate-path" "6.0.0"
+    "path-exists" "4.0.0"
+
+"flat-cache@3.0.4":
+  version "3.0.4"
+  resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz"
+  integrity "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg=="
+  dependencies:
+    "flatted" "3.2.7"
+    "rimraf" "3.0.2"
+
+"flatted@3.2.7":
+  version "3.2.7"
+  resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz"
+  integrity "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ=="
+
+"floating-vue@^2.0.0-beta.24", "floating-vue@2.0.0-beta.24":
+  version "2.0.0-beta.24"
+  resolved "https://registry.npmjs.org/floating-vue/-/floating-vue-2.0.0-beta.24.tgz"
+  integrity "sha512-URSzP6YXaF4u1oZ9XGL8Sn8puuM7ivp5jkOUrpy5Q1mfo9BfGppJOn+ierTmsSUfJEeHBae8KT7r5DeI3vQIEw=="
+  dependencies:
+    "@floating-ui/dom" "1.1.1"
+    "vue" "3.3.4"
+    "vue-resize" "2.0.0-alpha.1"
+
+"for-each@0.3.3":
+  version "0.3.3"
+  resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz"
+  integrity "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw=="
+  dependencies:
+    "is-callable" "1.2.7"
+
+"fs.realpath@1.0.0":
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"
+  integrity "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+
+"fsevents@2.3.2":
+  version "2.3.2"
+  resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz"
+  integrity "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="
+
+"function-bind@1.1.1":
+  version "1.1.1"
+  resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz"
+  integrity "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+
+"function.prototype.name@1.1.5":
+  version "1.1.5"
+  resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz"
+  integrity "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA=="
+  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":
+  version "1.2.3"
+  resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz"
+  integrity "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="
+
+"fuse.js@^6.6.2", "fuse.js@6.6.2":
+  version "6.6.2"
+  resolved "https://registry.npmjs.org/fuse.js/-/fuse.js-6.6.2.tgz"
+  integrity "sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA=="
+
+"gensync@1.0.0-beta.2":
+  version "1.0.0-beta.2"
+  resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz"
+  integrity "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="
+
+"get-intrinsic@1.2.1":
+  version "1.2.1"
+  resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz"
+  integrity "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw=="
+  dependencies:
+    "function-bind" "1.1.1"
+    "has" "1.0.3"
+    "has-proto" "1.0.1"
+    "has-symbols" "1.0.3"
+
+"get-stream@6.0.1":
+  version "6.0.1"
+  resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz"
+  integrity "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="
+
+"get-symbol-description@1.0.0":
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz"
+  integrity "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw=="
+  dependencies:
+    "call-bind" "1.0.2"
+    "get-intrinsic" "1.2.1"
+
+"glob-parent@5.1.2":
+  version "5.1.2"
+  resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
+  integrity "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="
+  dependencies:
+    "is-glob" "4.0.3"
+
+"glob-parent@6.0.2":
+  version "6.0.2"
+  resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz"
+  integrity "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="
+  dependencies:
+    "is-glob" "4.0.3"
+
+"glob@7.2.3":
+  version "7.2.3"
+  resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz"
+  integrity "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="
+  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"
+
+"globals@11.12.0":
+  version "11.12.0"
+  resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz"
+  integrity "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="
+
+"globals@13.20.0":
+  version "13.20.0"
+  resolved "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz"
+  integrity "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ=="
+  dependencies:
+    "type-fest" "0.20.2"
+
+"globalthis@1.0.3":
+  version "1.0.3"
+  resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz"
+  integrity "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA=="
+  dependencies:
+    "define-properties" "1.2.0"
+
+"globby@11.1.0":
+  version "11.1.0"
+  resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz"
+  integrity "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g=="
+  dependencies:
+    "array-union" "2.1.0"
+    "dir-glob" "3.0.1"
+    "fast-glob" "3.3.0"
+    "ignore" "5.2.4"
+    "merge2" "1.4.1"
+    "slash" "3.0.0"
+
+"gopd@1.0.1":
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz"
+  integrity "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA=="
+  dependencies:
+    "get-intrinsic" "1.2.1"
+
+"grapheme-splitter@1.0.4":
+  version "1.0.4"
+  resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz"
+  integrity "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ=="
+
+"graphemer@1.4.0":
+  version "1.4.0"
+  resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz"
+  integrity "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="
+
+"has-bigints@1.0.2":
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz"
+  integrity "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ=="
+
+"has-flag@3.0.0":
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz"
+  integrity "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="
+
+"has-flag@4.0.0":
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
+  integrity "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+
+"has-property-descriptors@1.0.0":
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz"
+  integrity "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ=="
+  dependencies:
+    "get-intrinsic" "1.2.1"
+
+"has-proto@1.0.1":
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz"
+  integrity "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
+
+"has-symbols@1.0.3":
+  version "1.0.3"
+  resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz"
+  integrity "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+
+"has-tostringtag@1.0.0":
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz"
+  integrity "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ=="
+  dependencies:
+    "has-symbols" "1.0.3"
+
+"has@1.0.3":
+  version "1.0.3"
+  resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz"
+  integrity "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw=="
+  dependencies:
+    "function-bind" "1.1.1"
+
+"he@1.2.0":
+  version "1.2.0"
+  resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz"
+  integrity "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
+
+"human-signals@2.1.0":
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz"
+  integrity "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="
+
+"humanize-duration@^3.28.0", "humanize-duration@3.28.0":
+  version "3.28.0"
+  resolved "https://registry.npmjs.org/humanize-duration/-/humanize-duration-3.28.0.tgz"
+  integrity "sha512-jMAxraOOmHuPbffLVDKkEKi/NeG8dMqP8lGRd6Tbf7JgAeG33jjgPWDbXXU7ypCI0o+oNKJFgbSB9FKVdWNI2A=="
+
+"ignore@5.2.4":
+  version "5.2.4"
+  resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz"
+  integrity "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ=="
+
+"import-fresh@3.3.0":
+  version "3.3.0"
+  resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz"
+  integrity "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw=="
+  dependencies:
+    "parent-module" "1.0.1"
+    "resolve-from" "4.0.0"
+
+"imurmurhash@0.1.4":
+  version "0.1.4"
+  resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz"
+  integrity "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="
+
+"inflight@1.0.6":
+  version "1.0.6"
+  resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz"
+  integrity "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="
+  dependencies:
+    "once" "1.4.0"
+    "wrappy" "1.0.2"
+
+"inherits@2.0.4":
+  version "2.0.4"
+  resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
+  integrity "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+
+"internal-slot@1.0.5":
+  version "1.0.5"
+  resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz"
+  integrity "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ=="
+  dependencies:
+    "get-intrinsic" "1.2.1"
+    "has" "1.0.3"
+    "side-channel" "1.0.4"
+
+"is-array-buffer@3.0.2":
+  version "3.0.2"
+  resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz"
+  integrity "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w=="
+  dependencies:
+    "call-bind" "1.0.2"
+    "get-intrinsic" "1.2.1"
+    "is-typed-array" "1.1.10"
+
+"is-bigint@1.0.4":
+  version "1.0.4"
+  resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz"
+  integrity "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg=="
+  dependencies:
+    "has-bigints" "1.0.2"
+
+"is-binary-path@2.1.0":
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz"
+  integrity "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="
+  dependencies:
+    "binary-extensions" "2.2.0"
+
+"is-boolean-object@1.1.2":
+  version "1.1.2"
+  resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz"
+  integrity "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA=="
+  dependencies:
+    "call-bind" "1.0.2"
+    "has-tostringtag" "1.0.0"
+
+"is-callable@1.2.7":
+  version "1.2.7"
+  resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz"
+  integrity "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="
+
+"is-core-module@2.12.1":
+  version "2.12.1"
+  resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz"
+  integrity "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg=="
+  dependencies:
+    "has" "1.0.3"
+
+"is-date-object@1.0.5":
+  version "1.0.5"
+  resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz"
+  integrity "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ=="
+  dependencies:
+    "has-tostringtag" "1.0.0"
+
+"is-extglob@2.1.1":
+  version "2.1.1"
+  resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz"
+  integrity "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
+
+"is-glob@4.0.3":
+  version "4.0.3"
+  resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz"
+  integrity "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="
+  dependencies:
+    "is-extglob" "2.1.1"
+
+"is-negative-zero@2.0.2":
+  version "2.0.2"
+  resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz"
+  integrity "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA=="
+
+"is-number-object@1.0.7":
+  version "1.0.7"
+  resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz"
+  integrity "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ=="
+  dependencies:
+    "has-tostringtag" "1.0.0"
+
+"is-number@7.0.0":
+  version "7.0.0"
+  resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz"
+  integrity "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+
+"is-path-inside@3.0.3":
+  version "3.0.3"
+  resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz"
+  integrity "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ=="
+
+"is-regex@1.1.4":
+  version "1.1.4"
+  resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz"
+  integrity "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg=="
+  dependencies:
+    "call-bind" "1.0.2"
+    "has-tostringtag" "1.0.0"
+
+"is-shared-array-buffer@1.0.2":
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz"
+  integrity "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA=="
+  dependencies:
+    "call-bind" "1.0.2"
+
+"is-stream@2.0.1":
+  version "2.0.1"
+  resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz"
+  integrity "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="
+
+"is-string@1.0.7":
+  version "1.0.7"
+  resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz"
+  integrity "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg=="
+  dependencies:
+    "has-tostringtag" "1.0.0"
+
+"is-symbol@1.0.4":
+  version "1.0.4"
+  resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz"
+  integrity "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg=="
+  dependencies:
+    "has-symbols" "1.0.3"
+
+"is-typed-array@1.1.10":
+  version "1.1.10"
+  resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz"
+  integrity "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A=="
+  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-weakref@1.0.2":
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz"
+  integrity "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ=="
+  dependencies:
+    "call-bind" "1.0.2"
+
+"isexe@2.0.0":
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz"
+  integrity "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+
+"javascript-time-ago@^2.5.9", "javascript-time-ago@2.5.9":
+  version "2.5.9"
+  resolved "https://registry.npmjs.org/javascript-time-ago/-/javascript-time-ago-2.5.9.tgz"
+  integrity "sha512-pQ8mNco/9g9TqWXWWjP0EWl6i/lAQScOyEeXy5AB+f7MfLSdgyV9BJhiOD1zrIac/lrxPYOWNbyl/IW8CW5n0A=="
+  dependencies:
+    "relative-time-format" "1.1.6"
+
+"jiti@1.18.2":
+  version "1.18.2"
+  resolved "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz"
+  integrity "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg=="
+
+"js-tokens@4.0.0":
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz"
+  integrity "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+
+"js-yaml@4.1.0":
+  version "4.1.0"
+  resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz"
+  integrity "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="
+  dependencies:
+    "argparse" "2.0.1"
+
+"jsesc@2.5.2":
+  version "2.5.2"
+  resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz"
+  integrity "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
+
+"json-schema-traverse@0.4.1":
+  version "0.4.1"
+  resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz"
+  integrity "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+
+"json-stable-stringify-without-jsonify@1.0.1":
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz"
+  integrity "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="
+
+"json5@1.0.2":
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz"
+  integrity "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="
+  dependencies:
+    "minimist" "1.2.8"
+
+"json5@2.2.3":
+  version "2.2.3"
+  resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz"
+  integrity "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="
+
+"jsonc-eslint-parser@1.4.1":
+  version "1.4.1"
+  resolved "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-1.4.1.tgz"
+  integrity "sha512-hXBrvsR1rdjmB2kQmUjf1rEIa+TqHBGMge8pwi++C+Si1ad7EjZrJcpgwym+QGK/pqTx+K7keFAtLlVNdLRJOg=="
+  dependencies:
+    "acorn" "7.4.1"
+    "eslint-utils" "2.1.0"
+    "eslint-visitor-keys" "1.3.0"
+    "espree" "6.2.1"
+    "semver" "7.5.3"
+
+"kolorist@1.8.0":
+  version "1.8.0"
+  resolved "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz"
+  integrity "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ=="
+
+"levn@0.4.1":
+  version "0.4.1"
+  resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz"
+  integrity "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="
+  dependencies:
+    "prelude-ls" "1.2.1"
+    "type-check" "0.4.0"
+
+"local-pkg@0.4.3":
+  version "0.4.3"
+  resolved "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz"
+  integrity "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g=="
+
+"locate-path@6.0.0":
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz"
+  integrity "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="
+  dependencies:
+    "p-locate" "5.0.0"
+
+"lodash.merge@4.6.2":
+  version "4.6.2"
+  resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz"
+  integrity "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
+
+"lodash.sortedlastindex@4.1.0":
+  version "4.1.0"
+  resolved "https://registry.npmjs.org/lodash.sortedlastindex/-/lodash.sortedlastindex-4.1.0.tgz"
+  integrity "sha512-s8xEQdsp2Tu5zUqVdFSe9C0kR8YlnAJYLqMdkh+pIRBRxF6/apWseLdHl3/+jv2I61dhPwtI/Ff+EqvCpc+N8w=="
+
+"lodash@^4.17.21", "lodash@4.17.21":
+  version "4.17.21"
+  resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
+  integrity "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+
+"lru-cache@5.1.1":
+  version "5.1.1"
+  resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz"
+  integrity "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="
+  dependencies:
+    "yallist" "3.1.1"
+
+"lru-cache@6.0.0":
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz"
+  integrity "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="
+  dependencies:
+    "yallist" "4.0.0"
+
+"magic-string@0.30.0":
+  version "0.30.0"
+  resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz"
+  integrity "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ=="
+  dependencies:
+    "@jridgewell/sourcemap-codec" "1.4.15"
+
+"mdn-data@2.0.28":
+  version "2.0.28"
+  resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz"
+  integrity "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="
+
+"mdn-data@2.0.30":
+  version "2.0.30"
+  resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz"
+  integrity "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA=="
+
+"merge-stream@2.0.0":
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz"
+  integrity "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
+
+"merge2@1.4.1":
+  version "1.4.1"
+  resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz"
+  integrity "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
+
+"micromatch@4.0.5":
+  version "4.0.5"
+  resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz"
+  integrity "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA=="
+  dependencies:
+    "braces" "3.0.2"
+    "picomatch" "2.3.1"
+
+"mimic-fn@2.1.0":
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz"
+  integrity "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
+
+"minimatch@3.1.2":
+  version "3.1.2"
+  resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz"
+  integrity "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="
+  dependencies:
+    "brace-expansion" "1.1.11"
+
+"minimatch@7.4.6":
+  version "7.4.6"
+  resolved "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz"
+  integrity "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw=="
+  dependencies:
+    "brace-expansion" "2.0.1"
+
+"minimatch@9.0.2":
+  version "9.0.2"
+  resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.2.tgz"
+  integrity "sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg=="
+  dependencies:
+    "brace-expansion" "2.0.1"
+
+"minimist@1.2.8":
+  version "1.2.8"
+  resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz"
+  integrity "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="
+
+"ms@2.1.2":
+  version "2.1.2"
+  resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
+  integrity "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+
+"ms@2.1.3":
+  version "2.1.3"
+  resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
+  integrity "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+
+"muggle-string@0.3.1":
+  version "0.3.1"
+  resolved "https://registry.npmjs.org/muggle-string/-/muggle-string-0.3.1.tgz"
+  integrity "sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg=="
+
+"nanoid@3.3.6":
+  version "3.3.6"
+  resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz"
+  integrity "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA=="
+
+"natural-compare-lite@1.4.0":
+  version "1.4.0"
+  resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz"
+  integrity "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g=="
+
+"natural-compare@1.4.0":
+  version "1.4.0"
+  resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz"
+  integrity "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="
+
+"node-emoji@^1.11.0", "node-emoji@1.11.0":
+  version "1.11.0"
+  resolved "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz"
+  integrity "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A=="
+  dependencies:
+    "lodash" "4.17.21"
+
+"node-releases@2.0.12":
+  version "2.0.12"
+  resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz"
+  integrity "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ=="
+
+"normalize-path@3.0.0":
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz"
+  integrity "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+
+"npm-run-path@4.0.1":
+  version "4.0.1"
+  resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz"
+  integrity "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="
+  dependencies:
+    "path-key" "3.1.1"
+
+"nth-check@2.1.1":
+  version "2.1.1"
+  resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz"
+  integrity "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="
+  dependencies:
+    "boolbase" "1.0.0"
+
+"object-inspect@1.12.3":
+  version "1.12.3"
+  resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz"
+  integrity "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+
+"object-keys@1.1.1":
+  version "1.1.1"
+  resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz"
+  integrity "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
+
+"object.assign@4.1.4":
+  version "4.1.4"
+  resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz"
+  integrity "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ=="
+  dependencies:
+    "call-bind" "1.0.2"
+    "define-properties" "1.2.0"
+    "has-symbols" "1.0.3"
+    "object-keys" "1.1.1"
+
+"object.entries@1.1.6":
+  version "1.1.6"
+  resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz"
+  integrity "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w=="
+  dependencies:
+    "call-bind" "1.0.2"
+    "define-properties" "1.2.0"
+    "es-abstract" "1.21.2"
+
+"object.values@1.1.6":
+  version "1.1.6"
+  resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz"
+  integrity "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw=="
+  dependencies:
+    "call-bind" "1.0.2"
+    "define-properties" "1.2.0"
+    "es-abstract" "1.21.2"
+
+"once@1.4.0":
+  version "1.4.0"
+  resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz"
+  integrity "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="
+  dependencies:
+    "wrappy" "1.0.2"
+
+"onetime@5.1.2":
+  version "5.1.2"
+  resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz"
+  integrity "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="
+  dependencies:
+    "mimic-fn" "2.1.0"
+
+"optionator@0.9.3":
+  version "0.9.3"
+  resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz"
+  integrity "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg=="
+  dependencies:
+    "@aashutoshrathi/word-wrap" "1.2.6"
+    "deep-is" "0.1.4"
+    "fast-levenshtein" "2.0.6"
+    "levn" "0.4.1"
+    "prelude-ls" "1.2.1"
+    "type-check" "0.4.0"
+
+"p-limit@3.1.0":
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz"
+  integrity "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="
+  dependencies:
+    "yocto-queue" "0.1.0"
+
+"p-locate@5.0.0":
+  version "5.0.0"
+  resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz"
+  integrity "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="
+  dependencies:
+    "p-limit" "3.1.0"
+
+"parent-module@1.0.1":
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz"
+  integrity "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="
+  dependencies:
+    "callsites" "3.1.0"
+
+"path-exists@4.0.0":
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz"
+  integrity "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
+
+"path-is-absolute@1.0.1":
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz"
+  integrity "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+
+"path-key@3.1.1":
+  version "3.1.1"
+  resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz"
+  integrity "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
+
+"path-parse@1.0.7":
+  version "1.0.7"
+  resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz"
+  integrity "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+
+"path-type@4.0.0":
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz"
+  integrity "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
+
+"pathe@1.1.1":
+  version "1.1.1"
+  resolved "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz"
+  integrity "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q=="
+
+"picocolors@1.0.0":
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz"
+  integrity "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+
+"picomatch@2.3.1":
+  version "2.3.1"
+  resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"
+  integrity "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
+
+"pinia@^2.1.4", "pinia@2.1.4":
+  version "2.1.4"
+  resolved "https://registry.npmjs.org/pinia/-/pinia-2.1.4.tgz"
+  integrity "sha512-vYlnDu+Y/FXxv1ABo1vhjC+IbqvzUdiUC3sfDRrRyY2CQSrqqaa+iiHmqtARFxJVqWQMCJfXx1PBvFs9aJVLXQ=="
+  dependencies:
+    "@vue/devtools-api" "6.5.0"
+    "typescript" "5.0.3"
+    "vue" "3.3.4"
+    "vue-demi" "0.14.5"
+
+"postcss-safe-parser@6.0.0":
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz"
+  integrity "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ=="
+  dependencies:
+    "postcss" "8.4.24"
+
+"postcss-scss@4.0.6":
+  version "4.0.6"
+  resolved "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.6.tgz"
+  integrity "sha512-rLDPhJY4z/i4nVFZ27j9GqLxj1pwxE80eAzUNRMXtcpipFYIeowerzBgG3yJhMtObGEXidtIgbUpQ3eLDsf5OQ=="
+  dependencies:
+    "postcss" "8.4.24"
+
+"postcss-selector-parser@6.0.13":
+  version "6.0.13"
+  resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz"
+  integrity "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ=="
+  dependencies:
+    "cssesc" "3.0.0"
+    "util-deprecate" "1.0.2"
+
+"postcss-styl@0.12.3":
+  version "0.12.3"
+  resolved "https://registry.npmjs.org/postcss-styl/-/postcss-styl-0.12.3.tgz"
+  integrity "sha512-8I7Cd8sxiEITIp32xBK4K/Aj1ukX6vuWnx8oY/oAH35NfQI4OZaY5nd68Yx8HeN5S49uhQ6DL0rNk0ZBu/TaLg=="
+  dependencies:
+    "debug" "4.3.4"
+    "fast-diff" "1.3.0"
+    "lodash.sortedlastindex" "4.1.0"
+    "postcss" "8.4.24"
+    "stylus" "0.57.0"
+
+"postcss@8.4.24":
+  version "8.4.24"
+  resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz"
+  integrity "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg=="
+  dependencies:
+    "nanoid" "3.3.6"
+    "picocolors" "1.0.0"
+    "source-map-js" "1.0.2"
+
+"prelude-ls@1.2.1":
+  version "1.2.1"
+  resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz"
+  integrity "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="
+
+"prettier-linter-helpers@1.0.0":
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz"
+  integrity "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w=="
+  dependencies:
+    "fast-diff" "1.3.0"
+
+"prettier@^2.8.8", "prettier@2.8.8":
+  version "2.8.8"
+  resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz"
+  integrity "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q=="
+
+"prismjs@^1.29.0", "prismjs@1.29.0":
+  version "1.29.0"
+  resolved "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz"
+  integrity "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q=="
+
+"punycode@2.3.0":
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz"
+  integrity "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA=="
+
+"queue-microtask@1.2.3":
+  version "1.2.3"
+  resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz"
+  integrity "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
+
+"readdirp@3.6.0":
+  version "3.6.0"
+  resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz"
+  integrity "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="
+  dependencies:
+    "picomatch" "2.3.1"
+
+"regexp.prototype.flags@1.5.0":
+  version "1.5.0"
+  resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz"
+  integrity "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA=="
+  dependencies:
+    "call-bind" "1.0.2"
+    "define-properties" "1.2.0"
+    "functions-have-names" "1.2.3"
+
+"relative-time-format@1.1.6":
+  version "1.1.6"
+  resolved "https://registry.npmjs.org/relative-time-format/-/relative-time-format-1.1.6.tgz"
+  integrity "sha512-aCv3juQw4hT1/P/OrVltKWLlp15eW1GRcwP1XdxHrPdZE9MtgqFpegjnTjLhi2m2WI9MT/hQQtE+tjEWG1hgkQ=="
+
+"resolve-from@4.0.0":
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz"
+  integrity "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
+
+"resolve@1.22.2":
+  version "1.22.2"
+  resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz"
+  integrity "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g=="
+  dependencies:
+    "is-core-module" "2.12.1"
+    "path-parse" "1.0.7"
+    "supports-preserve-symlinks-flag" "1.0.0"
+
+"reusify@1.0.4":
+  version "1.0.4"
+  resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz"
+  integrity "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
+
+"rimraf@3.0.2":
+  version "3.0.2"
+  resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz"
+  integrity "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="
+  dependencies:
+    "glob" "7.2.3"
+
+"rollup@3.26.0":
+  version "3.26.0"
+  resolved "https://registry.npmjs.org/rollup/-/rollup-3.26.0.tgz"
+  integrity "sha512-YzJH0eunH2hr3knvF3i6IkLO/jTjAEwU4HoMUbQl4//Tnl3ou0e7P5SjxdDr8HQJdeUJShlbEHXrrnEHy1l7Yg=="
+
+"run-parallel@1.2.0":
+  version "1.2.0"
+  resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz"
+  integrity "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="
+  dependencies:
+    "queue-microtask" "1.2.3"
+
+"safe-regex-test@1.0.0":
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz"
+  integrity "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA=="
+  dependencies:
+    "call-bind" "1.0.2"
+    "get-intrinsic" "1.2.1"
+    "is-regex" "1.1.4"
+
+"safer-buffer@2.1.2":
+  version "2.1.2"
+  resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
+  integrity "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+
+"sax@1.2.4":
+  version "1.2.4"
+  resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz"
+  integrity "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
+
+"semver@7.5.3":
+  version "7.5.3"
+  resolved "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz"
+  integrity "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ=="
+  dependencies:
+    "lru-cache" "6.0.0"
+
+"shebang-command@2.0.0":
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz"
+  integrity "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="
+  dependencies:
+    "shebang-regex" "3.0.0"
+
+"shebang-regex@3.0.0":
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz"
+  integrity "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
+
+"side-channel@1.0.4":
+  version "1.0.4"
+  resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz"
+  integrity "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw=="
+  dependencies:
+    "call-bind" "1.0.2"
+    "get-intrinsic" "1.2.1"
+    "object-inspect" "1.12.3"
+
+"signal-exit@3.0.7":
+  version "3.0.7"
+  resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz"
+  integrity "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
+
+"slash@3.0.0":
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz"
+  integrity "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="
+
+"source-map-js@1.0.2":
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz"
+  integrity "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
+
+"source-map-resolve@0.6.0":
+  version "0.6.0"
+  resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz"
+  integrity "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w=="
+  dependencies:
+    "atob" "2.1.2"
+    "decode-uri-component" "0.2.2"
+
+"source-map@0.6.1":
+  version "0.6.1"
+  resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
+  integrity "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+
+"source-map@0.7.4":
+  version "0.7.4"
+  resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz"
+  integrity "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="
+
+"string.prototype.trim@1.2.7":
+  version "1.2.7"
+  resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz"
+  integrity "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg=="
+  dependencies:
+    "call-bind" "1.0.2"
+    "define-properties" "1.2.0"
+    "es-abstract" "1.21.2"
+
+"string.prototype.trimend@1.0.6":
+  version "1.0.6"
+  resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz"
+  integrity "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ=="
+  dependencies:
+    "call-bind" "1.0.2"
+    "define-properties" "1.2.0"
+    "es-abstract" "1.21.2"
+
+"string.prototype.trimstart@1.0.6":
+  version "1.0.6"
+  resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz"
+  integrity "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA=="
+  dependencies:
+    "call-bind" "1.0.2"
+    "define-properties" "1.2.0"
+    "es-abstract" "1.21.2"
+
+"strip-ansi@6.0.1":
+  version "6.0.1"
+  resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
+  integrity "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="
+  dependencies:
+    "ansi-regex" "5.0.1"
+
+"strip-bom@3.0.0":
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz"
+  integrity "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="
+
+"strip-final-newline@2.0.0":
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz"
+  integrity "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="
+
+"strip-json-comments@3.1.1":
+  version "3.1.1"
+  resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz"
+  integrity "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="
+
+"stylus@0.57.0":
+  version "0.57.0"
+  resolved "https://registry.npmjs.org/stylus/-/stylus-0.57.0.tgz"
+  integrity "sha512-yOI6G8WYfr0q8v8rRvE91wbxFU+rJPo760Va4MF6K0I6BZjO4r+xSynkvyPBP9tV1CIEUeRsiidjIs2rzb1CnQ=="
+  dependencies:
+    "css" "3.0.0"
+    "debug" "4.3.4"
+    "glob" "7.2.3"
+    "safer-buffer" "2.1.2"
+    "sax" "1.2.4"
+    "source-map" "0.7.4"
+
+"supports-color@5.5.0":
+  version "5.5.0"
+  resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz"
+  integrity "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="
+  dependencies:
+    "has-flag" "3.0.0"
+
+"supports-color@7.2.0":
+  version "7.2.0"
+  resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"
+  integrity "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="
+  dependencies:
+    "has-flag" "4.0.0"
+
+"supports-preserve-symlinks-flag@1.0.0":
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz"
+  integrity "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+
+"svgo@3.0.2":
+  version "3.0.2"
+  resolved "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz"
+  integrity "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ=="
+  dependencies:
+    "@trysound/sax" "0.2.0"
+    "commander" "7.2.0"
+    "css-select" "5.1.0"
+    "css-tree" "2.3.1"
+    "csso" "5.0.5"
+    "picocolors" "1.0.0"
+
+"text-table@0.2.0":
+  version "0.2.0"
+  resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz"
+  integrity "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
+
+"to-fast-properties@2.0.0":
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz"
+  integrity "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog=="
+
+"to-regex-range@5.0.1":
+  version "5.0.1"
+  resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz"
+  integrity "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="
+  dependencies:
+    "is-number" "7.0.0"
+
+"tsconfig-paths@3.14.2":
+  version "3.14.2"
+  resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz"
+  integrity "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g=="
+  dependencies:
+    "@types/json5" "0.0.29"
+    "json5" "1.0.2"
+    "minimist" "1.2.8"
+    "strip-bom" "3.0.0"
+
+"tslib@1.14.1":
+  version "1.14.1"
+  resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz"
+  integrity "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+
+"tsutils@3.21.0":
+  version "3.21.0"
+  resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz"
+  integrity "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA=="
+  dependencies:
+    "tslib" "1.14.1"
+    "typescript" "5.0.3"
+
+"type-check@0.4.0":
+  version "0.4.0"
+  resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz"
+  integrity "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="
+  dependencies:
+    "prelude-ls" "1.2.1"
+
+"type-fest@0.20.2":
+  version "0.20.2"
+  resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz"
+  integrity "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="
+
+"typed-array-length@1.0.4":
+  version "1.0.4"
+  resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz"
+  integrity "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng=="
+  dependencies:
+    "call-bind" "1.0.2"
+    "for-each" "0.3.3"
+    "is-typed-array" "1.1.10"
+
+"typescript@5.0.3":
+  version "5.0.3"
+  resolved "https://registry.npmjs.org/typescript/-/typescript-5.0.3.tgz"
+  integrity "sha512-xv8mOEDnigb/tN9PSMTwSEqAnUvkoXMQlicOb0IUVDBSQCgBSaAAROUZYy2IcUy5qU6XajK5jjjO7TMWqBTKZA=="
+
+"unbox-primitive@1.0.2":
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz"
+  integrity "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw=="
+  dependencies:
+    "call-bind" "1.0.2"
+    "has-bigints" "1.0.2"
+    "has-symbols" "1.0.3"
+    "which-boxed-primitive" "1.0.2"
+
+"unplugin-icons@^0.16.3", "unplugin-icons@0.16.3":
+  version "0.16.3"
+  resolved "https://registry.npmjs.org/unplugin-icons/-/unplugin-icons-0.16.3.tgz"
+  integrity "sha512-hivVVr6++WHSj6Iz+rjTa14/ALMYT+PFd2sPtTBKlQR3cdzui1VwM72TzSu94NkDm/KVncvOIiBwoHwUPeL9bg=="
+  dependencies:
+    "@antfu/install-pkg" "0.1.1"
+    "@antfu/utils" "0.7.4"
+    "@iconify/utils" "2.1.7"
+    "@vue/compiler-sfc" "3.3.4"
+    "debug" "4.3.4"
+    "kolorist" "1.8.0"
+    "local-pkg" "0.4.3"
+    "unplugin" "1.3.1"
+
+"unplugin-vue-components@^0.24.1", "unplugin-vue-components@0.24.1":
+  version "0.24.1"
+  resolved "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-0.24.1.tgz"
+  integrity "sha512-T3A8HkZoIE1Cja95xNqolwza0yD5IVlgZZ1PVAGvVCx8xthmjsv38xWRCtHtwl+rvZyL9uif42SRkDGw9aCfMA=="
+  dependencies:
+    "@antfu/utils" "0.7.4"
+    "@rollup/pluginutils" "5.0.2"
+    "chokidar" "3.5.3"
+    "debug" "4.3.4"
+    "fast-glob" "3.3.0"
+    "local-pkg" "0.4.3"
+    "magic-string" "0.30.0"
+    "minimatch" "7.4.6"
+    "resolve" "1.22.2"
+    "unplugin" "1.3.1"
+    "vue" "3.3.4"
+
+"unplugin@1.3.1":
+  version "1.3.1"
+  resolved "https://registry.npmjs.org/unplugin/-/unplugin-1.3.1.tgz"
+  integrity "sha512-h4uUTIvFBQRxUKS2Wjys6ivoeofGhxzTe2sRWlooyjHXVttcVfV/JiavNd3d4+jty0SVV0dxGw9AkY9MwiaCEw=="
+  dependencies:
+    "acorn" "8.9.0"
+    "chokidar" "3.5.3"
+    "webpack-sources" "3.2.3"
+    "webpack-virtual-modules" "0.5.0"
+
+"update-browserslist-db@1.0.11":
+  version "1.0.11"
+  resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz"
+  integrity "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA=="
+  dependencies:
+    "browserslist" "4.21.9"
+    "escalade" "3.1.1"
+    "picocolors" "1.0.0"
+
+"uri-js@4.4.1":
+  version "4.4.1"
+  resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz"
+  integrity "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="
+  dependencies:
+    "punycode" "2.3.0"
+
+"util-deprecate@1.0.2":
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
+  integrity "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+
+"vite-plugin-prismjs@^0.0.8", "vite-plugin-prismjs@0.0.8":
+  version "0.0.8"
+  resolved "https://registry.npmjs.org/vite-plugin-prismjs/-/vite-plugin-prismjs-0.0.8.tgz"
+  integrity "sha512-mBPPMS/hwVUArdqCtp/oajZT7iq1qwJDDCciNZ3R5+Q5tQUuUHXtDKuZHYnklPLElNbENf2FyuOtC4FrgxQRAA=="
+  dependencies:
+    "@babel/core" "7.22.5"
+    "babel-plugin-prismjs" "2.1.0"
+
+"vite-plugin-windicss@^1.9.0", "vite-plugin-windicss@1.9.0":
+  version "1.9.0"
+  resolved "https://registry.npmjs.org/vite-plugin-windicss/-/vite-plugin-windicss-1.9.0.tgz"
+  integrity "sha512-w0unPfcbVU5eaISAsFTLgIb41SLhmXoUF75Othu8NqFioe8+DEqiuvJ7/k/LRuEuvI8Rt/OKrY6cNzrB+dykaA=="
+  dependencies:
+    "@windicss/plugin-utils" "1.9.0"
+    "debug" "4.3.4"
+    "kolorist" "1.8.0"
+    "vite" "4.3.9"
+    "windicss" "3.5.6"
+
+"vite-svg-loader@^4.0.0", "vite-svg-loader@4.0.0":
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/vite-svg-loader/-/vite-svg-loader-4.0.0.tgz"
+  integrity "sha512-0MMf1yzzSYlV4MGePsLVAOqXsbF5IVxbn4EEzqRnWxTQl8BJg/cfwIzfQNmNQxZp5XXwd4kyRKF1LytuHZTnqA=="
+  dependencies:
+    "@vue/compiler-sfc" "3.3.4"
+    "svgo" "3.0.2"
+
+"vite@^4.3.9", "vite@4.3.9":
+  version "4.3.9"
+  resolved "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz"
+  integrity "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg=="
+  dependencies:
+    "@types/node" "18.16.19"
+    "esbuild" "0.17.19"
+    "postcss" "8.4.24"
+    "rollup" "3.26.0"
+
+"vue-demi@0.14.5":
+  version "0.14.5"
+  resolved "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.5.tgz"
+  integrity "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA=="
+  dependencies:
+    "vue" "3.3.4"
+
+"vue-eslint-parser@^9.3.1", "vue-eslint-parser@9.3.1":
+  version "9.3.1"
+  resolved "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.1.tgz"
+  integrity "sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g=="
+  dependencies:
+    "debug" "4.3.4"
+    "eslint" "8.44.0"
+    "eslint-scope" "7.2.0"
+    "eslint-visitor-keys" "3.4.1"
+    "espree" "9.6.0"
+    "esquery" "1.5.0"
+    "lodash" "4.17.21"
+    "semver" "7.5.3"
+
+"vue-i18n@^9.2.2", "vue-i18n@9.2.2":
+  version "9.2.2"
+  resolved "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.2.2.tgz"
+  integrity "sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ=="
+  dependencies:
+    "@intlify/core-base" "9.2.2"
+    "@intlify/shared" "9.2.2"
+    "@intlify/vue-devtools" "9.2.2"
+    "@vue/devtools-api" "6.5.0"
+    "vue" "3.3.4"
+
+"vue-resize@2.0.0-alpha.1":
+  version "2.0.0-alpha.1"
+  resolved "https://registry.npmjs.org/vue-resize/-/vue-resize-2.0.0-alpha.1.tgz"
+  integrity "sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg=="
+  dependencies:
+    "vue" "3.3.4"
+
+"vue-router@^4.2.2", "vue-router@4.2.2":
+  version "4.2.2"
+  resolved "https://registry.npmjs.org/vue-router/-/vue-router-4.2.2.tgz"
+  integrity "sha512-cChBPPmAflgBGmy3tBsjeoe3f3VOSG6naKyY5pjtrqLGbNEXdzCigFUHgBvp9e3ysAtFtEx7OLqcSDh/1Cq2TQ=="
+  dependencies:
+    "@vue/devtools-api" "6.5.0"
+    "vue" "3.3.4"
+
+"vue-template-compiler@2.7.14":
+  version "2.7.14"
+  resolved "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz"
+  integrity "sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ=="
+  dependencies:
+    "de-indent" "1.0.2"
+    "he" "1.2.0"
+
+"vue-tsc@^1.8.3", "vue-tsc@1.8.3":
+  version "1.8.3"
+  resolved "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.3.tgz"
+  integrity "sha512-Ua4DHuYxjudlhCW2nRZtaXbhIDVncRGIbDjZhHpF8Z8vklct/G/35/kAPuGNSOmq0JcvhPAe28Oa7LWaUerZVA=="
+  dependencies:
+    "@vue/language-core" "1.8.3"
+    "@vue/typescript" "1.8.3"
+    "semver" "7.5.3"
+    "typescript" "5.0.3"
+
+"vue@^3.3.4", "vue@3.3.4":
+  version "3.3.4"
+  resolved "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz"
+  integrity "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw=="
+  dependencies:
+    "@vue/compiler-dom" "3.3.4"
+    "@vue/compiler-sfc" "3.3.4"
+    "@vue/runtime-dom" "3.3.4"
+    "@vue/server-renderer" "3.3.4"
+    "@vue/shared" "3.3.4"
+
+"webpack-sources@3.2.3":
+  version "3.2.3"
+  resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz"
+  integrity "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w=="
+
+"webpack-virtual-modules@0.5.0":
+  version "0.5.0"
+  resolved "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz"
+  integrity "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw=="
+
+"which-boxed-primitive@1.0.2":
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz"
+  integrity "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg=="
+  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-typed-array@1.1.9":
+  version "1.1.9"
+  resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz"
+  integrity "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA=="
+  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@2.0.2":
+  version "2.0.2"
+  resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz"
+  integrity "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="
+  dependencies:
+    "isexe" "2.0.0"
+
+"windicss@^3.5.6", "windicss@3.5.6":
+  version "3.5.6"
+  resolved "https://registry.npmjs.org/windicss/-/windicss-3.5.6.tgz"
+  integrity "sha512-P1mzPEjgFMZLX0ZqfFht4fhV/FX8DTG7ERG1fBLiWvd34pTLVReS5CVsewKn9PApSgXnVfPWwvq+qUsRwpnwFA=="
+
+"wrappy@1.0.2":
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
+  integrity "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+
+"xml-name-validator@4.0.0":
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz"
+  integrity "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw=="
+
+"yallist@3.1.1":
+  version "3.1.1"
+  resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz"
+  integrity "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+
+"yallist@4.0.0":
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz"
+  integrity "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+
+"yaml-eslint-parser@0.3.2":
+  version "0.3.2"
+  resolved "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-0.3.2.tgz"
+  integrity "sha512-32kYO6kJUuZzqte82t4M/gB6/+11WAuHiEnK7FreMo20xsCKPeFH5tDBU7iWxR7zeJpNnMXfJyXwne48D0hGrg=="
+  dependencies:
+    "eslint-visitor-keys" "1.3.0"
+    "lodash" "4.17.21"
+    "yaml" "1.10.2"
+
+"yaml@1.10.2":
+  version "1.10.2"
+  resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz"
+  integrity "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="
+
+"yocto-queue@0.1.0":
+  version "0.1.0"
+  resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz"
+  integrity "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="